@sebgroup/green-core 3.1.0 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/icons/regular/archive.svg +1 -1
- package/assets/icons/regular/bookmark-check.svg +1 -1
- package/assets/icons/regular/bookmark-delete.svg +1 -1
- package/assets/icons/regular/bookmark-plus.svg +1 -1
- package/assets/icons/regular/brand-bankid.svg +1 -1
- package/assets/icons/regular/chevron-grabber-vertical-reversed.svg +1 -0
- package/assets/icons/regular/cup-hot.svg +1 -1
- package/assets/icons/regular/home-energy-two.svg +1 -1
- package/assets/icons/regular/light-bulb-simple.svg +1 -1
- package/assets/icons/regular/trading-view-candles.svg +1 -1
- package/assets/icons/regular/volume-off.svg +1 -1
- package/assets/icons/solid/brand-figma.svg +2 -2
- package/assets/icons/solid/brand-green.svg +1 -1
- package/assets/icons/solid/brand-swish-word.svg +2 -2
- package/assets/icons/solid/brush.svg +1 -1
- package/assets/icons/solid/chain-link-broken.svg +1 -1
- package/assets/icons/solid/checklist.svg +1 -1
- package/assets/icons/solid/checkmark.svg +1 -1
- package/assets/icons/solid/chevron-grabber-vertical-reversed.svg +1 -0
- package/assets/icons/solid/globus.svg +6 -6
- package/assets/icons/solid/heart.svg +1 -1
- package/assets/icons/solid/home-roof.svg +1 -1
- package/assets/icons/solid/pension.svg +3 -3
- package/assets/icons/solid/run-shortcut.svg +2 -2
- package/assets/icons/solid/store.svg +1 -1
- package/assets/icons/solid/thumbs-down.svg +1 -1
- package/assets/icons/solid/trading-view-candles.svg +2 -2
- package/assets/icons/solid/trending-three.svg +1 -1
- package/bin/context-cli/index.js +46 -0
- package/bin/mcp-server/constants.d.ts +10 -0
- package/bin/mcp-server/constants.js +21 -0
- package/bin/mcp-server/handlers.d.ts +10 -0
- package/bin/mcp-server/handlers.js +110 -0
- package/bin/mcp-server/resources.js +65 -0
- package/bin/mcp-server/tools.js +39 -0
- package/bin/mcp-server/types.d.ts +77 -0
- package/bin/mcp-server/utils.d.ts +6 -7
- package/bin/mcp-server/utils.js +12 -11
- package/bin/mcp-server/validation.d.ts +8 -1
- package/bin/mcp-server/validation.js +37 -1
- package/components/button/button.component.js +2 -1
- package/components/context-menu/context-menu.component.d.ts +5 -1
- package/components/context-menu/context-menu.component.js +21 -2
- package/components/details/details.component.js +1 -1
- package/components/form-summary/summary.component.d.ts +4 -2
- package/components/form-summary/summary.component.js +116 -55
- package/components/form-summary/summary.styles.js +16 -2
- package/components/icon/icons/archive.component.js +1 -1
- package/components/icon/icons/bookmark-check.component.js +1 -1
- package/components/icon/icons/bookmark-delete.component.js +1 -1
- package/components/icon/icons/bookmark-plus.component.js +1 -1
- package/components/icon/icons/brand-bankid.component.js +1 -1
- package/components/icon/icons/brand-figma.component.js +1 -1
- package/components/icon/icons/brand-green.component.js +1 -1
- package/components/icon/icons/brand-swish-word.component.js +1 -1
- package/components/icon/icons/brush.component.js +1 -1
- package/components/icon/icons/chain-link-broken.component.js +1 -1
- package/components/icon/icons/checklist.component.js +1 -1
- package/components/icon/icons/checkmark.component.js +1 -1
- package/components/icon/icons/chevron-grabber-vertical-reversed.component.d.ts +18 -0
- package/components/icon/icons/chevron-grabber-vertical-reversed.component.js +25 -0
- package/components/icon/icons/chevron-grabber-vertical-reversed.d.ts +2 -0
- package/components/icon/icons/chevron-grabber-vertical-reversed.js +6 -0
- package/components/icon/icons/cup-hot.component.js +1 -1
- package/components/icon/icons/globus.component.js +1 -1
- package/components/icon/icons/heart.component.js +1 -1
- package/components/icon/icons/home-energy-two.component.js +1 -1
- package/components/icon/icons/home-roof.component.js +1 -1
- package/components/icon/icons/index.d.ts +1 -0
- package/components/icon/icons/index.js +1 -0
- package/components/icon/icons/light-bulb-simple.component.js +1 -1
- package/components/icon/icons/pension.component.js +1 -1
- package/components/icon/icons/pure.d.ts +1 -0
- package/components/icon/icons/pure.js +1 -0
- package/components/icon/icons/run-shortcut.component.js +1 -1
- package/components/icon/icons/store.component.js +1 -1
- package/components/icon/icons/thumbs-down.component.js +1 -1
- package/components/icon/icons/trading-view-candles.component.js +2 -2
- package/components/icon/icons/trending-three.component.js +1 -1
- package/components/icon/icons/volume-off.component.js +1 -1
- package/custom-elements.json +37837 -37078
- package/gds-element.js +1 -1
- package/generated/locales/da.d.ts +1 -1
- package/generated/locales/da.js +1 -1
- package/generated/locales/de.d.ts +1 -1
- package/generated/locales/de.js +1 -1
- package/generated/locales/fi.d.ts +1 -1
- package/generated/locales/fi.js +1 -1
- package/generated/locales/fr.d.ts +1 -1
- package/generated/locales/fr.js +1 -1
- package/generated/locales/it.d.ts +1 -1
- package/generated/locales/it.js +1 -1
- package/generated/locales/nl.d.ts +1 -1
- package/generated/locales/nl.js +1 -1
- package/generated/locales/no.d.ts +1 -1
- package/generated/locales/no.js +1 -1
- package/generated/locales/sv.d.ts +1 -1
- package/generated/locales/sv.js +1 -1
- package/generated/mcp/INSTRUCTIONS.md +10 -0
- package/generated/mcp/badge/api.md +2 -0
- package/generated/mcp/breadcrumbs/api.md +2 -0
- package/generated/mcp/button/api.md +2 -0
- package/generated/mcp/card/api.md +2 -0
- package/generated/mcp/card-linked/api.md +2 -0
- package/generated/mcp/card-pattern-01/api.md +2 -0
- package/generated/mcp/checkbox-group/api.md +2 -0
- package/generated/mcp/components.json +2 -1
- package/generated/mcp/concepts/declarative-layout.md +5 -0
- package/generated/mcp/context-menu/api.md +3 -0
- package/generated/mcp/datepicker/api.md +2 -0
- package/generated/mcp/details/api.md +2 -0
- package/generated/mcp/dialog/api.md +2 -0
- package/generated/mcp/div/api.md +2 -0
- package/generated/mcp/divider/api.md +2 -0
- package/generated/mcp/dropdown/api.md +2 -0
- package/generated/mcp/fab/api.md +2 -0
- package/generated/mcp/flex/api.md +2 -0
- package/generated/mcp/form-summary/angular.md +3 -1
- package/generated/mcp/form-summary/api.md +9 -2
- package/generated/mcp/form-summary/react.md +3 -1
- package/generated/mcp/formatted-account/api.md +2 -0
- package/generated/mcp/formatted-date/api.md +2 -0
- package/generated/mcp/formatted-number/api.md +2 -0
- package/generated/mcp/grid/api.md +2 -0
- package/generated/mcp/icon-ai/api.md +2 -0
- package/generated/mcp/icon-airplane-up/api.md +2 -0
- package/generated/mcp/icon-archive/api.md +2 -0
- package/generated/mcp/icon-arrow/api.md +2 -0
- package/generated/mcp/icon-arrow-bottom-top/api.md +2 -0
- package/generated/mcp/icon-arrow-box-left/api.md +2 -0
- package/generated/mcp/icon-arrow-box-left-alt/api.md +2 -0
- package/generated/mcp/icon-arrow-box-right/api.md +2 -0
- package/generated/mcp/icon-arrow-down/api.md +2 -0
- package/generated/mcp/icon-arrow-inbox/api.md +2 -0
- package/generated/mcp/icon-arrow-left/api.md +2 -0
- package/generated/mcp/icon-arrow-left-right/api.md +2 -0
- package/generated/mcp/icon-arrow-out-of-box/api.md +2 -0
- package/generated/mcp/icon-arrow-right/api.md +2 -0
- package/generated/mcp/icon-arrow-right-circle/api.md +2 -0
- package/generated/mcp/icon-arrow-right-down-circle/api.md +2 -0
- package/generated/mcp/icon-arrow-right-up-circle/api.md +2 -0
- package/generated/mcp/icon-arrow-rotate-clockwise/api.md +2 -0
- package/generated/mcp/icon-arrow-rotate-counter-clockwise/api.md +2 -0
- package/generated/mcp/icon-arrow-rotate-left-right/api.md +2 -0
- package/generated/mcp/icon-arrow-rotate-right-left/api.md +2 -0
- package/generated/mcp/icon-arrow-share-left/api.md +2 -0
- package/generated/mcp/icon-arrow-share-right/api.md +2 -0
- package/generated/mcp/icon-arrow-split/api.md +2 -0
- package/generated/mcp/icon-arrow-up/api.md +2 -0
- package/generated/mcp/icon-arrow-wall-down/api.md +2 -0
- package/generated/mcp/icon-arrow-wall-left/api.md +2 -0
- package/generated/mcp/icon-arrow-wall-right/api.md +2 -0
- package/generated/mcp/icon-arrow-wall-up/api.md +2 -0
- package/generated/mcp/icon-asterisk/api.md +2 -0
- package/generated/mcp/icon-at/api.md +2 -0
- package/generated/mcp/icon-back/api.md +2 -0
- package/generated/mcp/icon-backward/api.md +2 -0
- package/generated/mcp/icon-bag/api.md +2 -0
- package/generated/mcp/icon-bank/api.md +2 -0
- package/generated/mcp/icon-banknote/api.md +2 -0
- package/generated/mcp/icon-banknote-2/api.md +2 -0
- package/generated/mcp/icon-barcode/api.md +2 -0
- package/generated/mcp/icon-bars-three/api.md +2 -0
- package/generated/mcp/icon-bars-two/api.md +2 -0
- package/generated/mcp/icon-basket/api.md +2 -0
- package/generated/mcp/icon-battery-loading/api.md +2 -0
- package/generated/mcp/icon-bell/api.md +2 -0
- package/generated/mcp/icon-block/api.md +2 -0
- package/generated/mcp/icon-book/api.md +2 -0
- package/generated/mcp/icon-bookmark/api.md +2 -0
- package/generated/mcp/icon-bookmark-check/api.md +2 -0
- package/generated/mcp/icon-bookmark-delete/api.md +2 -0
- package/generated/mcp/icon-bookmark-plus/api.md +2 -0
- package/generated/mcp/icon-bookmark-remove/api.md +2 -0
- package/generated/mcp/icon-books/api.md +2 -0
- package/generated/mcp/icon-brand-app-store/api.md +2 -0
- package/generated/mcp/icon-brand-apple-music/api.md +2 -0
- package/generated/mcp/icon-brand-bankid/api.md +2 -0
- package/generated/mcp/icon-brand-chrome/api.md +2 -0
- package/generated/mcp/icon-brand-facebook/api.md +2 -0
- package/generated/mcp/icon-brand-figma/api.md +2 -0
- package/generated/mcp/icon-brand-firefox/api.md +2 -0
- package/generated/mcp/icon-brand-github/api.md +2 -0
- package/generated/mcp/icon-brand-green/api.md +2 -0
- package/generated/mcp/icon-brand-instagram/api.md +2 -0
- package/generated/mcp/icon-brand-linkedin/api.md +2 -0
- package/generated/mcp/icon-brand-play-store/api.md +2 -0
- package/generated/mcp/icon-brand-rss-feed/api.md +2 -0
- package/generated/mcp/icon-brand-seb/api.md +2 -0
- package/generated/mcp/icon-brand-spotify/api.md +2 -0
- package/generated/mcp/icon-brand-storybook/api.md +2 -0
- package/generated/mcp/icon-brand-swish-word/api.md +2 -0
- package/generated/mcp/icon-brand-x/api.md +2 -0
- package/generated/mcp/icon-brush/api.md +2 -0
- package/generated/mcp/icon-bubble-annotation/api.md +2 -0
- package/generated/mcp/icon-bubbles/api.md +2 -0
- package/generated/mcp/icon-buildings/api.md +2 -0
- package/generated/mcp/icon-bullet-list/api.md +2 -0
- package/generated/mcp/icon-calculator/api.md +2 -0
- package/generated/mcp/icon-calendar/api.md +2 -0
- package/generated/mcp/icon-calendar-check/api.md +2 -0
- package/generated/mcp/icon-calender-add/api.md +2 -0
- package/generated/mcp/icon-call/api.md +2 -0
- package/generated/mcp/icon-car/api.md +2 -0
- package/generated/mcp/icon-carussel/api.md +2 -0
- package/generated/mcp/icon-chain-link/api.md +2 -0
- package/generated/mcp/icon-chain-link-broken/api.md +2 -0
- package/generated/mcp/icon-chart-two/api.md +2 -0
- package/generated/mcp/icon-checklist/api.md +2 -0
- package/generated/mcp/icon-checkmark/api.md +2 -0
- package/generated/mcp/icon-chevron-bottom/api.md +2 -0
- package/generated/mcp/icon-chevron-double-down/api.md +2 -0
- package/generated/mcp/icon-chevron-double-left/api.md +2 -0
- package/generated/mcp/icon-chevron-double-right/api.md +2 -0
- package/generated/mcp/icon-chevron-double-up/api.md +2 -0
- package/generated/mcp/icon-chevron-down-small/api.md +2 -0
- package/generated/mcp/icon-chevron-grabber-vertical/api.md +2 -0
- package/generated/mcp/icon-chevron-grabber-vertical-reversed/angular.md +15 -0
- package/generated/mcp/icon-chevron-grabber-vertical-reversed/api.md +31 -0
- package/generated/mcp/icon-chevron-grabber-vertical-reversed/index.json +8 -0
- package/generated/mcp/icon-chevron-grabber-vertical-reversed/react.md +15 -0
- package/generated/mcp/icon-chevron-left/api.md +2 -0
- package/generated/mcp/icon-chevron-left-small/api.md +2 -0
- package/generated/mcp/icon-chevron-right/api.md +2 -0
- package/generated/mcp/icon-chevron-right-small/api.md +2 -0
- package/generated/mcp/icon-chevron-top/api.md +2 -0
- package/generated/mcp/icon-chevron-top-small/api.md +2 -0
- package/generated/mcp/icon-circle-ban/api.md +2 -0
- package/generated/mcp/icon-circle-check/api.md +2 -0
- package/generated/mcp/icon-circle-dots/api.md +2 -0
- package/generated/mcp/icon-circle-info/api.md +2 -0
- package/generated/mcp/icon-circle-minus/api.md +2 -0
- package/generated/mcp/icon-circle-placeholder-on/api.md +2 -0
- package/generated/mcp/icon-circle-plus/api.md +2 -0
- package/generated/mcp/icon-circle-questionmark/api.md +2 -0
- package/generated/mcp/icon-circle-x/api.md +2 -0
- package/generated/mcp/icon-circles-three/api.md +2 -0
- package/generated/mcp/icon-clock/api.md +2 -0
- package/generated/mcp/icon-cloud-download/api.md +2 -0
- package/generated/mcp/icon-cloud-upload/api.md +2 -0
- package/generated/mcp/icon-cloudy-sun/api.md +2 -0
- package/generated/mcp/icon-code/api.md +2 -0
- package/generated/mcp/icon-code-brackets/api.md +2 -0
- package/generated/mcp/icon-compass-round/api.md +2 -0
- package/generated/mcp/icon-cookies/api.md +2 -0
- package/generated/mcp/icon-copy/api.md +2 -0
- package/generated/mcp/icon-credit-card/api.md +2 -0
- package/generated/mcp/icon-credit-card-add/api.md +2 -0
- package/generated/mcp/icon-cross-large/api.md +2 -0
- package/generated/mcp/icon-cross-small/api.md +2 -0
- package/generated/mcp/icon-cup-hot/api.md +2 -0
- package/generated/mcp/icon-cursor/api.md +2 -0
- package/generated/mcp/icon-devices/api.md +2 -0
- package/generated/mcp/icon-direction/api.md +2 -0
- package/generated/mcp/icon-dollar/api.md +2 -0
- package/generated/mcp/icon-dot-grid-one-horizontal/api.md +2 -0
- package/generated/mcp/icon-dot-grid-one-vertical/api.md +2 -0
- package/generated/mcp/icon-dot-grid-three/api.md +2 -0
- package/generated/mcp/icon-dot-grid-two/api.md +2 -0
- package/generated/mcp/icon-email/api.md +2 -0
- package/generated/mcp/icon-emoji-angry/api.md +2 -0
- package/generated/mcp/icon-emoji-neutral/api.md +2 -0
- package/generated/mcp/icon-emoji-sad/api.md +2 -0
- package/generated/mcp/icon-emoji-smile/api.md +2 -0
- package/generated/mcp/icon-emoji-smiley/api.md +2 -0
- package/generated/mcp/icon-euro/api.md +2 -0
- package/generated/mcp/icon-expand/api.md +2 -0
- package/generated/mcp/icon-eye-open/api.md +2 -0
- package/generated/mcp/icon-eye-slash/api.md +2 -0
- package/generated/mcp/icon-fashion/api.md +2 -0
- package/generated/mcp/icon-fast-forward/api.md +2 -0
- package/generated/mcp/icon-file-bend/api.md +2 -0
- package/generated/mcp/icon-file-chart/api.md +2 -0
- package/generated/mcp/icon-file-text/api.md +2 -0
- package/generated/mcp/icon-files/api.md +2 -0
- package/generated/mcp/icon-filter/api.md +2 -0
- package/generated/mcp/icon-flag/api.md +2 -0
- package/generated/mcp/icon-floppy-disk/api.md +2 -0
- package/generated/mcp/icon-focus/api.md +2 -0
- package/generated/mcp/icon-folder/api.md +2 -0
- package/generated/mcp/icon-folder-add-right/api.md +2 -0
- package/generated/mcp/icon-fullscreen/api.md +2 -0
- package/generated/mcp/icon-gift/api.md +2 -0
- package/generated/mcp/icon-globus/api.md +2 -0
- package/generated/mcp/icon-graduate-cap/api.md +2 -0
- package/generated/mcp/icon-green-power/api.md +2 -0
- package/generated/mcp/icon-group/api.md +2 -0
- package/generated/mcp/icon-growth/api.md +2 -0
- package/generated/mcp/icon-headphones/api.md +2 -0
- package/generated/mcp/icon-heart/api.md +2 -0
- package/generated/mcp/icon-heart-beat/api.md +2 -0
- package/generated/mcp/icon-history/api.md +2 -0
- package/generated/mcp/icon-home-energy-one/api.md +2 -0
- package/generated/mcp/icon-home-energy-two/api.md +2 -0
- package/generated/mcp/icon-home-open/api.md +2 -0
- package/generated/mcp/icon-home-roof/api.md +2 -0
- package/generated/mcp/icon-horizontal-alignment-bottom/api.md +2 -0
- package/generated/mcp/icon-hourglass/api.md +2 -0
- package/generated/mcp/icon-images/api.md +2 -0
- package/generated/mcp/icon-inbox-empty/api.md +2 -0
- package/generated/mcp/icon-industry/api.md +2 -0
- package/generated/mcp/icon-jpg/api.md +2 -0
- package/generated/mcp/icon-key/api.md +2 -0
- package/generated/mcp/icon-knife-spoon/api.md +2 -0
- package/generated/mcp/icon-lab/api.md +2 -0
- package/generated/mcp/icon-law/api.md +2 -0
- package/generated/mcp/icon-leisure/api.md +2 -0
- package/generated/mcp/icon-light-bulb-simple/api.md +2 -0
- package/generated/mcp/icon-lightning/api.md +2 -0
- package/generated/mcp/icon-line-chart-four/api.md +2 -0
- package/generated/mcp/icon-line-chart-one/api.md +2 -0
- package/generated/mcp/icon-line-chart-three/api.md +2 -0
- package/generated/mcp/icon-line-chart-two/api.md +2 -0
- package/generated/mcp/icon-lock/api.md +2 -0
- package/generated/mcp/icon-macbook-air/api.md +2 -0
- package/generated/mcp/icon-magnifying-glass/api.md +2 -0
- package/generated/mcp/icon-map-pin/api.md +2 -0
- package/generated/mcp/icon-megaphone/api.md +2 -0
- package/generated/mcp/icon-menu-sidebar/api.md +2 -0
- package/generated/mcp/icon-mic-off/api.md +2 -0
- package/generated/mcp/icon-mic-on/api.md +2 -0
- package/generated/mcp/icon-minimize/api.md +2 -0
- package/generated/mcp/icon-minus-large/api.md +2 -0
- package/generated/mcp/icon-minus-small/api.md +2 -0
- package/generated/mcp/icon-money-hand/api.md +2 -0
- package/generated/mcp/icon-moneybag/api.md +2 -0
- package/generated/mcp/icon-moon/api.md +2 -0
- package/generated/mcp/icon-mute/api.md +2 -0
- package/generated/mcp/icon-office/api.md +2 -0
- package/generated/mcp/icon-page-add/api.md +2 -0
- package/generated/mcp/icon-paper-plane-top-right/api.md +2 -0
- package/generated/mcp/icon-paperclip/api.md +2 -0
- package/generated/mcp/icon-pause/api.md +2 -0
- package/generated/mcp/icon-pdf/api.md +2 -0
- package/generated/mcp/icon-pencil-sign/api.md +2 -0
- package/generated/mcp/icon-pencil-sparkle/api.md +2 -0
- package/generated/mcp/icon-pencil-wave/api.md +2 -0
- package/generated/mcp/icon-pension/api.md +2 -0
- package/generated/mcp/icon-people/api.md +2 -0
- package/generated/mcp/icon-people-a11y/api.md +2 -0
- package/generated/mcp/icon-people-add/api.md +2 -0
- package/generated/mcp/icon-people-added/api.md +2 -0
- package/generated/mcp/icon-people-circle/api.md +2 -0
- package/generated/mcp/icon-people-copy/api.md +2 -0
- package/generated/mcp/icon-people-profile/api.md +2 -0
- package/generated/mcp/icon-people-remove/api.md +2 -0
- package/generated/mcp/icon-percent/api.md +2 -0
- package/generated/mcp/icon-phone/api.md +2 -0
- package/generated/mcp/icon-pie-chart/api.md +2 -0
- package/generated/mcp/icon-piggy-bank/api.md +2 -0
- package/generated/mcp/icon-pin/api.md +2 -0
- package/generated/mcp/icon-pinch/api.md +2 -0
- package/generated/mcp/icon-play/api.md +2 -0
- package/generated/mcp/icon-play-circle/api.md +2 -0
- package/generated/mcp/icon-plus-large/api.md +2 -0
- package/generated/mcp/icon-plus-small/api.md +2 -0
- package/generated/mcp/icon-png/api.md +2 -0
- package/generated/mcp/icon-poop/api.md +2 -0
- package/generated/mcp/icon-postcard/api.md +2 -0
- package/generated/mcp/icon-pound/api.md +2 -0
- package/generated/mcp/icon-power/api.md +2 -0
- package/generated/mcp/icon-power-plant/api.md +2 -0
- package/generated/mcp/icon-printer/api.md +2 -0
- package/generated/mcp/icon-push/api.md +2 -0
- package/generated/mcp/icon-qr-code/api.md +2 -0
- package/generated/mcp/icon-rainy/api.md +2 -0
- package/generated/mcp/icon-raising-hand/api.md +2 -0
- package/generated/mcp/icon-reading-list/api.md +2 -0
- package/generated/mcp/icon-receipt-bill/api.md +2 -0
- package/generated/mcp/icon-receiption-bell/api.md +2 -0
- package/generated/mcp/icon-record/api.md +2 -0
- package/generated/mcp/icon-refund/api.md +2 -0
- package/generated/mcp/icon-robot/api.md +2 -0
- package/generated/mcp/icon-rocket/api.md +2 -0
- package/generated/mcp/icon-run-shortcut/api.md +2 -0
- package/generated/mcp/icon-safari/api.md +2 -0
- package/generated/mcp/icon-school/api.md +2 -0
- package/generated/mcp/icon-scissors/api.md +2 -0
- package/generated/mcp/icon-search-menu/api.md +2 -0
- package/generated/mcp/icon-settings-gear/api.md +2 -0
- package/generated/mcp/icon-settings-slider-hor/api.md +2 -0
- package/generated/mcp/icon-settings-slider-ver/api.md +2 -0
- package/generated/mcp/icon-shapes/api.md +2 -0
- package/generated/mcp/icon-share/api.md +2 -0
- package/generated/mcp/icon-shield/api.md +2 -0
- package/generated/mcp/icon-shield-checked/api.md +2 -0
- package/generated/mcp/icon-shield-crossed/api.md +2 -0
- package/generated/mcp/icon-shopping-bag/api.md +2 -0
- package/generated/mcp/icon-signature/api.md +2 -0
- package/generated/mcp/icon-smartwatch/api.md +2 -0
- package/generated/mcp/icon-solar/api.md +2 -0
- package/generated/mcp/icon-sort/api.md +2 -0
- package/generated/mcp/icon-sort-ascending/api.md +2 -0
- package/generated/mcp/icon-sort-descending/api.md +2 -0
- package/generated/mcp/icon-sort-down/api.md +2 -0
- package/generated/mcp/icon-sort-up/api.md +2 -0
- package/generated/mcp/icon-square-arrow-top-right/api.md +2 -0
- package/generated/mcp/icon-square-behind-square/api.md +2 -0
- package/generated/mcp/icon-square-grid-circle/api.md +2 -0
- package/generated/mcp/icon-square-placeholder/api.md +2 -0
- package/generated/mcp/icon-star/api.md +2 -0
- package/generated/mcp/icon-store/api.md +2 -0
- package/generated/mcp/icon-sun/api.md +2 -0
- package/generated/mcp/icon-sunset-arrow-down/api.md +2 -0
- package/generated/mcp/icon-tag/api.md +2 -0
- package/generated/mcp/icon-target-arrow/api.md +2 -0
- package/generated/mcp/icon-television/api.md +2 -0
- package/generated/mcp/icon-tennis/api.md +2 -0
- package/generated/mcp/icon-text-edit/api.md +2 -0
- package/generated/mcp/icon-thermostat/api.md +2 -0
- package/generated/mcp/icon-thumbs-down/api.md +2 -0
- package/generated/mcp/icon-thumbs-up/api.md +2 -0
- package/generated/mcp/icon-ticket/api.md +2 -0
- package/generated/mcp/icon-trading-view-candles/api.md +2 -0
- package/generated/mcp/icon-trash-can/api.md +2 -0
- package/generated/mcp/icon-tree/api.md +2 -0
- package/generated/mcp/icon-trending-five/api.md +2 -0
- package/generated/mcp/icon-trending-four/api.md +2 -0
- package/generated/mcp/icon-trending-one/api.md +2 -0
- package/generated/mcp/icon-trending-three/api.md +2 -0
- package/generated/mcp/icon-trending-two/api.md +2 -0
- package/generated/mcp/icon-triangle-exclamation/api.md +2 -0
- package/generated/mcp/icon-truck/api.md +2 -0
- package/generated/mcp/icon-umbrella-security/api.md +2 -0
- package/generated/mcp/icon-unlocked/api.md +2 -0
- package/generated/mcp/icon-volume-full/api.md +2 -0
- package/generated/mcp/icon-volume-half/api.md +2 -0
- package/generated/mcp/icon-volume-off/api.md +2 -0
- package/generated/mcp/icon-wallet/api.md +2 -0
- package/generated/mcp/icon-warning-sign/api.md +2 -0
- package/generated/mcp/icon-wifi-full/api.md +2 -0
- package/generated/mcp/icon-youtube/api.md +2 -0
- package/generated/mcp/icon-zap/api.md +2 -0
- package/generated/mcp/icon-zoom-in/api.md +2 -0
- package/generated/mcp/icon-zoom-out/api.md +2 -0
- package/generated/mcp/icons.json +13 -1
- package/generated/mcp/img/api.md +2 -0
- package/generated/mcp/index.json +2 -1
- package/generated/mcp/input/api.md +2 -0
- package/generated/mcp/link/api.md +2 -0
- package/generated/mcp/mask/api.md +2 -0
- package/generated/mcp/menu-button/api.md +2 -0
- package/generated/mcp/pagination/api.md +2 -0
- package/generated/mcp/radio-group/api.md +2 -0
- package/generated/mcp/rich-text/api.md +2 -0
- package/generated/mcp/segment/api.md +2 -0
- package/generated/mcp/segmented-control/api.md +2 -0
- package/generated/mcp/select/api.md +2 -0
- package/generated/mcp/sensitive-account/api.md +2 -0
- package/generated/mcp/sensitive-date/api.md +2 -0
- package/generated/mcp/sensitive-number/api.md +2 -0
- package/generated/mcp/spinner/api.md +2 -0
- package/generated/mcp/table/api.md +2 -0
- package/generated/mcp/table/react.md +84 -0
- package/generated/mcp/text/api.md +2 -0
- package/generated/mcp/text/index.json +1 -0
- package/generated/mcp/text/instructions.md +4 -0
- package/generated/mcp/textarea/api.md +2 -0
- package/generated/mcp/tokens.json +1282 -0
- package/generated/mcp/video/api.md +2 -0
- package/generated/react/context-menu/index.d.ts +1 -0
- package/generated/react/icons/icon-chevron-grabber-vertical-reversed/index.d.ts +672 -0
- package/generated/react/icons/icon-chevron-grabber-vertical-reversed/index.js +16 -0
- package/generated/react/index.d.ts +8 -7
- package/generated/react/index.js +8 -7
- package/package.json +2 -1
- package/utils/directives/forward-attributes.js +5 -1
- package/utils/helpers/custom-element-scoping.js +1 -1
|
@@ -10,12 +10,14 @@ import {
|
|
|
10
10
|
loadComponentsIndex,
|
|
11
11
|
loadGlobalIndex,
|
|
12
12
|
loadIconsIndex,
|
|
13
|
+
loadTokensIndex,
|
|
13
14
|
parseResourceUri,
|
|
14
15
|
readMcpFile
|
|
15
16
|
} from "./utils.js";
|
|
16
17
|
import {
|
|
17
18
|
validateGetComponentDocsInput,
|
|
18
19
|
validateGetGuideInput,
|
|
20
|
+
validateGetTokensInput,
|
|
19
21
|
validateListGuidesInput,
|
|
20
22
|
validateSearchComponentsInput
|
|
21
23
|
} from "./validation.js";
|
|
@@ -346,10 +348,118 @@ async function handleResolveUri(uri) {
|
|
|
346
348
|
content: [{ type: "text", text: content }]
|
|
347
349
|
};
|
|
348
350
|
}
|
|
351
|
+
function isColorCategory(data) {
|
|
352
|
+
return "subcategories" in data;
|
|
353
|
+
}
|
|
354
|
+
function stripStyleInfo(cat) {
|
|
355
|
+
const { styleExpressionProperties, styleExpressionUsage, ...rest } = cat;
|
|
356
|
+
return rest;
|
|
357
|
+
}
|
|
358
|
+
function stripColorSubStyleInfo(sub) {
|
|
359
|
+
const { styleExpressionProperties, styleExpressionUsage, ...rest } = sub;
|
|
360
|
+
return rest;
|
|
361
|
+
}
|
|
362
|
+
async function handleGetTokens(input) {
|
|
363
|
+
const validatedInput = validateGetTokensInput(input);
|
|
364
|
+
const {
|
|
365
|
+
category = "all",
|
|
366
|
+
colorSubcategory = "all",
|
|
367
|
+
includeStyleExpressionInfo = true
|
|
368
|
+
} = validatedInput;
|
|
369
|
+
const tokensIndex = await loadTokensIndex();
|
|
370
|
+
if (!tokensIndex) {
|
|
371
|
+
throw new NotFoundError(
|
|
372
|
+
"Tokens data not available. The MCP data may need to be regenerated.",
|
|
373
|
+
"index",
|
|
374
|
+
"tokens"
|
|
375
|
+
);
|
|
376
|
+
}
|
|
377
|
+
let result;
|
|
378
|
+
if (category === "all") {
|
|
379
|
+
const categories = {};
|
|
380
|
+
for (const [key, data] of Object.entries(tokensIndex.categories)) {
|
|
381
|
+
if (isColorCategory(data)) {
|
|
382
|
+
if (colorSubcategory === "all") {
|
|
383
|
+
categories[key] = includeStyleExpressionInfo ? data : {
|
|
384
|
+
description: data.description,
|
|
385
|
+
subcategories: Object.fromEntries(
|
|
386
|
+
Object.entries(data.subcategories).map(([k, v]) => [
|
|
387
|
+
k,
|
|
388
|
+
stripColorSubStyleInfo(v)
|
|
389
|
+
])
|
|
390
|
+
)
|
|
391
|
+
};
|
|
392
|
+
} else {
|
|
393
|
+
const sub = data.subcategories[colorSubcategory];
|
|
394
|
+
if (sub) {
|
|
395
|
+
categories[key] = {
|
|
396
|
+
description: data.description,
|
|
397
|
+
subcategories: {
|
|
398
|
+
[colorSubcategory]: includeStyleExpressionInfo ? sub : stripColorSubStyleInfo(sub)
|
|
399
|
+
}
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
} else {
|
|
404
|
+
categories[key] = includeStyleExpressionInfo ? data : stripStyleInfo(data);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
result = { generatedAt: tokensIndex.generatedAt, categories };
|
|
408
|
+
} else if (category === "color") {
|
|
409
|
+
const colorData = tokensIndex.categories.color;
|
|
410
|
+
if (!colorData || !isColorCategory(colorData)) {
|
|
411
|
+
throw new NotFoundError(
|
|
412
|
+
"Color token data not available",
|
|
413
|
+
"category",
|
|
414
|
+
"color"
|
|
415
|
+
);
|
|
416
|
+
}
|
|
417
|
+
if (colorSubcategory === "all") {
|
|
418
|
+
result = includeStyleExpressionInfo ? colorData : {
|
|
419
|
+
description: colorData.description,
|
|
420
|
+
subcategories: Object.fromEntries(
|
|
421
|
+
Object.entries(colorData.subcategories).map(([k, v]) => [
|
|
422
|
+
k,
|
|
423
|
+
stripColorSubStyleInfo(v)
|
|
424
|
+
])
|
|
425
|
+
)
|
|
426
|
+
};
|
|
427
|
+
} else {
|
|
428
|
+
const sub = colorData.subcategories[colorSubcategory];
|
|
429
|
+
if (!sub) {
|
|
430
|
+
throw new NotFoundError(
|
|
431
|
+
`Color subcategory not found: ${colorSubcategory}`,
|
|
432
|
+
"colorSubcategory",
|
|
433
|
+
colorSubcategory
|
|
434
|
+
);
|
|
435
|
+
}
|
|
436
|
+
result = includeStyleExpressionInfo ? sub : stripColorSubStyleInfo(sub);
|
|
437
|
+
}
|
|
438
|
+
} else {
|
|
439
|
+
const data = tokensIndex.categories[category];
|
|
440
|
+
if (!data) {
|
|
441
|
+
throw new NotFoundError(
|
|
442
|
+
`Token category not found: ${category}`,
|
|
443
|
+
"category",
|
|
444
|
+
category
|
|
445
|
+
);
|
|
446
|
+
}
|
|
447
|
+
result = includeStyleExpressionInfo ? data : stripStyleInfo(data);
|
|
448
|
+
}
|
|
449
|
+
return {
|
|
450
|
+
content: [
|
|
451
|
+
{
|
|
452
|
+
type: "text",
|
|
453
|
+
text: JSON.stringify(result, null, 2)
|
|
454
|
+
}
|
|
455
|
+
]
|
|
456
|
+
};
|
|
457
|
+
}
|
|
349
458
|
export {
|
|
350
459
|
handleGetComponentDocs,
|
|
351
460
|
handleGetGuide,
|
|
352
461
|
handleGetInstructions,
|
|
462
|
+
handleGetTokens,
|
|
353
463
|
handleListGuides,
|
|
354
464
|
handleResolveUri,
|
|
355
465
|
handleSearchComponents
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
loadComponentsIndex,
|
|
11
11
|
loadGlobalIndex,
|
|
12
12
|
loadIconsIndex,
|
|
13
|
+
loadTokensIndex,
|
|
13
14
|
parseResourceUri,
|
|
14
15
|
readMcpFile
|
|
15
16
|
} from "./utils.js";
|
|
@@ -82,6 +83,31 @@ function setupResourceHandlers(server) {
|
|
|
82
83
|
mimeType: "text/markdown"
|
|
83
84
|
});
|
|
84
85
|
}
|
|
86
|
+
if (globalIndex.tokens) {
|
|
87
|
+
const tokenCategories = [
|
|
88
|
+
"space",
|
|
89
|
+
"radius",
|
|
90
|
+
"color",
|
|
91
|
+
"typography",
|
|
92
|
+
"viewport",
|
|
93
|
+
"shadow",
|
|
94
|
+
"motion"
|
|
95
|
+
];
|
|
96
|
+
resources.push({
|
|
97
|
+
uri: "green://tokens",
|
|
98
|
+
name: "Design Tokens (all)",
|
|
99
|
+
description: "All design tokens with values and style expression usage information",
|
|
100
|
+
mimeType: "application/json"
|
|
101
|
+
});
|
|
102
|
+
for (const cat of tokenCategories) {
|
|
103
|
+
resources.push({
|
|
104
|
+
uri: `green://tokens/${cat}`,
|
|
105
|
+
name: `Design Tokens (${cat})`,
|
|
106
|
+
description: `${cat} design tokens with values and style expression usage`,
|
|
107
|
+
mimeType: "application/json"
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
85
111
|
}
|
|
86
112
|
return { resources };
|
|
87
113
|
} catch (error) {
|
|
@@ -111,6 +137,45 @@ function setupResourceHandlers(server) {
|
|
|
111
137
|
]
|
|
112
138
|
};
|
|
113
139
|
}
|
|
140
|
+
if (uri === "green://tokens" || uri.startsWith("green://tokens/")) {
|
|
141
|
+
const tokensIndex = await loadTokensIndex();
|
|
142
|
+
if (!tokensIndex) {
|
|
143
|
+
throw new NotFoundError(
|
|
144
|
+
"Tokens data not available",
|
|
145
|
+
"file",
|
|
146
|
+
PATHS.TOKENS_INDEX
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
if (uri === "green://tokens") {
|
|
150
|
+
return {
|
|
151
|
+
contents: [
|
|
152
|
+
{
|
|
153
|
+
uri,
|
|
154
|
+
mimeType: "application/json",
|
|
155
|
+
text: JSON.stringify(tokensIndex, null, 2)
|
|
156
|
+
}
|
|
157
|
+
]
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
const categoryName = uri.replace("green://tokens/", "");
|
|
161
|
+
const categoryData = tokensIndex.categories[categoryName];
|
|
162
|
+
if (!categoryData) {
|
|
163
|
+
throw new NotFoundError(
|
|
164
|
+
`Token category not found: ${categoryName}`,
|
|
165
|
+
"category",
|
|
166
|
+
categoryName
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
contents: [
|
|
171
|
+
{
|
|
172
|
+
uri,
|
|
173
|
+
mimeType: "application/json",
|
|
174
|
+
text: JSON.stringify(categoryData, null, 2)
|
|
175
|
+
}
|
|
176
|
+
]
|
|
177
|
+
};
|
|
178
|
+
}
|
|
114
179
|
const parsed = parseResourceUri(uri);
|
|
115
180
|
if (!parsed) {
|
|
116
181
|
throw new NotFoundError(`Invalid resource URI format`, "uri", uri);
|
package/bin/mcp-server/tools.js
CHANGED
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
handleGetComponentDocs,
|
|
10
10
|
handleGetGuide,
|
|
11
11
|
handleGetInstructions,
|
|
12
|
+
handleGetTokens,
|
|
12
13
|
handleListGuides,
|
|
13
14
|
handleSearchComponents
|
|
14
15
|
} from "./handlers.js";
|
|
@@ -137,6 +138,42 @@ function setupToolHandlers(server) {
|
|
|
137
138
|
properties: {},
|
|
138
139
|
required: []
|
|
139
140
|
}
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
name: "get_tokens",
|
|
144
|
+
description: 'Get available design tokens (spacing, colors, typography, radius, etc.) with their values and style expression usage. Tokens are the building blocks for styling \u2014 use SHORT token names (e.g. "m", "positive-01", "heading-m") in style expression properties on layout components. The tool explains how each token category maps to component properties. Returns CSS variable names for direct CSS usage.',
|
|
145
|
+
inputSchema: {
|
|
146
|
+
type: "object",
|
|
147
|
+
properties: {
|
|
148
|
+
category: {
|
|
149
|
+
type: "string",
|
|
150
|
+
enum: [
|
|
151
|
+
"space",
|
|
152
|
+
"radius",
|
|
153
|
+
"color",
|
|
154
|
+
"typography",
|
|
155
|
+
"viewport",
|
|
156
|
+
"shadow",
|
|
157
|
+
"motion",
|
|
158
|
+
"all"
|
|
159
|
+
],
|
|
160
|
+
description: "Filter by token category. Default: 'all'. Use 'space' for padding/margin/gap tokens, 'color' for background/content/border colors, 'typography' for font sizes and weights.",
|
|
161
|
+
default: "all"
|
|
162
|
+
},
|
|
163
|
+
colorSubcategory: {
|
|
164
|
+
type: "string",
|
|
165
|
+
enum: ["background", "border", "content", "state", "all"],
|
|
166
|
+
description: "When category is 'color' or 'all', filter to a specific color context. Default: 'all'",
|
|
167
|
+
default: "all"
|
|
168
|
+
},
|
|
169
|
+
includeStyleExpressionInfo: {
|
|
170
|
+
type: "boolean",
|
|
171
|
+
description: "Include information about which style expression properties use these tokens and how short names are inferred. Default: true",
|
|
172
|
+
default: true
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
required: []
|
|
176
|
+
}
|
|
140
177
|
}
|
|
141
178
|
]
|
|
142
179
|
};
|
|
@@ -155,6 +192,8 @@ function setupToolHandlers(server) {
|
|
|
155
192
|
return await handleGetGuide(args);
|
|
156
193
|
case "get_instructions":
|
|
157
194
|
return await handleGetInstructions();
|
|
195
|
+
case "get_tokens":
|
|
196
|
+
return await handleGetTokens(args);
|
|
158
197
|
default:
|
|
159
198
|
throw new Error(`Unknown tool: ${name}`);
|
|
160
199
|
}
|
|
@@ -62,6 +62,7 @@ export interface GlobalIndex {
|
|
|
62
62
|
instructions?: string;
|
|
63
63
|
components: string;
|
|
64
64
|
icons: string;
|
|
65
|
+
tokens?: string;
|
|
65
66
|
guides: GuideEntry[];
|
|
66
67
|
}
|
|
67
68
|
/**
|
|
@@ -114,3 +115,79 @@ export interface ListGuidesInput {
|
|
|
114
115
|
export interface GetGuideInput {
|
|
115
116
|
name: string;
|
|
116
117
|
}
|
|
118
|
+
/**
|
|
119
|
+
* Token category types
|
|
120
|
+
*/
|
|
121
|
+
export type TokenCategory = 'space' | 'radius' | 'color' | 'typography' | 'viewport' | 'shadow' | 'motion' | 'all';
|
|
122
|
+
/**
|
|
123
|
+
* Color subcategory types
|
|
124
|
+
*/
|
|
125
|
+
export type ColorSubcategory = 'background' | 'border' | 'content' | 'state' | 'all';
|
|
126
|
+
/**
|
|
127
|
+
* Token entry from tokens.json
|
|
128
|
+
*/
|
|
129
|
+
export interface TokenEntry {
|
|
130
|
+
name: string;
|
|
131
|
+
cssVariable: string;
|
|
132
|
+
value?: string;
|
|
133
|
+
description?: string;
|
|
134
|
+
pairings?: string[];
|
|
135
|
+
fontSize?: string;
|
|
136
|
+
lineHeight?: string;
|
|
137
|
+
fontWeight?: string;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Typography meta information
|
|
141
|
+
*/
|
|
142
|
+
export interface TypographyMeta {
|
|
143
|
+
[role: string]: {
|
|
144
|
+
tone: string;
|
|
145
|
+
description: string;
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Token category data (non-color)
|
|
150
|
+
*/
|
|
151
|
+
export interface TokenCategoryData {
|
|
152
|
+
description: string;
|
|
153
|
+
cssVariablePrefix: string;
|
|
154
|
+
styleExpressionProperties: string[];
|
|
155
|
+
styleExpressionUsage: string;
|
|
156
|
+
tokens: TokenEntry[];
|
|
157
|
+
meta?: TypographyMeta;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Color subcategory data
|
|
161
|
+
*/
|
|
162
|
+
export interface ColorSubcategoryData {
|
|
163
|
+
description: string;
|
|
164
|
+
cssVariablePrefix: string;
|
|
165
|
+
styleExpressionProperties: string[];
|
|
166
|
+
styleExpressionUsage: string;
|
|
167
|
+
levels?: Record<string, {
|
|
168
|
+
tokens: TokenEntry[];
|
|
169
|
+
}>;
|
|
170
|
+
tokens?: TokenEntry[];
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Color category data
|
|
174
|
+
*/
|
|
175
|
+
export interface ColorCategoryData {
|
|
176
|
+
description: string;
|
|
177
|
+
subcategories: Record<string, ColorSubcategoryData>;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Tokens index structure
|
|
181
|
+
*/
|
|
182
|
+
export interface TokensIndex {
|
|
183
|
+
generatedAt: string;
|
|
184
|
+
categories: Record<string, TokenCategoryData | ColorCategoryData>;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Tool input for get_tokens
|
|
188
|
+
*/
|
|
189
|
+
export interface GetTokensInput {
|
|
190
|
+
category?: TokenCategory;
|
|
191
|
+
colorSubcategory?: ColorSubcategory;
|
|
192
|
+
includeStyleExpressionInfo?: boolean;
|
|
193
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ComponentEntry, ComponentsIndex, GlobalIndex, IconEntry, IconsIndex } from './types.js';
|
|
1
|
+
import type { ComponentEntry, ComponentsIndex, GlobalIndex, IconEntry, IconsIndex, TokensIndex } from './types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Resolve the path to the MCP data directory
|
|
4
4
|
* When compiled: Server is at dist/libs/core/src/bin/mcp-server/
|
|
@@ -26,6 +26,11 @@ export declare function loadIconsIndex(): Promise<IconsIndex | null>;
|
|
|
26
26
|
* @returns Global index or null if failed
|
|
27
27
|
*/
|
|
28
28
|
export declare function loadGlobalIndex(): Promise<GlobalIndex | null>;
|
|
29
|
+
/**
|
|
30
|
+
* Load the tokens index
|
|
31
|
+
* @returns Tokens index or null if failed
|
|
32
|
+
*/
|
|
33
|
+
export declare function loadTokensIndex(): Promise<TokensIndex | null>;
|
|
29
34
|
/**
|
|
30
35
|
* Normalize component name for matching
|
|
31
36
|
* Handles both 'gds-button' and 'button' formats
|
|
@@ -70,12 +75,6 @@ export declare function findIcon(name: string, icons: IconEntry[]): IconEntry |
|
|
|
70
75
|
* readMcpFile('guides/angular.md')
|
|
71
76
|
*/
|
|
72
77
|
export declare function readMcpFile(relativePath: string): Promise<string | null>;
|
|
73
|
-
/**
|
|
74
|
-
* Check if a file exists in the MCP data directory
|
|
75
|
-
* @param relativePath - Path relative to MCP data directory
|
|
76
|
-
* @returns True if file exists, false otherwise
|
|
77
|
-
*/
|
|
78
|
-
export declare function fileExists(relativePath: string): Promise<boolean>;
|
|
79
78
|
/**
|
|
80
79
|
* Build a resource URI for a component/icon documentation file
|
|
81
80
|
* @param category - Resource category
|
package/bin/mcp-server/utils.js
CHANGED
|
@@ -67,6 +67,17 @@ async function loadGlobalIndex() {
|
|
|
67
67
|
return null;
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
+
async function loadTokensIndex() {
|
|
71
|
+
try {
|
|
72
|
+
const dataPath = getMcpDataPath();
|
|
73
|
+
return await loadJsonFile(
|
|
74
|
+
path.join(dataPath, PATHS.TOKENS_INDEX)
|
|
75
|
+
);
|
|
76
|
+
} catch (error) {
|
|
77
|
+
logError(error, "loadTokensIndex");
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
70
81
|
function normalizeComponentName(name) {
|
|
71
82
|
const lower = name.toLowerCase().trim();
|
|
72
83
|
if (lower.startsWith("gds-")) {
|
|
@@ -117,16 +128,6 @@ async function readMcpFile(relativePath) {
|
|
|
117
128
|
return null;
|
|
118
129
|
}
|
|
119
130
|
}
|
|
120
|
-
async function fileExists(relativePath) {
|
|
121
|
-
try {
|
|
122
|
-
const dataPath = getMcpDataPath();
|
|
123
|
-
const fullPath = path.join(dataPath, relativePath);
|
|
124
|
-
await fs.access(fullPath);
|
|
125
|
-
return true;
|
|
126
|
-
} catch {
|
|
127
|
-
return false;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
131
|
function buildResourceUri(category, name, docType) {
|
|
131
132
|
if (docType) {
|
|
132
133
|
return `green://${category}/${name}/${docType}`;
|
|
@@ -142,7 +143,6 @@ function parseResourceUri(uri) {
|
|
|
142
143
|
}
|
|
143
144
|
export {
|
|
144
145
|
buildResourceUri,
|
|
145
|
-
fileExists,
|
|
146
146
|
findComponent,
|
|
147
147
|
findIcon,
|
|
148
148
|
getMcpDataPath,
|
|
@@ -150,6 +150,7 @@ export {
|
|
|
150
150
|
loadComponentsIndex,
|
|
151
151
|
loadGlobalIndex,
|
|
152
152
|
loadIconsIndex,
|
|
153
|
+
loadTokensIndex,
|
|
153
154
|
normalizeComponentName,
|
|
154
155
|
parseResourceUri,
|
|
155
156
|
readMcpFile
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Input validation for MCP server tools
|
|
3
3
|
*/
|
|
4
|
-
import type { Category, Framework, GetComponentDocsInput, GetGuideInput, GuideCategory, ListGuidesInput, SearchComponentsInput } from './types.js';
|
|
4
|
+
import type { Category, Framework, GetComponentDocsInput, GetGuideInput, GetTokensInput, GuideCategory, ListGuidesInput, SearchComponentsInput } from './types.js';
|
|
5
5
|
/**
|
|
6
6
|
* Validate framework parameter
|
|
7
7
|
* @param framework - Framework value to validate
|
|
@@ -89,3 +89,10 @@ export declare function validateListGuidesInput(input: unknown): ListGuidesInput
|
|
|
89
89
|
* @throws ValidationError if validation fails
|
|
90
90
|
*/
|
|
91
91
|
export declare function validateGetGuideInput(input: unknown): GetGuideInput;
|
|
92
|
+
/**
|
|
93
|
+
* Validate GetTokensInput
|
|
94
|
+
* @param input - Input to validate
|
|
95
|
+
* @returns Validated input
|
|
96
|
+
* @throws ValidationError if validation fails
|
|
97
|
+
*/
|
|
98
|
+
export declare function validateGetTokensInput(input: unknown): GetTokensInput;
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import "../../chunks/chunk.CAV4X6PU.js";
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
CATEGORIES,
|
|
4
|
+
COLOR_SUBCATEGORIES,
|
|
5
|
+
FRAMEWORKS,
|
|
6
|
+
GUIDE_CATEGORIES,
|
|
7
|
+
TOKEN_CATEGORIES
|
|
8
|
+
} from "./constants.js";
|
|
3
9
|
import { ValidationError } from "./errors.js";
|
|
4
10
|
function validateEnum(value, allowed, fieldName) {
|
|
5
11
|
if (typeof value !== "string") {
|
|
@@ -185,6 +191,35 @@ function validateGetGuideInput(input) {
|
|
|
185
191
|
name: sanitized
|
|
186
192
|
};
|
|
187
193
|
}
|
|
194
|
+
function validateGetTokensInput(input) {
|
|
195
|
+
if (!input || typeof input !== "object") {
|
|
196
|
+
throw new ValidationError("Invalid input: must be an object", "input");
|
|
197
|
+
}
|
|
198
|
+
const obj = input;
|
|
199
|
+
const result = {};
|
|
200
|
+
if (obj.category !== void 0) {
|
|
201
|
+
result.category = validateEnum(
|
|
202
|
+
obj.category,
|
|
203
|
+
TOKEN_CATEGORIES,
|
|
204
|
+
"category"
|
|
205
|
+
);
|
|
206
|
+
}
|
|
207
|
+
if (obj.colorSubcategory !== void 0) {
|
|
208
|
+
result.colorSubcategory = validateEnum(
|
|
209
|
+
obj.colorSubcategory,
|
|
210
|
+
COLOR_SUBCATEGORIES,
|
|
211
|
+
"colorSubcategory"
|
|
212
|
+
);
|
|
213
|
+
}
|
|
214
|
+
if (obj.includeStyleExpressionInfo !== void 0) {
|
|
215
|
+
result.includeStyleExpressionInfo = validateBoolean(
|
|
216
|
+
obj.includeStyleExpressionInfo,
|
|
217
|
+
"includeStyleExpressionInfo",
|
|
218
|
+
true
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
return result;
|
|
222
|
+
}
|
|
188
223
|
export {
|
|
189
224
|
sanitizeComponentName,
|
|
190
225
|
validateBoolean,
|
|
@@ -192,6 +227,7 @@ export {
|
|
|
192
227
|
validateFramework,
|
|
193
228
|
validateGetComponentDocsInput,
|
|
194
229
|
validateGetGuideInput,
|
|
230
|
+
validateGetTokensInput,
|
|
195
231
|
validateGuideCategory,
|
|
196
232
|
validateListGuidesInput,
|
|
197
233
|
validateNumber,
|
|
@@ -27,6 +27,7 @@ import {
|
|
|
27
27
|
import { GdsFormControlElement } from "../form/form-control.js";
|
|
28
28
|
import ButtonStyles from "./button.styles.js";
|
|
29
29
|
const ariaForwards = ["aria-label", "aria-haspopup", "aria-expanded"];
|
|
30
|
+
const attributeForwards = [...ariaForwards, "gds-tabindex"];
|
|
30
31
|
const html = stripWhitespace(customElementHtml);
|
|
31
32
|
class Button extends GdsFormControlElement {
|
|
32
33
|
constructor() {
|
|
@@ -116,7 +117,7 @@ class Button extends GdsFormControlElement {
|
|
|
116
117
|
@click="${__privateGet(this, _handleClick)}"
|
|
117
118
|
@keydown="${__privateGet(this, _handleKeyDown)}"
|
|
118
119
|
${forwardAttributes(
|
|
119
|
-
(attr) => attr.name.startsWith("gds-aria") || attr.name === "gds-role" ||
|
|
120
|
+
(attr) => attr.name.startsWith("gds-aria") || attr.name === "gds-role" || attributeForwards.includes(attr.name)
|
|
120
121
|
)}
|
|
121
122
|
>
|
|
122
123
|
<slot name="lead"></slot>
|
|
@@ -17,7 +17,7 @@ declare const GdsContextMenu_base: (new (...args: any[]) => import("../../utils/
|
|
|
17
17
|
*/
|
|
18
18
|
export declare class GdsContextMenu extends GdsContextMenu_base {
|
|
19
19
|
#private;
|
|
20
|
-
static styles: import("lit").CSSResult[][];
|
|
20
|
+
static styles: (import("lit").CSSResult | import("lit").CSSResult[])[];
|
|
21
21
|
static shadowRootOptions: ShadowRootInit;
|
|
22
22
|
/**
|
|
23
23
|
* Whether the context menu popover is open.
|
|
@@ -35,6 +35,10 @@ export declare class GdsContextMenu extends GdsContextMenu_base {
|
|
|
35
35
|
* The label for the popover and menu. Should describe the context of the menu.
|
|
36
36
|
*/
|
|
37
37
|
label: string;
|
|
38
|
+
/**
|
|
39
|
+
* Maximum height of the menu list.
|
|
40
|
+
*/
|
|
41
|
+
maxHeight: number;
|
|
38
42
|
/**
|
|
39
43
|
* The placement of the popover relative to the trigger.
|
|
40
44
|
*/
|
|
@@ -5,8 +5,9 @@ import {
|
|
|
5
5
|
__privateMethod,
|
|
6
6
|
__privateSet
|
|
7
7
|
} from "../../chunks/chunk.CAV4X6PU.js";
|
|
8
|
-
var _elTriggerBtn, _setupButton, _handleTriggerSlotChange, _renderPopover, _handleItemClick, handleItemClick_fn;
|
|
8
|
+
var _elTriggerBtn, _setupButton, _handleTriggerSlotChange, _renderPopover, _handleItemClick, handleItemClick_fn, _calcMaxHeight;
|
|
9
9
|
import { localized, msg } from "@lit/localize";
|
|
10
|
+
import { css } from "lit";
|
|
10
11
|
import { property, query } from "lit/decorators.js";
|
|
11
12
|
import { when } from "lit/directives/when.js";
|
|
12
13
|
import { GdsElement } from "../../gds-element.js";
|
|
@@ -41,6 +42,7 @@ let GdsContextMenu = class extends withMarginProps(
|
|
|
41
42
|
this.buttonLabel = msg("Open context menu");
|
|
42
43
|
this.showLabel = false;
|
|
43
44
|
this.label = "";
|
|
45
|
+
this.maxHeight = 500;
|
|
44
46
|
this.placement = "bottom-start";
|
|
45
47
|
__privateAdd(this, _elTriggerBtn, void 0);
|
|
46
48
|
__privateAdd(this, _setupButton, () => {
|
|
@@ -80,9 +82,11 @@ let GdsContextMenu = class extends withMarginProps(
|
|
|
80
82
|
.label=${this.label}
|
|
81
83
|
.placement=${this.placement}
|
|
82
84
|
.popupRole=${"menu"}
|
|
85
|
+
.calcMaxHeight=${__privateGet(this, _calcMaxHeight)}
|
|
83
86
|
@gds-ui-state=${(e) => this.open = e.detail.open}
|
|
84
87
|
>
|
|
85
88
|
<gds-menu
|
|
89
|
+
class="menu"
|
|
86
90
|
aria-label=${this.label ?? this.buttonLabel}
|
|
87
91
|
@gds-menu-item-click=${__privateMethod(this, _handleItemClick, handleItemClick_fn)}
|
|
88
92
|
>
|
|
@@ -90,6 +94,10 @@ let GdsContextMenu = class extends withMarginProps(
|
|
|
90
94
|
</gds-menu>
|
|
91
95
|
</gds-popover>`;
|
|
92
96
|
});
|
|
97
|
+
__privateAdd(this, _calcMaxHeight, () => {
|
|
98
|
+
const height = Math.min(window.innerHeight, this.maxHeight);
|
|
99
|
+
return `${height - 16}px`;
|
|
100
|
+
});
|
|
93
101
|
}
|
|
94
102
|
connectedCallback() {
|
|
95
103
|
super.connectedCallback();
|
|
@@ -134,7 +142,15 @@ _handleItemClick = new WeakSet();
|
|
|
134
142
|
handleItemClick_fn = function() {
|
|
135
143
|
this.open = false;
|
|
136
144
|
};
|
|
137
|
-
|
|
145
|
+
_calcMaxHeight = new WeakMap();
|
|
146
|
+
GdsContextMenu.styles = [
|
|
147
|
+
tokens,
|
|
148
|
+
css`
|
|
149
|
+
.menu {
|
|
150
|
+
overflow: auto;
|
|
151
|
+
}
|
|
152
|
+
`
|
|
153
|
+
];
|
|
138
154
|
GdsContextMenu.shadowRootOptions = {
|
|
139
155
|
mode: "open",
|
|
140
156
|
delegatesFocus: true
|
|
@@ -156,6 +172,9 @@ __decorateClass([
|
|
|
156
172
|
__decorateClass([
|
|
157
173
|
property()
|
|
158
174
|
], GdsContextMenu.prototype, "label", 2);
|
|
175
|
+
__decorateClass([
|
|
176
|
+
property({ type: Number, attribute: "max-height" })
|
|
177
|
+
], GdsContextMenu.prototype, "maxHeight", 2);
|
|
159
178
|
__decorateClass([
|
|
160
179
|
property()
|
|
161
180
|
], GdsContextMenu.prototype, "placement", 2);
|
|
@@ -6,12 +6,14 @@ import { GdsElement } from '../../gds-element';
|
|
|
6
6
|
* When a user attempts to submit a form with errors, this component displays a summary of those errors.
|
|
7
7
|
* Including an error summary greatly assists users in promptly identifying and addressing multiple errors
|
|
8
8
|
* in a consolidated manner. It provides a clear indication of what went wrong and what needs to be corrected.
|
|
9
|
+
*
|
|
10
|
+
* @slot header - Optional slot for customizing the header of the summary.
|
|
9
11
|
*/
|
|
10
12
|
export declare class GdsFormSummary extends GdsElement {
|
|
11
13
|
#private;
|
|
12
14
|
static styles: (import("lit").CSSResult | import("lit").CSSResult[])[];
|
|
13
15
|
/**
|
|
14
|
-
*
|
|
16
|
+
* @deprecated This no longer has any effect, and will be removed in a future release.
|
|
15
17
|
*/
|
|
16
18
|
hideErrors: boolean;
|
|
17
19
|
/**
|
|
@@ -35,7 +37,7 @@ export declare class GdsFormSummary extends GdsElement {
|
|
|
35
37
|
connectedCallback(): void;
|
|
36
38
|
disconnectedCallback(): void;
|
|
37
39
|
/**
|
|
38
|
-
* Refresh the component to
|
|
40
|
+
* Refresh the component to reflect the current state of the form.
|
|
39
41
|
*/
|
|
40
42
|
refresh(): void;
|
|
41
43
|
render(): any;
|