@besaitech/ng-design-system-mcp 0.0.5 → 0.0.6

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/data/docs.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "libraryVersion": "0.0.29",
3
+ "libraryVersion": "0.0.33",
4
4
  "packageName": "@besaitech/ng-design-system",
5
5
  "devImport": "saitech-design-system",
6
- "generatedAt": "2026-08-31T22:12:44.950Z",
6
+ "generatedAt": "2026-09-01T20:18:31.287Z",
7
7
  "componentCount": 30,
8
8
  "components": [
9
9
  {
@@ -415,6 +415,15 @@
415
415
  "alias": null,
416
416
  "jsdoc": null
417
417
  },
418
+ {
419
+ "name": "shape",
420
+ "type": "SdsButtonShape",
421
+ "default": "'control'",
422
+ "required": false,
423
+ "transform": null,
424
+ "alias": null,
425
+ "jsdoc": "`pill` fully rounds the button. It is the shape a consumer-facing surface tends to want for its\nprimary action, and the same axis {@link SdsInput} exposes — a design system with pill inputs and\nno pill buttons would force any app that wants one back onto hand-rolled classes for its single\nmost important control."
426
+ },
418
427
  {
419
428
  "name": "type",
420
429
  "type": "'button' | 'submit' | 'reset'",
@@ -481,6 +490,11 @@
481
490
  "name": "SdsButtonSize",
482
491
  "kind": "union",
483
492
  "body": "'sm' | 'md' | 'lg'"
493
+ },
494
+ {
495
+ "name": "SdsButtonShape",
496
+ "kind": "union",
497
+ "body": "'control' | 'pill'"
484
498
  }
485
499
  ],
486
500
  "projectionSlots": [
@@ -610,6 +624,51 @@
610
624
  "transform": null,
611
625
  "alias": null,
612
626
  "jsdoc": null
627
+ },
628
+ {
629
+ "name": "calendarLabel",
630
+ "type": "string",
631
+ "default": "'Calendrier'",
632
+ "required": false,
633
+ "transform": null,
634
+ "alias": null,
635
+ "jsdoc": "Accessible name for the calendar container. French default so existing consumers are unchanged,\nbut an app serving more than one language MUST translate it."
636
+ },
637
+ {
638
+ "name": "previousLabel",
639
+ "type": "string",
640
+ "default": "'Précédent'",
641
+ "required": false,
642
+ "transform": null,
643
+ "alias": null,
644
+ "jsdoc": "Accessible name for the \"previous\" nav button. It is icon-only, so this string is its ONLY\naccessible name — a hardcoded French one is simply wrong in every other locale. Translate it in\nthe consuming app."
645
+ },
646
+ {
647
+ "name": "nextLabel",
648
+ "type": "string",
649
+ "default": "'Suivant'",
650
+ "required": false,
651
+ "transform": null,
652
+ "alias": null,
653
+ "jsdoc": "Accessible name for the icon-only \"next\" nav button. See {@link previousLabel}."
654
+ },
655
+ {
656
+ "name": "todayActionLabel",
657
+ "type": "string",
658
+ "default": "\"Aujourd'hui\"",
659
+ "required": false,
660
+ "transform": null,
661
+ "alias": null,
662
+ "jsdoc": "Visible text of the \"today\" action (shown when {@link showActions} is true). Translate it in the\nconsuming app — the library ships no i18n of its own."
663
+ },
664
+ {
665
+ "name": "clearActionLabel",
666
+ "type": "string",
667
+ "default": "'Effacer'",
668
+ "required": false,
669
+ "transform": null,
670
+ "alias": null,
671
+ "jsdoc": "Visible text of the \"clear\" action. See {@link todayActionLabel}."
613
672
  }
614
673
  ],
615
674
  "outputs": [
@@ -922,6 +981,87 @@
922
981
  "transform": null,
923
982
  "alias": null,
924
983
  "jsdoc": "Custom display formatter (default dd/MM/yyyy)."
984
+ },
985
+ {
986
+ "name": "clearLabel",
987
+ "type": "string",
988
+ "default": "'Effacer la date'",
989
+ "required": false,
990
+ "transform": null,
991
+ "alias": null,
992
+ "jsdoc": "Accessible name for the clear button. French default so existing consumers are unchanged, but an\napp serving more than one language MUST translate it — it is an icon-only control, so this string\nis its only name."
993
+ },
994
+ {
995
+ "name": "openCalendarLabel",
996
+ "type": "string",
997
+ "default": "'Ouvrir le calendrier'",
998
+ "required": false,
999
+ "transform": null,
1000
+ "alias": null,
1001
+ "jsdoc": "Accessible name for the icon-only calendar toggle while the panel is CLOSED. See\n{@link clearLabel} for why this has to be translatable."
1002
+ },
1003
+ {
1004
+ "name": "closeCalendarLabel",
1005
+ "type": "string",
1006
+ "default": "'Fermer le calendrier'",
1007
+ "required": false,
1008
+ "transform": null,
1009
+ "alias": null,
1010
+ "jsdoc": "Accessible name for the calendar toggle while the panel is OPEN. See {@link openCalendarLabel}."
1011
+ },
1012
+ {
1013
+ "name": "panelLabel",
1014
+ "type": "string",
1015
+ "default": "'Sélection de date'",
1016
+ "required": false,
1017
+ "transform": null,
1018
+ "alias": null,
1019
+ "jsdoc": "Accessible name for the overlay dialog that holds the calendar."
1020
+ },
1021
+ {
1022
+ "name": "calendarLabel",
1023
+ "type": "string",
1024
+ "default": "'Calendrier'",
1025
+ "required": false,
1026
+ "transform": null,
1027
+ "alias": null,
1028
+ "jsdoc": "Labels forwarded to the embedded <sds-calendar>. They live here because the picker is how the\ncalendar is normally reached — without forwarding, a consumer could translate the field but not\nthe panel it opens. Defaults match SdsCalendar's own, so nothing changes for existing consumers."
1029
+ },
1030
+ {
1031
+ "name": "previousLabel",
1032
+ "type": "string",
1033
+ "default": "'Précédent'",
1034
+ "required": false,
1035
+ "transform": null,
1036
+ "alias": null,
1037
+ "jsdoc": null
1038
+ },
1039
+ {
1040
+ "name": "nextLabel",
1041
+ "type": "string",
1042
+ "default": "'Suivant'",
1043
+ "required": false,
1044
+ "transform": null,
1045
+ "alias": null,
1046
+ "jsdoc": null
1047
+ },
1048
+ {
1049
+ "name": "todayActionLabel",
1050
+ "type": "string",
1051
+ "default": "\"Aujourd'hui\"",
1052
+ "required": false,
1053
+ "transform": null,
1054
+ "alias": null,
1055
+ "jsdoc": null
1056
+ },
1057
+ {
1058
+ "name": "clearActionLabel",
1059
+ "type": "string",
1060
+ "default": "'Effacer'",
1061
+ "required": false,
1062
+ "transform": null,
1063
+ "alias": null,
1064
+ "jsdoc": null
925
1065
  }
926
1066
  ],
927
1067
  "outputs": [],
@@ -1845,6 +1985,69 @@
1845
1985
  "alias": null,
1846
1986
  "jsdoc": null
1847
1987
  },
1988
+ {
1989
+ "name": "paginationLabel",
1990
+ "type": "string",
1991
+ "default": "'Pagination'",
1992
+ "required": false,
1993
+ "transform": null,
1994
+ "alias": null,
1995
+ "jsdoc": "Accessible name for the <nav> wrapping the page controls, and for the four icon-only\nfirst/prev/next/last buttons. Those buttons have no text, so these strings are their ONLY\naccessible names — the French defaults keep existing consumers unchanged, but an app serving more\nthan one language MUST pass translated values."
1996
+ },
1997
+ {
1998
+ "name": "firstPageLabel",
1999
+ "type": "string",
2000
+ "default": "'Première page'",
2001
+ "required": false,
2002
+ "transform": null,
2003
+ "alias": null,
2004
+ "jsdoc": null
2005
+ },
2006
+ {
2007
+ "name": "previousPageLabel",
2008
+ "type": "string",
2009
+ "default": "'Page précédente'",
2010
+ "required": false,
2011
+ "transform": null,
2012
+ "alias": null,
2013
+ "jsdoc": null
2014
+ },
2015
+ {
2016
+ "name": "nextPageLabel",
2017
+ "type": "string",
2018
+ "default": "'Page suivante'",
2019
+ "required": false,
2020
+ "transform": null,
2021
+ "alias": null,
2022
+ "jsdoc": null
2023
+ },
2024
+ {
2025
+ "name": "lastPageLabel",
2026
+ "type": "string",
2027
+ "default": "'Dernière page'",
2028
+ "required": false,
2029
+ "transform": null,
2030
+ "alias": null,
2031
+ "jsdoc": null
2032
+ },
2033
+ {
2034
+ "name": "pageLinkLabel",
2035
+ "type": "string",
2036
+ "default": "'Page {page}'",
2037
+ "required": false,
2038
+ "transform": null,
2039
+ "alias": null,
2040
+ "jsdoc": "Accessible name of a numbered page link. `{page}` is replaced with the 1-based page number —\na token rather than a prefix because word order is not the same in every language."
2041
+ },
2042
+ {
2043
+ "name": "jumpToPageAriaLabel",
2044
+ "type": "string",
2045
+ "default": "'Aller à la page'",
2046
+ "required": false,
2047
+ "transform": null,
2048
+ "alias": null,
2049
+ "jsdoc": "Accessible name of the jump-to-page field. Separate from the visible {@link jumpToPageLabel}\n(\"Aller à\") on purpose: the visible text is terse because it sits next to the field, while the\naccessible name has to stand alone."
2050
+ },
1848
2051
  {
1849
2052
  "name": "size",
1850
2053
  "type": "SdsPaginatorSize",
@@ -2076,6 +2279,87 @@
2076
2279
  "transform": null,
2077
2280
  "alias": null,
2078
2281
  "jsdoc": null
2282
+ },
2283
+ {
2284
+ "name": "countryLabel",
2285
+ "type": "string",
2286
+ "default": "'Indicatif pays : {country}'",
2287
+ "required": false,
2288
+ "transform": null,
2289
+ "alias": null,
2290
+ "jsdoc": "Accessible name of the country selector. `{country}` is replaced with the selected country's\nname. A token rather than a prefix because word order differs per language. French default so\nexisting consumers are unchanged; translate it in any app serving more than one language.\n\nNote the interpolated country NAME still comes from the library's built-in country table, which\nis French-only — translating this template fixes the wrapper, not the name inside it."
2291
+ },
2292
+ {
2293
+ "name": "clearLabel",
2294
+ "type": "string",
2295
+ "default": "'Effacer'",
2296
+ "required": false,
2297
+ "transform": null,
2298
+ "alias": null,
2299
+ "jsdoc": "Accessible name for the clear button. It is icon-only, so this string is its ONLY accessible\nname — a hardcoded French one is simply wrong in every other locale."
2300
+ },
2301
+ {
2302
+ "name": "searchLabel",
2303
+ "type": "string",
2304
+ "default": "'Rechercher un pays'",
2305
+ "required": false,
2306
+ "transform": null,
2307
+ "alias": null,
2308
+ "jsdoc": "Accessible name for the country-search field inside the dropdown."
2309
+ },
2310
+ {
2311
+ "name": "searchPlaceholder",
2312
+ "type": "string",
2313
+ "default": "'Rechercher un pays…'",
2314
+ "required": false,
2315
+ "transform": null,
2316
+ "alias": null,
2317
+ "jsdoc": "Placeholder text of the country-search field."
2318
+ },
2319
+ {
2320
+ "name": "noResultsLabel",
2321
+ "type": "string",
2322
+ "default": "'Aucun pays'",
2323
+ "required": false,
2324
+ "transform": null,
2325
+ "alias": null,
2326
+ "jsdoc": "Shown in place of the list when no country matches the filter."
2327
+ },
2328
+ {
2329
+ "name": "incompleteMessage",
2330
+ "type": "string",
2331
+ "default": "'Numéro incomplet — {lengths} chiffres attendus'",
2332
+ "required": false,
2333
+ "transform": null,
2334
+ "alias": null,
2335
+ "jsdoc": "Built-in validation messages. `{lengths}` is replaced with the country's accepted national\nlengths, joined with {@link lengthSeparator}. Siblings of {@link requiredMessage}, which was\nalready translatable — these two were not, so an English or Dutch app showed French errors."
2336
+ },
2337
+ {
2338
+ "name": "invalidMessage",
2339
+ "type": "string",
2340
+ "default": "'Numéro invalide — {lengths} chiffres attendus'",
2341
+ "required": false,
2342
+ "transform": null,
2343
+ "alias": null,
2344
+ "jsdoc": null
2345
+ },
2346
+ {
2347
+ "name": "lengthSeparator",
2348
+ "type": "string",
2349
+ "default": "' ou '",
2350
+ "required": false,
2351
+ "transform": null,
2352
+ "alias": null,
2353
+ "jsdoc": "Joins the accepted lengths when a country allows more than one (e.g. \"8 ou 9\")."
2354
+ },
2355
+ {
2356
+ "name": "exampleHintTemplate",
2357
+ "type": "string",
2358
+ "default": "'Ex. {number}'",
2359
+ "required": false,
2360
+ "transform": null,
2361
+ "alias": null,
2362
+ "jsdoc": "Auto-generated example hint (see {@link showExampleHint}). `{number}` is replaced with the\nformatted international example number."
2079
2363
  }
2080
2364
  ],
2081
2365
  "outputs": [
@@ -112,7 +112,9 @@ export const TokenSchema = z.object({
112
112
  semanticNote: z.string().nullable(),
113
113
  });
114
114
  export const InstallSchema = z.object({
115
- npmrc: z.string(),
115
+ /** Legacy: the private-registry .npmrc block. The package is on public npm, so nothing emits this
116
+ any more. Kept optional rather than removed so an older generated docs.json still validates. */
117
+ npmrc: z.string().optional(),
116
118
  installCommand: z.string(),
117
119
  tailwindImport: z.string(),
118
120
  sourceDirective: z.string(),
package/dist/render.js CHANGED
@@ -59,14 +59,13 @@ export function renderLlmsTxt(index) {
59
59
  const out = [];
60
60
  out.push(`# saitech-design-system (${index.packageName}) v${index.libraryVersion}`);
61
61
  out.push('');
62
- out.push('> Angular 20 standalone component library (StaffKit / Cliniques universitaires Saitech), ' +
63
- 'styled with Tailwind CSS v4. Components are `Sds*` classes with `sds-*` selectors. ' +
64
- 'Generated from source; do not hand-edit.');
62
+ out.push('> Angular standalone component library styled with Tailwind CSS v4. Components are `Sds*` ' +
63
+ 'classes with `sds-*` selectors. Generated from source; do not hand-edit.');
65
64
  out.push('');
66
65
  out.push('## Setup');
67
- out.push(`- Install: \`${index.install.installCommand}\` (private GitLab registry — see .npmrc below)`);
66
+ out.push(`- Install: \`${index.install.installCommand}\` (public npm registry)`);
68
67
  out.push(`- Import: \`import { SdsButton } from '${index.packageName}';\``);
69
- out.push('- Tailwind v4 is required in the consuming app: `@import "tailwindcss";`, the `@source` directive for the package, and the full `@theme` token block — otherwise components render unstyled.');
68
+ out.push('- Tailwind v4 is required in the consuming app: `@import "tailwindcss";`, the `@source` directive for the package, and a brand theme preset (`themes/saitech.css` or `themes/belvigo.css`) imported AFTER it — otherwise components render unstyled.');
70
69
  out.push('');
71
70
  const groups = ['primitive', 'form', 'layout', 'data'];
72
71
  out.push('## Components');
package/dist/server.js CHANGED
@@ -133,7 +133,7 @@ export function buildServer(loaded) {
133
133
  });
134
134
  server.registerTool('sds_get_setup', {
135
135
  title: 'Get saitech-design-system install & Tailwind setup',
136
- description: 'The install + Tailwind v4 setup checklist (registry .npmrc, install command, @import/@source/@theme, peer deps, standalone usage). The #1 source of "components render unstyled" issues.',
136
+ description: 'The install + Tailwind v4 setup checklist (install command, @import/@source, brand theme preset, peer deps, standalone usage). The #1 source of "components render unstyled" issues.',
137
137
  inputSchema: {
138
138
  context: z.enum(['consumer', 'contributor']).optional().describe('Audience (default: consumer).'),
139
139
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@besaitech/ng-design-system-mcp",
3
- "version": "0.0.5",
3
+ "version": "0.0.6",
4
4
  "description": "MCP server that exposes the @besaitech/ng-design-system Angular component library documentation (API, examples, tokens, icons, setup) to AI coding tools.",
5
5
  "type": "module",
6
6
  "bin": {