@sberbusiness/triplex-next-mcp-server 1.46.0-beta → 1.50.0-beta
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/README.md +7 -7
- package/bundle/components/Amount.md +2 -1
- package/bundle/components/AmountField.md +222 -323
- package/bundle/components/Avatar.md +138 -146
- package/bundle/components/Badge.md +2 -1
- package/bundle/components/BodyPage.md +2 -1
- package/bundle/components/Button.md +5 -1
- package/bundle/components/ButtonDropdownExtended.md +3 -1
- package/bundle/components/ButtonIcon.md +3 -1
- package/bundle/components/Calendar.md +3 -1
- package/bundle/components/CardAction.md +1 -0
- package/bundle/components/CardStatic.md +402 -0
- package/bundle/components/CheckboxTree.md +157 -215
- package/bundle/components/CheckboxTreeExtended.md +7 -7
- package/bundle/components/CheckboxXGroup.md +2 -1
- package/bundle/components/Chip.md +2 -1
- package/bundle/components/ChipGroup.md +1 -1
- package/bundle/components/ChipMonthYearPicker.md +6 -5
- package/bundle/components/ChipMultiselect.md +4 -1
- package/bundle/components/ChipOptions.md +2 -1
- package/bundle/components/ChipSort.md +4 -1
- package/bundle/components/ChipSuggest.md +7 -6
- package/bundle/components/CollapsibleTree.md +10 -5
- package/bundle/components/CollapsibleTreeExtended.md +8 -6
- package/bundle/components/ComposedKeyDownListener.md +4 -3
- package/bundle/components/Confirm.md +346 -281
- package/bundle/components/DateField.md +7 -1
- package/bundle/components/DateRange.md +351 -210
- package/bundle/components/Divider.md +85 -138
- package/bundle/components/DocumentNumberEdit.md +173 -214
- package/bundle/components/Dropdown.md +11 -1
- package/bundle/components/Ellipsis.md +131 -147
- package/bundle/components/FooterPage.md +4 -1
- package/bundle/components/FormField.md +13 -5
- package/bundle/components/FormGroup.md +3 -2
- package/bundle/components/Gap.md +1 -1
- package/bundle/components/Header.md +1 -0
- package/bundle/components/HeaderPage.md +3 -1
- package/bundle/components/HelpBox.md +2 -1
- package/bundle/components/IconWrapper.md +10 -6
- package/bundle/components/ImageGallery.md +2 -1
- package/bundle/components/ImageGalleryExtended.md +2 -1
- package/bundle/components/IslandAccordion.md +6 -1
- package/bundle/components/KeyDownListener.md +3 -2
- package/bundle/components/LightBox.md +15 -1
- package/bundle/components/List.md +2 -1
- package/bundle/components/ListActionItem.md +2 -1
- package/bundle/components/ListItem.md +3 -1
- package/bundle/components/ListItemControlsButton.md +2 -1
- package/bundle/components/ListItemSelectable.md +2 -1
- package/bundle/components/ListMaster.md +2 -2
- package/bundle/components/ListMasterFooter.md +2 -1
- package/bundle/components/ListMasterHeader.md +2 -1
- package/bundle/components/ListSortable.md +2 -1
- package/bundle/components/ListSortableItem.md +2 -1
- package/bundle/components/ListTableItem.md +10 -7
- package/bundle/components/LoaderMiddle.md +5 -1
- package/bundle/components/LoaderScreen.md +7 -1
- package/bundle/components/LoaderSmall.md +10 -4
- package/bundle/components/MaskedField.md +3 -1
- package/bundle/components/MediaWidth.md +2 -1
- package/bundle/components/MobileView.md +2 -1
- package/bundle/components/ModalWindow.md +4 -1
- package/bundle/components/MonthYearField.md +19 -5
- package/bundle/components/Notification.md +1 -0
- package/bundle/components/Overlay.md +7 -2
- package/bundle/components/Pagination.md +1 -7
- package/bundle/components/Radio.md +238 -115
- package/bundle/components/RadioXGroup.md +259 -0
- package/bundle/components/RadioYGroup.md +266 -0
- package/bundle/components/SegmentedControl.md +505 -158
- package/bundle/components/SelectExtendedField.md +2 -1
- package/bundle/components/SelectField.md +4 -1
- package/bundle/components/Skeleton.md +140 -69
- package/bundle/components/Slider.md +389 -97
- package/bundle/components/SliderRange.md +486 -105
- package/bundle/components/Spoiler.md +245 -63
- package/bundle/components/StatusTracker.md +386 -94
- package/bundle/components/Step.md +257 -68
- package/bundle/components/Stepper.md +355 -102
- package/bundle/components/StepperExtended.md +633 -0
- package/bundle/components/SuggestField.md +1061 -96
- package/bundle/components/SwipeableArea.md +7 -7
- package/bundle/components/Tabs.md +266 -92
- package/bundle/components/TabsExtended.md +18 -18
- package/bundle/components/TabsLine.md +302 -127
- package/bundle/components/TagColor.md +187 -66
- package/bundle/components/TagGroup.md +184 -48
- package/bundle/components/TextField.md +8 -4
- package/bundle/components/TextareaField.md +279 -70
- package/bundle/components/ThemeProvider.md +2 -1
- package/bundle/components/Tooltip.md +6 -3
- package/bundle/components/TopOverlay.md +17 -1
- package/bundle/components/TreeView.md +16 -7
- package/bundle/components/TriggerClickOnKeyDownEvent.md +277 -0
- package/bundle/components/UploadZone.md +318 -0
- package/bundle/guides/codestyle.md +16 -1
- package/bundle/guides/commits.md +47 -1
- package/bundle/guides/context.md +4 -1
- package/bundle/guides/tests.md +23 -2
- package/bundle/manifest.json +78 -29
- package/bundle/release-notes/1.47.0.mdx +115 -0
- package/bundle/release-notes/1.48.0.mdx +68 -0
- package/bundle/release-notes/1.49.0.mdx +85 -0
- package/bundle/release-notes/1.50.0.mdx +35 -0
- package/bundle/release-notes/1.51.0.mdx +7 -0
- package/bundle/tokens.json +163 -13
- package/dist/index.js +220 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { Meta, Title, Heading } from "@storybook/addon-docs/blocks";
|
|
2
|
+
|
|
3
|
+
<Meta title="release-notes/v1/1.49.0" />
|
|
4
|
+
|
|
5
|
+
<Title>v1.49.0</Title>
|
|
6
|
+
|
|
7
|
+
<Heading>Ломающие изменения</Heading>
|
|
8
|
+
|
|
9
|
+
**Divider**
|
|
10
|
+
|
|
11
|
+
- `IDividerProps` больше не принимает `children`: `<hr>` не может содержать потомков, и раньше такая передача падала в рантайме, теперь её отсекает TypeScript.
|
|
12
|
+
|
|
13
|
+
<Heading>Изменения</Heading>
|
|
14
|
+
|
|
15
|
+
**Button**
|
|
16
|
+
|
|
17
|
+
- Исправлен баг: иконка не перекрашивалась при наведении на кнопку, если курсор не находился ровно над иконкой или текстом (например, над паддингом кнопки).
|
|
18
|
+
|
|
19
|
+
**Calendar**
|
|
20
|
+
|
|
21
|
+
- Исправлена стилизация: скругление ячеек в видах `MONTHS` и `YEARS` в обычном режиме совпадает с адаптивным.
|
|
22
|
+
- Изменён разделитель диапазона лет в заголовке — короткое тире (`–`) без пробелов вместо `" - "`.
|
|
23
|
+
|
|
24
|
+
**CardAction**
|
|
25
|
+
|
|
26
|
+
- Изменены токены `Card.Shadow_Default` и `Card.Shadow_Hover` в тёмной теме — вместо `none` используются `DarkShadow.03` / `DarkShadow.06`.
|
|
27
|
+
|
|
28
|
+
**Design Tokens**
|
|
29
|
+
|
|
30
|
+
- Добавлены группы дизайн-токенов `Shadow` и `DarkShadow` для использования как значения `box-shadow`.
|
|
31
|
+
|
|
32
|
+
**Divider**
|
|
33
|
+
|
|
34
|
+
- Добавлено: `Divider` пробрасывает `ref` на корневой `<hr>`. Тип компонента изменился на `React.ForwardRefExoticComponent`.
|
|
35
|
+
- Проведён AI-рефакторинг.
|
|
36
|
+
|
|
37
|
+
**DocumentNumberEdit**
|
|
38
|
+
|
|
39
|
+
- Добавлено: `DocumentNumberEdit` пробрасывает `ref` на корневой элемент — раньше компонент был объявлен как `React.FC`, поэтому переданный `ref` терялся. Тип компонента изменился на `React.ForwardRefExoticComponent`.
|
|
40
|
+
- Проведён AI-рефакторинг: других изменений для потребителя нет.
|
|
41
|
+
|
|
42
|
+
**Dropdown**
|
|
43
|
+
|
|
44
|
+
- Изменена прозрачность токена `Dropdown.Shadow` в тёмной теме — 0.25 вместо 0.35.
|
|
45
|
+
|
|
46
|
+
**Ellipsis**
|
|
47
|
+
|
|
48
|
+
- Изменено: внутренняя CSS-переменная числа строк переименована с `--ellipsis-line-clamp` в `--triplex-next-runtime-Ellipsis-Root_LineClamp` — она видна в inline-стиле корневого элемента.
|
|
49
|
+
- Исправлено: переданный в `Ellipsis` `style` больше не отменяет `maxLines` — раньше собственные стили потребителя затирали число строк, и текст обрезался по одной строке.
|
|
50
|
+
- Проведён AI-рефакторинг: других изменений для потребителя нет.
|
|
51
|
+
|
|
52
|
+
**FooterPage**
|
|
53
|
+
|
|
54
|
+
- Изменена прозрачность токена `FooterPage.StickyShadow` в светлой (0.15 вместо 0.08) и темной темах (0.5 вместо 0.35).
|
|
55
|
+
|
|
56
|
+
**HeaderPage**
|
|
57
|
+
|
|
58
|
+
- Изменена прозрачность токена `HeaderPage.StickyShadow`в светлой ( 0.15 вместо 0.08) и тёмной темах (0.5 вместо 0.35).
|
|
59
|
+
|
|
60
|
+
**Notification**
|
|
61
|
+
|
|
62
|
+
- Изменена прозрачность токена `Notification.Shadow` в тёмной теме — 0.25 вместо 0.35.
|
|
63
|
+
|
|
64
|
+
**SegmentedControl**
|
|
65
|
+
|
|
66
|
+
- Добавлено: `SegmentedControl.Segment` пробрасывает `ref` на свою `<button>` — раньше компонент был объявлен как `React.FC`, поэтому переданный `ref` терялся. Тип компонента изменился на `React.ForwardRefExoticComponent`.
|
|
67
|
+
- Проведён AI-рефакторинг: других изменений для потребителя нет — публичный API и внешний вид прежние.
|
|
68
|
+
|
|
69
|
+
**Skeleton**
|
|
70
|
+
|
|
71
|
+
- Добавлено: `Skeleton` пробрасывает `ref` на свой корневой `<div>` — раньше компонент был объявлен как `React.FC`, поэтому переданный `ref` терялся. Тип компонента изменился на `React.ForwardRefExoticComponent`.
|
|
72
|
+
- Проведён AI-рефакторинг, добавлен `displayName`: других изменений для потребителя нет.
|
|
73
|
+
|
|
74
|
+
**Spoiler**
|
|
75
|
+
|
|
76
|
+
- Проведён AI-рефакторинг: изменений для потребителя нет — публичный API и внешний вид прежние.
|
|
77
|
+
|
|
78
|
+
**Step**
|
|
79
|
+
|
|
80
|
+
- Добавлено: `Step` пробрасывает `ref` на корневой элемент (кружок шага) — раньше компонент был объявлен как `React.FC`, поэтому переданный `ref` терялся. Тип компонента изменился на `React.ForwardRefExoticComponent`.
|
|
81
|
+
- Проведён AI-рефакторинг: других изменений для потребителя нет.
|
|
82
|
+
|
|
83
|
+
**TextField**
|
|
84
|
+
|
|
85
|
+
- Добавлено: из пакета экспортируется тип `ITextFieldBaseProps` — базовые props текстовых полей. `TextField`, `MaskedField`, `AmountField` и `TextareaField` наследуют его без `children`; так же типизируются props собственной обёртки: `Omit<ITextFieldBaseProps, "children">`. Компонент `TextFieldBase` по-прежнему внутренний.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Meta, Title, Heading } from "@storybook/addon-docs/blocks";
|
|
2
|
+
|
|
3
|
+
<Meta title="release-notes/v1/1.50.0" />
|
|
4
|
+
|
|
5
|
+
<Title>v1.50.0</Title>
|
|
6
|
+
|
|
7
|
+
<Heading>Ломающие изменения</Heading>
|
|
8
|
+
|
|
9
|
+
**SuggestField**
|
|
10
|
+
|
|
11
|
+
- Изменено: выбранное значение сбрасывается только кнопкой очистки — на десктопе и на мобильном одинаково. Раньше при `clearInputOnFocus` значение терялось от простого фокуса без выбора: на десктопе focus → blur, на мобильном открытие → закрытие дропдауна. Теперь потеря фокуса на десктопе и закрытие дропдауна без выбора на мобильном `onSelect(undefined)` не вызывают, даже если поле ввода пустое: в поле возвращается `label` текущего `value`.
|
|
12
|
+
- Изменено: на мобильном кнопка очистки сама сбрасывает значение — вызывает `onSelect(undefined)` и `onFilter("")` (если поле не пустое), затем `onClear`, как на десктопе. Раньше вызывался только `onClear`.
|
|
13
|
+
- Кнопка очистки рендерится, только если передан `onClear`. Без него встроенного способа сбросить значение нет: если поле необязательное, передайте `onClear`.
|
|
14
|
+
|
|
15
|
+
<Heading>Изменения</Heading>
|
|
16
|
+
|
|
17
|
+
**ButtonDropdownExtended**
|
|
18
|
+
|
|
19
|
+
- Добавлены горизонтальные отступы `12px` между соседними `ButtonDropdownExtended`, а также между `ButtonDropdownExtended` и `Button` в обоих порядках.
|
|
20
|
+
|
|
21
|
+
**Radio**
|
|
22
|
+
|
|
23
|
+
- Проведён AI-рефакторинг.
|
|
24
|
+
|
|
25
|
+
**RadioXGroup**
|
|
26
|
+
|
|
27
|
+
- Добавлена поддержка `ref` на корневой контейнер (`HTMLDivElement`).
|
|
28
|
+
|
|
29
|
+
**RadioYGroup**
|
|
30
|
+
|
|
31
|
+
- Добавлено: `RadioYGroup` передаёт `ref` на корневой `<div>`. Тип компонента изменился с `React.FC` на `React.ForwardRefExoticComponent`.
|
|
32
|
+
|
|
33
|
+
**SuggestField**
|
|
34
|
+
|
|
35
|
+
- Исправлен баг: на мобильной ширине терялись `className`, `id`, `data-test-id`, `active` и `renderInput` — `SuggestField` передавал мобильному варианту только часть props. Теперь оба варианта получают одинаковый набор props, в том числе `data-test-id` для e2e.
|
package/bundle/tokens.json
CHANGED
|
@@ -1069,6 +1069,144 @@
|
|
|
1069
1069
|
}
|
|
1070
1070
|
}
|
|
1071
1071
|
},
|
|
1072
|
+
"Shadow": {
|
|
1073
|
+
"kind": "core",
|
|
1074
|
+
"refable": true,
|
|
1075
|
+
"tokens": {
|
|
1076
|
+
"01": {
|
|
1077
|
+
"path": "Shadow.01",
|
|
1078
|
+
"light": {
|
|
1079
|
+
"resolved": "0px 0px 10px rgba(0, 0, 0, 0.1)"
|
|
1080
|
+
},
|
|
1081
|
+
"dark": {
|
|
1082
|
+
"resolved": "0px 0px 10px rgba(0, 0, 0, 0.1)"
|
|
1083
|
+
}
|
|
1084
|
+
},
|
|
1085
|
+
"02": {
|
|
1086
|
+
"path": "Shadow.02",
|
|
1087
|
+
"light": {
|
|
1088
|
+
"resolved": "0px 2px 10px rgba(31, 31, 34, 0.09)"
|
|
1089
|
+
},
|
|
1090
|
+
"dark": {
|
|
1091
|
+
"resolved": "0px 2px 10px rgba(31, 31, 34, 0.09)"
|
|
1092
|
+
}
|
|
1093
|
+
},
|
|
1094
|
+
"03": {
|
|
1095
|
+
"path": "Shadow.03",
|
|
1096
|
+
"light": {
|
|
1097
|
+
"resolved": "0px 2px 12px rgba(31, 31, 34, 0.12)"
|
|
1098
|
+
},
|
|
1099
|
+
"dark": {
|
|
1100
|
+
"resolved": "0px 2px 12px rgba(31, 31, 34, 0.12)"
|
|
1101
|
+
}
|
|
1102
|
+
},
|
|
1103
|
+
"04": {
|
|
1104
|
+
"path": "Shadow.04",
|
|
1105
|
+
"light": {
|
|
1106
|
+
"resolved": "0px 2px 9px rgba(31, 31, 34, 0.15)"
|
|
1107
|
+
},
|
|
1108
|
+
"dark": {
|
|
1109
|
+
"resolved": "0px 2px 9px rgba(31, 31, 34, 0.15)"
|
|
1110
|
+
}
|
|
1111
|
+
},
|
|
1112
|
+
"05": {
|
|
1113
|
+
"path": "Shadow.05",
|
|
1114
|
+
"light": {
|
|
1115
|
+
"resolved": "0px -2px 9px rgba(31, 31, 34, 0.15)"
|
|
1116
|
+
},
|
|
1117
|
+
"dark": {
|
|
1118
|
+
"resolved": "0px -2px 9px rgba(31, 31, 34, 0.15)"
|
|
1119
|
+
}
|
|
1120
|
+
},
|
|
1121
|
+
"06": {
|
|
1122
|
+
"path": "Shadow.06",
|
|
1123
|
+
"light": {
|
|
1124
|
+
"resolved": "0px 4px 12px rgba(31, 31, 34, 0.16)"
|
|
1125
|
+
},
|
|
1126
|
+
"dark": {
|
|
1127
|
+
"resolved": "0px 4px 12px rgba(31, 31, 34, 0.16)"
|
|
1128
|
+
}
|
|
1129
|
+
},
|
|
1130
|
+
"07": {
|
|
1131
|
+
"path": "Shadow.07",
|
|
1132
|
+
"light": {
|
|
1133
|
+
"resolved": "0px 2px 7px rgba(31, 31, 34, 0.25)"
|
|
1134
|
+
},
|
|
1135
|
+
"dark": {
|
|
1136
|
+
"resolved": "0px 2px 7px rgba(31, 31, 34, 0.25)"
|
|
1137
|
+
}
|
|
1138
|
+
}
|
|
1139
|
+
}
|
|
1140
|
+
},
|
|
1141
|
+
"DarkShadow": {
|
|
1142
|
+
"kind": "core",
|
|
1143
|
+
"refable": true,
|
|
1144
|
+
"tokens": {
|
|
1145
|
+
"01": {
|
|
1146
|
+
"path": "DarkShadow.01",
|
|
1147
|
+
"light": {
|
|
1148
|
+
"resolved": "0px 0px 10px rgba(0, 0, 0, 0.1)"
|
|
1149
|
+
},
|
|
1150
|
+
"dark": {
|
|
1151
|
+
"resolved": "0px 0px 10px rgba(0, 0, 0, 0.1)"
|
|
1152
|
+
}
|
|
1153
|
+
},
|
|
1154
|
+
"02": {
|
|
1155
|
+
"path": "DarkShadow.02",
|
|
1156
|
+
"light": {
|
|
1157
|
+
"resolved": "0px 2px 10px rgba(255, 255, 255, 0.04)"
|
|
1158
|
+
},
|
|
1159
|
+
"dark": {
|
|
1160
|
+
"resolved": "0px 2px 10px rgba(255, 255, 255, 0.04)"
|
|
1161
|
+
}
|
|
1162
|
+
},
|
|
1163
|
+
"03": {
|
|
1164
|
+
"path": "DarkShadow.03",
|
|
1165
|
+
"light": {
|
|
1166
|
+
"resolved": "0px 2px 12px rgba(0, 0, 0, 0.12)"
|
|
1167
|
+
},
|
|
1168
|
+
"dark": {
|
|
1169
|
+
"resolved": "0px 2px 12px rgba(0, 0, 0, 0.12)"
|
|
1170
|
+
}
|
|
1171
|
+
},
|
|
1172
|
+
"04": {
|
|
1173
|
+
"path": "DarkShadow.04",
|
|
1174
|
+
"light": {
|
|
1175
|
+
"resolved": "0px 2px 9px rgba(0, 0, 0, 0.5)"
|
|
1176
|
+
},
|
|
1177
|
+
"dark": {
|
|
1178
|
+
"resolved": "0px 2px 9px rgba(0, 0, 0, 0.5)"
|
|
1179
|
+
}
|
|
1180
|
+
},
|
|
1181
|
+
"05": {
|
|
1182
|
+
"path": "DarkShadow.05",
|
|
1183
|
+
"light": {
|
|
1184
|
+
"resolved": "0px -2px 9px rgba(0, 0, 0, 0.5)"
|
|
1185
|
+
},
|
|
1186
|
+
"dark": {
|
|
1187
|
+
"resolved": "0px -2px 9px rgba(0, 0, 0, 0.5)"
|
|
1188
|
+
}
|
|
1189
|
+
},
|
|
1190
|
+
"06": {
|
|
1191
|
+
"path": "DarkShadow.06",
|
|
1192
|
+
"light": {
|
|
1193
|
+
"resolved": "0px 4px 12px rgba(0, 0, 0, 0.16)"
|
|
1194
|
+
},
|
|
1195
|
+
"dark": {
|
|
1196
|
+
"resolved": "0px 4px 12px rgba(0, 0, 0, 0.16)"
|
|
1197
|
+
}
|
|
1198
|
+
},
|
|
1199
|
+
"07": {
|
|
1200
|
+
"path": "DarkShadow.07",
|
|
1201
|
+
"light": {
|
|
1202
|
+
"resolved": "0px 2px 7px rgba(0, 0, 0, 0.25)"
|
|
1203
|
+
},
|
|
1204
|
+
"dark": {
|
|
1205
|
+
"resolved": "0px 2px 7px rgba(0, 0, 0, 0.25)"
|
|
1206
|
+
}
|
|
1207
|
+
}
|
|
1208
|
+
}
|
|
1209
|
+
},
|
|
1072
1210
|
"AlertContext": {
|
|
1073
1211
|
"kind": "component",
|
|
1074
1212
|
"refable": false,
|
|
@@ -2108,10 +2246,12 @@
|
|
|
2108
2246
|
"Shadow_Default": {
|
|
2109
2247
|
"path": "Card.Shadow_Default",
|
|
2110
2248
|
"light": {
|
|
2111
|
-
"
|
|
2249
|
+
"ref": "Shadow.03",
|
|
2250
|
+
"resolved": "0px 2px 12px rgba(31, 31, 34, 0.12)"
|
|
2112
2251
|
},
|
|
2113
2252
|
"dark": {
|
|
2114
|
-
"
|
|
2253
|
+
"ref": "DarkShadow.03",
|
|
2254
|
+
"resolved": "0px 2px 12px rgba(0, 0, 0, 0.12)"
|
|
2115
2255
|
}
|
|
2116
2256
|
},
|
|
2117
2257
|
"Shadow_Focus": {
|
|
@@ -2126,10 +2266,12 @@
|
|
|
2126
2266
|
"Shadow_Hover": {
|
|
2127
2267
|
"path": "Card.Shadow_Hover",
|
|
2128
2268
|
"light": {
|
|
2129
|
-
"
|
|
2269
|
+
"ref": "Shadow.06",
|
|
2270
|
+
"resolved": "0px 4px 12px rgba(31, 31, 34, 0.16)"
|
|
2130
2271
|
},
|
|
2131
2272
|
"dark": {
|
|
2132
|
-
"
|
|
2273
|
+
"ref": "DarkShadow.06",
|
|
2274
|
+
"resolved": "0px 4px 12px rgba(0, 0, 0, 0.16)"
|
|
2133
2275
|
}
|
|
2134
2276
|
},
|
|
2135
2277
|
"Shadow_Selected": {
|
|
@@ -2734,10 +2876,12 @@
|
|
|
2734
2876
|
"Shadow": {
|
|
2735
2877
|
"path": "Dropdown.Shadow",
|
|
2736
2878
|
"light": {
|
|
2879
|
+
"ref": "Shadow.07",
|
|
2737
2880
|
"resolved": "0px 2px 7px rgba(31, 31, 34, 0.25)"
|
|
2738
2881
|
},
|
|
2739
2882
|
"dark": {
|
|
2740
|
-
"
|
|
2883
|
+
"ref": "DarkShadow.07",
|
|
2884
|
+
"resolved": "0px 2px 7px rgba(0, 0, 0, 0.25)"
|
|
2741
2885
|
}
|
|
2742
2886
|
}
|
|
2743
2887
|
}
|
|
@@ -2886,10 +3030,12 @@
|
|
|
2886
3030
|
"StickyShadow": {
|
|
2887
3031
|
"path": "FooterPage.StickyShadow",
|
|
2888
3032
|
"light": {
|
|
2889
|
-
"
|
|
3033
|
+
"ref": "Shadow.05",
|
|
3034
|
+
"resolved": "0px -2px 9px rgba(31, 31, 34, 0.15)"
|
|
2890
3035
|
},
|
|
2891
3036
|
"dark": {
|
|
2892
|
-
"
|
|
3037
|
+
"ref": "DarkShadow.05",
|
|
3038
|
+
"resolved": "0px -2px 9px rgba(0, 0, 0, 0.5)"
|
|
2893
3039
|
}
|
|
2894
3040
|
}
|
|
2895
3041
|
}
|
|
@@ -3119,10 +3265,12 @@
|
|
|
3119
3265
|
"StickyShadow": {
|
|
3120
3266
|
"path": "HeaderPage.StickyShadow",
|
|
3121
3267
|
"light": {
|
|
3122
|
-
"
|
|
3268
|
+
"ref": "Shadow.04",
|
|
3269
|
+
"resolved": "0px 2px 9px rgba(31, 31, 34, 0.15)"
|
|
3123
3270
|
},
|
|
3124
3271
|
"dark": {
|
|
3125
|
-
"
|
|
3272
|
+
"ref": "DarkShadow.04",
|
|
3273
|
+
"resolved": "0px 2px 9px rgba(0, 0, 0, 0.5)"
|
|
3126
3274
|
}
|
|
3127
3275
|
}
|
|
3128
3276
|
}
|
|
@@ -3904,10 +4052,12 @@
|
|
|
3904
4052
|
"Shadow": {
|
|
3905
4053
|
"path": "Notification.Shadow",
|
|
3906
4054
|
"light": {
|
|
4055
|
+
"ref": "Shadow.07",
|
|
3907
4056
|
"resolved": "0px 2px 7px rgba(31, 31, 34, 0.25)"
|
|
3908
4057
|
},
|
|
3909
4058
|
"dark": {
|
|
3910
|
-
"
|
|
4059
|
+
"ref": "DarkShadow.07",
|
|
4060
|
+
"resolved": "0px 2px 7px rgba(0, 0, 0, 0.25)"
|
|
3911
4061
|
}
|
|
3912
4062
|
}
|
|
3913
4063
|
}
|
|
@@ -5312,8 +5462,8 @@
|
|
|
5312
5462
|
"Background_Active": {
|
|
5313
5463
|
"path": "Step.Background_Active",
|
|
5314
5464
|
"light": {
|
|
5315
|
-
"ref": "ColorBrand.
|
|
5316
|
-
"resolved": "#
|
|
5465
|
+
"ref": "ColorBrand.95",
|
|
5466
|
+
"resolved": "#C5FAF1"
|
|
5317
5467
|
},
|
|
5318
5468
|
"dark": {
|
|
5319
5469
|
"ref": "ColorBrand.20",
|
|
@@ -6357,6 +6507,6 @@
|
|
|
6357
6507
|
},
|
|
6358
6508
|
"internal": {
|
|
6359
6509
|
"cssVarPattern": "--triplex-next-{Группа}-{Токен}-{версия}",
|
|
6360
|
-
"versionSuffix": "1-
|
|
6510
|
+
"versionSuffix": "1-50-0"
|
|
6361
6511
|
}
|
|
6362
6512
|
}
|
package/dist/index.js
CHANGED
|
@@ -192,6 +192,215 @@ function loadBundle() {
|
|
|
192
192
|
};
|
|
193
193
|
}
|
|
194
194
|
|
|
195
|
+
// src/tools/component.ts
|
|
196
|
+
var MAX_CHUNK = 2e4;
|
|
197
|
+
var SHORT_EXAMPLE_MAX = 6500;
|
|
198
|
+
var EXAMPLES_SECTION = "\u041F\u0440\u0438\u043C\u0435\u0440\u044B \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F";
|
|
199
|
+
var REFERENCE_SECTIONS = /* @__PURE__ */ new Set([
|
|
200
|
+
"\u0414\u0438\u0437\u0430\u0439\u043D-\u0442\u043E\u043A\u0435\u043D\u044B",
|
|
201
|
+
"\u0421\u0432\u044F\u0437\u0430\u043D\u043D\u044B\u0435 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u044B",
|
|
202
|
+
"Stories",
|
|
203
|
+
"\u0418\u0441\u0442\u043E\u0440\u0438\u044F \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439",
|
|
204
|
+
"\u0424\u0430\u0439\u043B\u043E\u0432\u0430\u044F \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0430",
|
|
205
|
+
"\u041A\u043B\u044E\u0447\u0435\u0432\u044B\u0435 \u043E\u0441\u043E\u0431\u0435\u043D\u043D\u043E\u0441\u0442\u0438 \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u0438",
|
|
206
|
+
EXAMPLES_SECTION
|
|
207
|
+
]);
|
|
208
|
+
var SUBSECTION_HEADING_RE = /^###\s+(.+?)\s*$/;
|
|
209
|
+
var FENCE_RE = /^\s*```/;
|
|
210
|
+
var TRAILING_RULE_RE = /\n+-{3,}\s*$/;
|
|
211
|
+
function paginate(text, offset) {
|
|
212
|
+
if (text.length - offset <= MAX_CHUNK) {
|
|
213
|
+
return { body: text.slice(offset), next: null };
|
|
214
|
+
}
|
|
215
|
+
const hardEnd = offset + MAX_CHUNK;
|
|
216
|
+
const newline = text.lastIndexOf("\n", hardEnd - 1);
|
|
217
|
+
const end = newline > offset + MAX_CHUNK / 2 ? newline + 1 : hardEnd;
|
|
218
|
+
return { body: text.slice(offset, end), next: end };
|
|
219
|
+
}
|
|
220
|
+
function extractSubsections(text) {
|
|
221
|
+
const result = {};
|
|
222
|
+
let current = null;
|
|
223
|
+
let buffer = [];
|
|
224
|
+
let inFence = false;
|
|
225
|
+
const flush = () => {
|
|
226
|
+
if (current !== null) {
|
|
227
|
+
result[current] = buffer.join("\n").trim();
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
for (const line of text.split("\n")) {
|
|
231
|
+
if (FENCE_RE.test(line)) {
|
|
232
|
+
inFence = !inFence;
|
|
233
|
+
}
|
|
234
|
+
const match = inFence ? null : SUBSECTION_HEADING_RE.exec(line);
|
|
235
|
+
if (match) {
|
|
236
|
+
flush();
|
|
237
|
+
current = match[1];
|
|
238
|
+
buffer = [];
|
|
239
|
+
} else if (current !== null) {
|
|
240
|
+
buffer.push(line);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
flush();
|
|
244
|
+
return result;
|
|
245
|
+
}
|
|
246
|
+
function sectionText(text) {
|
|
247
|
+
return text.replace(TRAILING_RULE_RE, "").trim();
|
|
248
|
+
}
|
|
249
|
+
function findKey(record, wanted) {
|
|
250
|
+
const needle = wanted.trim().toLowerCase();
|
|
251
|
+
return Object.keys(record).find((key) => key.toLowerCase() === needle);
|
|
252
|
+
}
|
|
253
|
+
function quoteList(names) {
|
|
254
|
+
return names.map((name) => JSON.stringify(name)).join(", ");
|
|
255
|
+
}
|
|
256
|
+
function callHint(name, args) {
|
|
257
|
+
return `get_component ${JSON.stringify({ name, ...args })}`;
|
|
258
|
+
}
|
|
259
|
+
function metaLine(component) {
|
|
260
|
+
const parts = [];
|
|
261
|
+
if (component.category) {
|
|
262
|
+
parts.push(`\u041A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u044F: ${component.category}`);
|
|
263
|
+
}
|
|
264
|
+
if (component.related.length > 0) {
|
|
265
|
+
parts.push(`\u0421\u0432\u044F\u0437\u0430\u043D\u043D\u044B\u0435: ${component.related.join(", ")}`);
|
|
266
|
+
}
|
|
267
|
+
if (component.figma.file || component.figma.node) {
|
|
268
|
+
parts.push(`Figma: ${[component.figma.file, component.figma.node].filter(Boolean).join(", ")}`);
|
|
269
|
+
}
|
|
270
|
+
if (component.tokens.length > 0) {
|
|
271
|
+
parts.push(
|
|
272
|
+
`\u0422\u043E\u043A\u0435\u043D\u044B (${component.tokens.length}): get_tokens ${JSON.stringify({ component: component.name })}`
|
|
273
|
+
);
|
|
274
|
+
}
|
|
275
|
+
return parts.length > 0 ? parts.join(" \xB7 ") : null;
|
|
276
|
+
}
|
|
277
|
+
function pickShortExample(examples) {
|
|
278
|
+
const fitting = Object.keys(examples).filter((key) => examples[key].length <= SHORT_EXAMPLE_MAX);
|
|
279
|
+
if (fitting.length === 0) {
|
|
280
|
+
return null;
|
|
281
|
+
}
|
|
282
|
+
const byDefault = fitting.find((key) => key.toLowerCase() === "default");
|
|
283
|
+
if (byDefault) {
|
|
284
|
+
return byDefault;
|
|
285
|
+
}
|
|
286
|
+
return fitting.reduce((best, key) => examples[key].length < examples[best].length ? key : best);
|
|
287
|
+
}
|
|
288
|
+
function buildCompact(component) {
|
|
289
|
+
const { sections } = component;
|
|
290
|
+
const parts = [`# ${component.name}`];
|
|
291
|
+
const meta = metaLine(component);
|
|
292
|
+
if (meta) {
|
|
293
|
+
parts.push(meta);
|
|
294
|
+
}
|
|
295
|
+
for (const [title, text] of Object.entries(sections)) {
|
|
296
|
+
if (!REFERENCE_SECTIONS.has(title)) {
|
|
297
|
+
parts.push(`## ${title}
|
|
298
|
+
|
|
299
|
+
${sectionText(text)}`);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
const examples = extractSubsections(sections[EXAMPLES_SECTION] ?? "");
|
|
303
|
+
const shown = pickShortExample(examples);
|
|
304
|
+
if (shown) {
|
|
305
|
+
parts.push(`## \u041F\u0440\u0438\u043C\u0435\u0440: ${shown}
|
|
306
|
+
|
|
307
|
+
${examples[shown]}`);
|
|
308
|
+
}
|
|
309
|
+
const moreSections = Object.keys(sections).filter((title) => REFERENCE_SECTIONS.has(title) && title !== EXAMPLES_SECTION).map((title) => `${JSON.stringify(title)} ${sectionText(sections[title]).length}`);
|
|
310
|
+
const moreExamples = Object.keys(examples).filter((title) => title !== shown).map((title) => `${JSON.stringify(title)} ${examples[title].length}`);
|
|
311
|
+
const more = [
|
|
312
|
+
"## \u0415\u0449\u0451\n",
|
|
313
|
+
"\u042D\u0442\u043E \u043A\u043E\u043C\u043F\u0430\u043A\u0442\u043D\u044B\u0439 \u043E\u0442\u0432\u0435\u0442. \u041E\u0441\u0442\u0430\u043B\u044C\u043D\u043E\u0435 \u2014 \u0442\u0435\u043C \u0436\u0435 get_component, \u043E\u0434\u043D\u0438\u043C \u0438\u0437 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432 (\u0440\u0430\u0437\u043C\u0435\u0440 \u0432 \u0441\u0438\u043C\u0432\u043E\u043B\u0430\u0445):"
|
|
314
|
+
];
|
|
315
|
+
if (moreSections.length > 0) {
|
|
316
|
+
more.push(`- section: ${moreSections.join(", ")}`);
|
|
317
|
+
}
|
|
318
|
+
if (moreExamples.length > 0) {
|
|
319
|
+
more.push(`- example: ${moreExamples.join(", ")}`);
|
|
320
|
+
}
|
|
321
|
+
more.push(`- full: true \u2014 \u0432\u0435\u0441\u044C AI.md, ${(component.markdown ?? "").length}`);
|
|
322
|
+
parts.push(more.join("\n"));
|
|
323
|
+
return parts.join("\n\n");
|
|
324
|
+
}
|
|
325
|
+
function buildFallback(component) {
|
|
326
|
+
const stories = component.stories ? ` Stories: \`${component.stories}\`.` : "";
|
|
327
|
+
return `# ${component.name}
|
|
328
|
+
|
|
329
|
+
AI-\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\u0446\u0438\u0438 \u0443 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 \u043D\u0435\u0442 (ai_ready: false).${stories}`;
|
|
330
|
+
}
|
|
331
|
+
function selectPiece(component, query) {
|
|
332
|
+
const { sections } = component;
|
|
333
|
+
if (query.section !== void 0) {
|
|
334
|
+
const key = findKey(sections, query.section);
|
|
335
|
+
if (key === void 0) {
|
|
336
|
+
return {
|
|
337
|
+
ok: false,
|
|
338
|
+
text: `\u0421\u0435\u043A\u0446\u0438\u0438 ${JSON.stringify(query.section)} \u0443 ${component.name} \u043D\u0435\u0442. \u0415\u0441\u0442\u044C: ${quoteList(Object.keys(sections))}.`
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
return { ok: true, text: `## ${key}
|
|
342
|
+
|
|
343
|
+
${sectionText(sections[key])}`, args: { section: key } };
|
|
344
|
+
}
|
|
345
|
+
if (query.example !== void 0) {
|
|
346
|
+
const examples = extractSubsections(sections[EXAMPLES_SECTION] ?? "");
|
|
347
|
+
const key = findKey(examples, query.example);
|
|
348
|
+
if (key === void 0) {
|
|
349
|
+
const names = Object.keys(examples);
|
|
350
|
+
return {
|
|
351
|
+
ok: false,
|
|
352
|
+
text: names.length > 0 ? `\u041F\u0440\u0438\u043C\u0435\u0440\u0430 ${JSON.stringify(query.example)} \u0443 ${component.name} \u043D\u0435\u0442. \u0415\u0441\u0442\u044C: ${quoteList(names)}.` : `\u0423 ${component.name} \u043D\u0435\u0442 \u0441\u0435\u043A\u0446\u0438\u0438 \xAB${EXAMPLES_SECTION}\xBB.`
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
return { ok: true, text: `### ${key}
|
|
356
|
+
|
|
357
|
+
${examples[key]}`, args: { example: key } };
|
|
358
|
+
}
|
|
359
|
+
if (query.full) {
|
|
360
|
+
const meta = metaLine(component);
|
|
361
|
+
const body = component.markdown ?? "";
|
|
362
|
+
return { ok: true, text: meta ? `${meta}
|
|
363
|
+
|
|
364
|
+
${body}` : body, args: { full: true } };
|
|
365
|
+
}
|
|
366
|
+
return { ok: true, text: buildCompact(component), args: {} };
|
|
367
|
+
}
|
|
368
|
+
function buildComponentResponse(component, query = {}) {
|
|
369
|
+
const selectors = [query.section !== void 0, query.example !== void 0, query.full === true];
|
|
370
|
+
if (selectors.filter(Boolean).length > 1) {
|
|
371
|
+
return { ok: false, text: "\u0423\u043A\u0430\u0436\u0438 \u043D\u0435 \u0431\u043E\u043B\u044C\u0448\u0435 \u043E\u0434\u043D\u043E\u0433\u043E \u0438\u0437 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432: section, example, full." };
|
|
372
|
+
}
|
|
373
|
+
if (!component.ai_ready) {
|
|
374
|
+
return { ok: true, text: buildFallback(component) };
|
|
375
|
+
}
|
|
376
|
+
const piece = selectPiece(component, query);
|
|
377
|
+
if (!piece.ok) {
|
|
378
|
+
return piece;
|
|
379
|
+
}
|
|
380
|
+
const offset = query.offset ?? 0;
|
|
381
|
+
if (offset > 0 && offset >= piece.text.length) {
|
|
382
|
+
return {
|
|
383
|
+
ok: false,
|
|
384
|
+
text: `offset ${offset} \u0437\u0430 \u043A\u043E\u043D\u0446\u043E\u043C \u043E\u0442\u0432\u0435\u0442\u0430: \u0432 \u043D\u0451\u043C ${piece.text.length} \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432.`
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
const chunk = paginate(piece.text, offset);
|
|
388
|
+
const end = offset + chunk.body.length;
|
|
389
|
+
const lines = [];
|
|
390
|
+
if (offset > 0) {
|
|
391
|
+
lines.push(`\u2014 \u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0435\u043D\u0438\u0435: \u0441\u0438\u043C\u0432\u043E\u043B\u044B ${offset}\u2013${end} \u0438\u0437 ${piece.text.length} \u2014
|
|
392
|
+
`);
|
|
393
|
+
}
|
|
394
|
+
lines.push(chunk.body);
|
|
395
|
+
if (chunk.next !== null) {
|
|
396
|
+
lines.push(
|
|
397
|
+
`
|
|
398
|
+
\u2014 \u041F\u043E\u043A\u0430\u0437\u0430\u043D\u044B \u0441\u0438\u043C\u0432\u043E\u043B\u044B ${offset}\u2013${end} \u0438\u0437 ${piece.text.length}. \u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0435\u043D\u0438\u0435: ${callHint(component.name, { ...piece.args, offset: chunk.next })} \u2014`
|
|
399
|
+
);
|
|
400
|
+
}
|
|
401
|
+
return { ok: true, text: lines.join("\n") };
|
|
402
|
+
}
|
|
403
|
+
|
|
195
404
|
// src/tools/guidelines.ts
|
|
196
405
|
var GUIDELINES_TOPIC = "guidelines";
|
|
197
406
|
function buildGuidelinesResponse(bundle) {
|
|
@@ -362,9 +571,15 @@ function registerTools(server) {
|
|
|
362
571
|
);
|
|
363
572
|
server.tool(
|
|
364
573
|
"get_component",
|
|
365
|
-
"\
|
|
366
|
-
{
|
|
367
|
-
|
|
574
|
+
"\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\u0446\u0438\u044F \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430. \u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u2014 \u043A\u043E\u043C\u043F\u0430\u043A\u0442\u043D\u0430\u044F: \u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435, props, \u0438\u043D\u0432\u0430\u0440\u0438\u0430\u043D\u0442\u044B, accessibility, \u043E\u0434\u0438\u043D \u043A\u043E\u0440\u043E\u0442\u043A\u0438\u0439 \u043F\u0440\u0438\u043C\u0435\u0440 \u0438 \u043E\u0433\u043B\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u043E\u0441\u0442\u0430\u043B\u044C\u043D\u043E\u0433\u043E \u0441 \u0440\u0430\u0437\u043C\u0435\u0440\u0430\u043C\u0438. \u0421\u043F\u0440\u0430\u0432\u043E\u0447\u043D\u0443\u044E \u0441\u0435\u043A\u0446\u0438\u044E, \u0434\u0440\u0443\u0433\u043E\u0439 \u043F\u0440\u0438\u043C\u0435\u0440 \u0438\u043B\u0438 \u0432\u0435\u0441\u044C AI.md \u2014 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u043C section, example \u0438\u043B\u0438 full; \u0434\u043B\u0438\u043D\u043D\u044B\u0439 \u043E\u0442\u0432\u0435\u0442 \u043F\u0440\u0438\u0445\u043E\u0434\u0438\u0442 \u043F\u043E\u0440\u0446\u0438\u044F\u043C\u0438 \u0441 \u043F\u043E\u0434\u0441\u043A\u0430\u0437\u043A\u043E\u0439 offset.",
|
|
575
|
+
{
|
|
576
|
+
name: z.string().describe("\u0418\u043C\u044F \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440 'Button'"),
|
|
577
|
+
section: z.string().optional().describe("\u041E\u0434\u043D\u0430 \u0441\u0435\u043A\u0446\u0438\u044F AI.md \u0446\u0435\u043B\u0438\u043A\u043E\u043C, \u043D\u0430\u043F\u0440. '\u0414\u0438\u0437\u0430\u0439\u043D-\u0442\u043E\u043A\u0435\u043D\u044B' (\u0441\u043F\u0438\u0441\u043E\u043A \u2014 \u0432 \u043E\u0433\u043B\u0430\u0432\u043B\u0435\u043D\u0438\u0438)."),
|
|
578
|
+
example: z.string().optional().describe("\u041E\u0434\u0438\u043D \u043F\u0440\u0438\u043C\u0435\u0440 \u0438\u0437 \xAB\u041F\u0440\u0438\u043C\u0435\u0440\u044B \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F\xBB \u043F\u043E \u0438\u043C\u0435\u043D\u0438, \u043D\u0430\u043F\u0440. 'States'."),
|
|
579
|
+
full: z.boolean().optional().describe("\u0412\u0435\u0441\u044C AI.md \u043E\u0434\u043D\u0438\u043C \u0442\u0435\u043A\u0441\u0442\u043E\u043C, \u043F\u043E\u0440\u0446\u0438\u044F\u043C\u0438."),
|
|
580
|
+
offset: z.number().int().nonnegative().optional().describe("\u0421\u043C\u0435\u0449\u0435\u043D\u0438\u0435 \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0435\u043D\u0438\u044F \u0434\u043B\u0438\u043D\u043D\u043E\u0433\u043E \u043E\u0442\u0432\u0435\u0442\u0430 \u2014 \u0438\u0437 \u043F\u043E\u0434\u0441\u043A\u0430\u0437\u043A\u0438 \u0432 \u043A\u043E\u043D\u0446\u0435 \u043F\u043E\u0440\u0446\u0438\u0438.")
|
|
581
|
+
},
|
|
582
|
+
async ({ name, section, example, full, offset }) => {
|
|
368
583
|
const component = bundle.components.find((c) => c.name.toLowerCase() === name.toLowerCase());
|
|
369
584
|
if (!component) {
|
|
370
585
|
return {
|
|
@@ -377,9 +592,8 @@ function registerTools(server) {
|
|
|
377
592
|
isError: true
|
|
378
593
|
};
|
|
379
594
|
}
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
};
|
|
595
|
+
const result = buildComponentResponse(component, { section, example, full, offset });
|
|
596
|
+
return result.ok ? { content: [{ type: "text", text: result.text }] } : { content: [{ type: "text", text: result.text }], isError: true };
|
|
383
597
|
}
|
|
384
598
|
);
|
|
385
599
|
server.tool(
|