@besaitech/ng-design-system-mcp 0.0.10 → 0.0.12
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 +637 -4
- package/package.json +1 -1
package/data/docs.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"libraryVersion": "0.0.
|
|
3
|
+
"libraryVersion": "0.0.42",
|
|
4
4
|
"packageName": "@besaitech/ng-design-system",
|
|
5
5
|
"devImport": "saitech-design-system",
|
|
6
|
-
"generatedAt": "2026-09-
|
|
7
|
-
"componentCount":
|
|
6
|
+
"generatedAt": "2026-09-19T16:33:04.483Z",
|
|
7
|
+
"componentCount": 34,
|
|
8
8
|
"components": [
|
|
9
9
|
{
|
|
10
10
|
"className": "SdsAccordion",
|
|
@@ -1576,6 +1576,578 @@
|
|
|
1576
1576
|
}
|
|
1577
1577
|
]
|
|
1578
1578
|
},
|
|
1579
|
+
{
|
|
1580
|
+
"className": "SdsInputNumber",
|
|
1581
|
+
"selector": "sds-input-number",
|
|
1582
|
+
"kind": "component",
|
|
1583
|
+
"group": "form",
|
|
1584
|
+
"importName": "SdsInputNumber",
|
|
1585
|
+
"description": "Champ numérique avec formatage localisé, devise, préfixe/suffixe, bornes min/max/pas et boutons d'incrément. La valeur est un number | null via ControlValueAccessor. Le formatage est appliqué en direct pendant la saisie : symbole monétaire, séparateurs de milliers et affixes restent visibles, et le curseur est préservé.",
|
|
1586
|
+
"overviewDescription": "Saisie numérique : devise, préfixe/suffixe, bornes et incrémenteur.",
|
|
1587
|
+
"jsdoc": "Numeric input with locale-aware formatting, optional currency, prefix/suffix affixes, min/max/step\nboundaries and spinner buttons — the design-system counterpart of PrimeNG's `InputNumber`.\n\nThe value is a `number | null` bound through ControlValueAccessor, so it works with reactive forms\nor `[(ngModel)]`: `<sds-input-number [(ngModel)]=\"amount\" mode=\"currency\" currency=\"EUR\" />`.\n\nThe field formats **live as you type**: the currency symbol, grouping separators and prefix/suffix\nstay visible on every keystroke, and the caret is kept where it belongs. The value is clamped to\n{@link min}/{@link max} on blur and on every spinner step; ArrowUp / ArrowDown also step it.",
|
|
1588
|
+
"example": null,
|
|
1589
|
+
"cva": true,
|
|
1590
|
+
"usesNgModel": true,
|
|
1591
|
+
"inputs": [
|
|
1592
|
+
{
|
|
1593
|
+
"name": "label",
|
|
1594
|
+
"type": "string",
|
|
1595
|
+
"default": "''",
|
|
1596
|
+
"required": false,
|
|
1597
|
+
"transform": null,
|
|
1598
|
+
"alias": null,
|
|
1599
|
+
"jsdoc": null
|
|
1600
|
+
},
|
|
1601
|
+
{
|
|
1602
|
+
"name": "ariaLabel",
|
|
1603
|
+
"type": "string",
|
|
1604
|
+
"default": "''",
|
|
1605
|
+
"required": false,
|
|
1606
|
+
"transform": null,
|
|
1607
|
+
"alias": null,
|
|
1608
|
+
"jsdoc": "Accessible name used when no visible [label] is provided."
|
|
1609
|
+
},
|
|
1610
|
+
{
|
|
1611
|
+
"name": "placeholder",
|
|
1612
|
+
"type": "string",
|
|
1613
|
+
"default": "''",
|
|
1614
|
+
"required": false,
|
|
1615
|
+
"transform": null,
|
|
1616
|
+
"alias": null,
|
|
1617
|
+
"jsdoc": null
|
|
1618
|
+
},
|
|
1619
|
+
{
|
|
1620
|
+
"name": "hint",
|
|
1621
|
+
"type": "string",
|
|
1622
|
+
"default": "''",
|
|
1623
|
+
"required": false,
|
|
1624
|
+
"transform": null,
|
|
1625
|
+
"alias": null,
|
|
1626
|
+
"jsdoc": null
|
|
1627
|
+
},
|
|
1628
|
+
{
|
|
1629
|
+
"name": "error",
|
|
1630
|
+
"type": "string",
|
|
1631
|
+
"default": "''",
|
|
1632
|
+
"required": false,
|
|
1633
|
+
"transform": null,
|
|
1634
|
+
"alias": null,
|
|
1635
|
+
"jsdoc": null
|
|
1636
|
+
},
|
|
1637
|
+
{
|
|
1638
|
+
"name": "size",
|
|
1639
|
+
"type": "SdsInputNumberSize",
|
|
1640
|
+
"default": "'md'",
|
|
1641
|
+
"required": false,
|
|
1642
|
+
"transform": null,
|
|
1643
|
+
"alias": null,
|
|
1644
|
+
"jsdoc": null
|
|
1645
|
+
},
|
|
1646
|
+
{
|
|
1647
|
+
"name": "appearance",
|
|
1648
|
+
"type": "SdsInputNumberAppearance",
|
|
1649
|
+
"default": "'default'",
|
|
1650
|
+
"required": false,
|
|
1651
|
+
"transform": null,
|
|
1652
|
+
"alias": null,
|
|
1653
|
+
"jsdoc": "`filled` is a borderless field on a muted ground; `default` is the bordered white field."
|
|
1654
|
+
},
|
|
1655
|
+
{
|
|
1656
|
+
"name": "disabled",
|
|
1657
|
+
"type": "boolean",
|
|
1658
|
+
"default": "false",
|
|
1659
|
+
"required": false,
|
|
1660
|
+
"transform": "booleanAttribute",
|
|
1661
|
+
"alias": null,
|
|
1662
|
+
"jsdoc": null
|
|
1663
|
+
},
|
|
1664
|
+
{
|
|
1665
|
+
"name": "readonly",
|
|
1666
|
+
"type": "boolean",
|
|
1667
|
+
"default": "false",
|
|
1668
|
+
"required": false,
|
|
1669
|
+
"transform": "booleanAttribute",
|
|
1670
|
+
"alias": null,
|
|
1671
|
+
"jsdoc": "Read-only: the value is shown and selectable but cannot be typed or stepped."
|
|
1672
|
+
},
|
|
1673
|
+
{
|
|
1674
|
+
"name": "mode",
|
|
1675
|
+
"type": "SdsInputNumberMode",
|
|
1676
|
+
"default": "'decimal'",
|
|
1677
|
+
"required": false,
|
|
1678
|
+
"transform": null,
|
|
1679
|
+
"alias": null,
|
|
1680
|
+
"jsdoc": null
|
|
1681
|
+
},
|
|
1682
|
+
{
|
|
1683
|
+
"name": "locale",
|
|
1684
|
+
"type": "string",
|
|
1685
|
+
"default": "''",
|
|
1686
|
+
"required": false,
|
|
1687
|
+
"transform": null,
|
|
1688
|
+
"alias": null,
|
|
1689
|
+
"jsdoc": "BCP 47 locale for grouping/decimal symbols (e.g. `fr-FR`). Empty follows the runtime locale."
|
|
1690
|
+
},
|
|
1691
|
+
{
|
|
1692
|
+
"name": "currency",
|
|
1693
|
+
"type": "string",
|
|
1694
|
+
"default": "''",
|
|
1695
|
+
"required": false,
|
|
1696
|
+
"transform": null,
|
|
1697
|
+
"alias": null,
|
|
1698
|
+
"jsdoc": "ISO 4217 code, required when {@link mode} is `currency` (e.g. `EUR`, `USD`)."
|
|
1699
|
+
},
|
|
1700
|
+
{
|
|
1701
|
+
"name": "currencyDisplay",
|
|
1702
|
+
"type": "SdsInputNumberCurrencyDisplay",
|
|
1703
|
+
"default": "'symbol'",
|
|
1704
|
+
"required": false,
|
|
1705
|
+
"transform": null,
|
|
1706
|
+
"alias": null,
|
|
1707
|
+
"jsdoc": null
|
|
1708
|
+
},
|
|
1709
|
+
{
|
|
1710
|
+
"name": "useGrouping",
|
|
1711
|
+
"type": "boolean",
|
|
1712
|
+
"default": "true",
|
|
1713
|
+
"required": false,
|
|
1714
|
+
"transform": "booleanAttribute",
|
|
1715
|
+
"alias": null,
|
|
1716
|
+
"jsdoc": "Thousands/grouping separators."
|
|
1717
|
+
},
|
|
1718
|
+
{
|
|
1719
|
+
"name": "minFractionDigits",
|
|
1720
|
+
"type": "number | null",
|
|
1721
|
+
"default": "null",
|
|
1722
|
+
"required": false,
|
|
1723
|
+
"transform": null,
|
|
1724
|
+
"alias": null,
|
|
1725
|
+
"jsdoc": null
|
|
1726
|
+
},
|
|
1727
|
+
{
|
|
1728
|
+
"name": "maxFractionDigits",
|
|
1729
|
+
"type": "number | null",
|
|
1730
|
+
"default": "null",
|
|
1731
|
+
"required": false,
|
|
1732
|
+
"transform": null,
|
|
1733
|
+
"alias": null,
|
|
1734
|
+
"jsdoc": null
|
|
1735
|
+
},
|
|
1736
|
+
{
|
|
1737
|
+
"name": "prefix",
|
|
1738
|
+
"type": "string",
|
|
1739
|
+
"default": "''",
|
|
1740
|
+
"required": false,
|
|
1741
|
+
"transform": null,
|
|
1742
|
+
"alias": null,
|
|
1743
|
+
"jsdoc": "Text shown before the value (e.g. `↑ `)."
|
|
1744
|
+
},
|
|
1745
|
+
{
|
|
1746
|
+
"name": "suffix",
|
|
1747
|
+
"type": "string",
|
|
1748
|
+
"default": "''",
|
|
1749
|
+
"required": false,
|
|
1750
|
+
"transform": null,
|
|
1751
|
+
"alias": null,
|
|
1752
|
+
"jsdoc": "Text shown after the value (e.g. ` kg`, `%`)."
|
|
1753
|
+
},
|
|
1754
|
+
{
|
|
1755
|
+
"name": "min",
|
|
1756
|
+
"type": "number | null",
|
|
1757
|
+
"default": "null",
|
|
1758
|
+
"required": false,
|
|
1759
|
+
"transform": null,
|
|
1760
|
+
"alias": null,
|
|
1761
|
+
"jsdoc": null
|
|
1762
|
+
},
|
|
1763
|
+
{
|
|
1764
|
+
"name": "max",
|
|
1765
|
+
"type": "number | null",
|
|
1766
|
+
"default": "null",
|
|
1767
|
+
"required": false,
|
|
1768
|
+
"transform": null,
|
|
1769
|
+
"alias": null,
|
|
1770
|
+
"jsdoc": null
|
|
1771
|
+
},
|
|
1772
|
+
{
|
|
1773
|
+
"name": "step",
|
|
1774
|
+
"type": "number",
|
|
1775
|
+
"default": "1",
|
|
1776
|
+
"required": false,
|
|
1777
|
+
"transform": "numberAttribute",
|
|
1778
|
+
"alias": null,
|
|
1779
|
+
"jsdoc": null
|
|
1780
|
+
},
|
|
1781
|
+
{
|
|
1782
|
+
"name": "showButtons",
|
|
1783
|
+
"type": "boolean",
|
|
1784
|
+
"default": "false",
|
|
1785
|
+
"required": false,
|
|
1786
|
+
"transform": "booleanAttribute",
|
|
1787
|
+
"alias": null,
|
|
1788
|
+
"jsdoc": "Show the increment/decrement spinner buttons."
|
|
1789
|
+
},
|
|
1790
|
+
{
|
|
1791
|
+
"name": "buttonLayout",
|
|
1792
|
+
"type": "SdsInputNumberButtonLayout",
|
|
1793
|
+
"default": "'stacked'",
|
|
1794
|
+
"required": false,
|
|
1795
|
+
"transform": null,
|
|
1796
|
+
"alias": null,
|
|
1797
|
+
"jsdoc": null
|
|
1798
|
+
},
|
|
1799
|
+
{
|
|
1800
|
+
"name": "incrementIcon",
|
|
1801
|
+
"type": "SdsIconName | null",
|
|
1802
|
+
"default": "null",
|
|
1803
|
+
"required": false,
|
|
1804
|
+
"transform": null,
|
|
1805
|
+
"alias": null,
|
|
1806
|
+
"jsdoc": "Override the increment button icon (defaults: chevron-up when stacked, plus otherwise)."
|
|
1807
|
+
},
|
|
1808
|
+
{
|
|
1809
|
+
"name": "decrementIcon",
|
|
1810
|
+
"type": "SdsIconName | null",
|
|
1811
|
+
"default": "null",
|
|
1812
|
+
"required": false,
|
|
1813
|
+
"transform": null,
|
|
1814
|
+
"alias": null,
|
|
1815
|
+
"jsdoc": "Override the decrement button icon (defaults: chevron-down when stacked, minus otherwise)."
|
|
1816
|
+
},
|
|
1817
|
+
{
|
|
1818
|
+
"name": "allowEmpty",
|
|
1819
|
+
"type": "boolean",
|
|
1820
|
+
"default": "true",
|
|
1821
|
+
"required": false,
|
|
1822
|
+
"transform": "booleanAttribute",
|
|
1823
|
+
"alias": null,
|
|
1824
|
+
"jsdoc": "Allow an empty (null) value. When false, blurring an empty field falls back to {@link min} or 0."
|
|
1825
|
+
},
|
|
1826
|
+
{
|
|
1827
|
+
"name": "clearable",
|
|
1828
|
+
"type": "boolean",
|
|
1829
|
+
"default": "false",
|
|
1830
|
+
"required": false,
|
|
1831
|
+
"transform": "booleanAttribute",
|
|
1832
|
+
"alias": null,
|
|
1833
|
+
"jsdoc": null
|
|
1834
|
+
},
|
|
1835
|
+
{
|
|
1836
|
+
"name": "clearLabel",
|
|
1837
|
+
"type": "string",
|
|
1838
|
+
"default": "'Effacer'",
|
|
1839
|
+
"required": false,
|
|
1840
|
+
"transform": null,
|
|
1841
|
+
"alias": null,
|
|
1842
|
+
"jsdoc": "Accessible names for the icon-only controls. French defaults so existing consumers are unchanged;\ntranslate them in a multi-language app."
|
|
1843
|
+
},
|
|
1844
|
+
{
|
|
1845
|
+
"name": "incrementLabel",
|
|
1846
|
+
"type": "string",
|
|
1847
|
+
"default": "'Augmenter'",
|
|
1848
|
+
"required": false,
|
|
1849
|
+
"transform": null,
|
|
1850
|
+
"alias": null,
|
|
1851
|
+
"jsdoc": null
|
|
1852
|
+
},
|
|
1853
|
+
{
|
|
1854
|
+
"name": "decrementLabel",
|
|
1855
|
+
"type": "string",
|
|
1856
|
+
"default": "'Diminuer'",
|
|
1857
|
+
"required": false,
|
|
1858
|
+
"transform": null,
|
|
1859
|
+
"alias": null,
|
|
1860
|
+
"jsdoc": null
|
|
1861
|
+
}
|
|
1862
|
+
],
|
|
1863
|
+
"outputs": [],
|
|
1864
|
+
"exportedTypes": [
|
|
1865
|
+
{
|
|
1866
|
+
"name": "SdsInputNumberSize",
|
|
1867
|
+
"kind": "union",
|
|
1868
|
+
"body": "'sm' | 'md' | 'lg'"
|
|
1869
|
+
},
|
|
1870
|
+
{
|
|
1871
|
+
"name": "SdsInputNumberAppearance",
|
|
1872
|
+
"kind": "union",
|
|
1873
|
+
"body": "'default' | 'filled'"
|
|
1874
|
+
},
|
|
1875
|
+
{
|
|
1876
|
+
"name": "SdsInputNumberMode",
|
|
1877
|
+
"kind": "union",
|
|
1878
|
+
"body": "'decimal' | 'currency'"
|
|
1879
|
+
},
|
|
1880
|
+
{
|
|
1881
|
+
"name": "SdsInputNumberCurrencyDisplay",
|
|
1882
|
+
"kind": "union",
|
|
1883
|
+
"body": "'symbol' | 'code' | 'name'"
|
|
1884
|
+
},
|
|
1885
|
+
{
|
|
1886
|
+
"name": "SdsInputNumberButtonLayout",
|
|
1887
|
+
"kind": "union",
|
|
1888
|
+
"body": "'stacked' | 'horizontal' | 'vertical'"
|
|
1889
|
+
}
|
|
1890
|
+
],
|
|
1891
|
+
"projectionSlots": [],
|
|
1892
|
+
"hostBindings": {
|
|
1893
|
+
"class": "block"
|
|
1894
|
+
},
|
|
1895
|
+
"examples": [
|
|
1896
|
+
{
|
|
1897
|
+
"sectionTitle": "Basique",
|
|
1898
|
+
"sectionDescription": "Regroupement des milliers selon la locale ; la valeur émise reste un nombre simple.",
|
|
1899
|
+
"code": "<sds-input-number label=\"Lits disponibles\" [(ngModel)]=\"beds\" />\n\n// beds = 42723; → affiché « 42 723 »",
|
|
1900
|
+
"runnableExample": "<sds-input-number label=\"Lits disponibles\" [(ngModel)]=\"beds\" />",
|
|
1901
|
+
"stack": true,
|
|
1902
|
+
"dark": false
|
|
1903
|
+
},
|
|
1904
|
+
{
|
|
1905
|
+
"sectionTitle": "Devise",
|
|
1906
|
+
"sectionDescription": "mode='currency' avec un code ISO 4217 ; currencyDisplay choisit le symbole, le code ou le nom.",
|
|
1907
|
+
"code": "<sds-input-number\n label=\"Budget mensuel\"\n mode=\"currency\"\n currency=\"EUR\"\n locale=\"fr-FR\"\n [(ngModel)]=\"budget\"\n/>\n<sds-input-number\n label=\"Facturation (US)\"\n mode=\"currency\"\n currency=\"USD\"\n currencyDisplay=\"code\"\n locale=\"en-US\"\n [(ngModel)]=\"invoice\"\n/>",
|
|
1908
|
+
"runnableExample": "<sds-input-number\n label=\"Budget mensuel\"\n mode=\"currency\"\n currency=\"EUR\"\n locale=\"fr-FR\"\n [(ngModel)]=\"budget\"\n />\n <sds-input-number\n label=\"Facturation (US)\"\n mode=\"currency\"\n currency=\"USD\"\n currencyDisplay=\"code\"\n locale=\"en-US\"\n [(ngModel)]=\"invoice\"\n />",
|
|
1909
|
+
"stack": true,
|
|
1910
|
+
"dark": false
|
|
1911
|
+
},
|
|
1912
|
+
{
|
|
1913
|
+
"sectionTitle": "Préfixe & suffixe",
|
|
1914
|
+
"sectionDescription": "Des affixes texte pour les pourcentages, unités ou libellés — sur un nombre simple.",
|
|
1915
|
+
"code": "<sds-input-number label=\"Taux d'occupation\" suffix=\" %\" [min]=\"0\" [max]=\"100\" [(ngModel)]=\"occupancy\" />\n<sds-input-number label=\"Poids du patient\" suffix=\" kg\" [minFractionDigits]=\"1\" [(ngModel)]=\"weight\" />\n<sds-input-number label=\"Température\" prefix=\"↑ \" suffix=\" ℃\" [(ngModel)]=\"temperature\" />",
|
|
1916
|
+
"runnableExample": "<sds-input-number label=\"Taux d'occupation\" suffix=\" %\" [min]=\"0\" [max]=\"100\" [(ngModel)]=\"occupancy\" />\n <sds-input-number label=\"Poids du patient\" suffix=\" kg\" [minFractionDigits]=\"1\" [(ngModel)]=\"weight\" />\n <sds-input-number label=\"Température\" prefix=\"↑ \" suffix=\" ℃\" [(ngModel)]=\"temperature\" />",
|
|
1917
|
+
"stack": true,
|
|
1918
|
+
"dark": false
|
|
1919
|
+
},
|
|
1920
|
+
{
|
|
1921
|
+
"sectionTitle": "Bornes & pas",
|
|
1922
|
+
"sectionDescription": "min, max et step encadrent la valeur ; le dépassement est corrigé à la validation et à chaque incrément.",
|
|
1923
|
+
"code": "<sds-input-number\n label=\"Dose (0–10, pas 0,5)\"\n [min]=\"0\"\n [max]=\"10\"\n [step]=\"0.5\"\n showButtons\n [(ngModel)]=\"dose\"\n/>",
|
|
1924
|
+
"runnableExample": "<sds-input-number\n label=\"Dose (0–10, pas 0,5)\"\n [min]=\"0\"\n [max]=\"10\"\n [step]=\"0.5\"\n showButtons\n [(ngModel)]=\"dose\"\n />",
|
|
1925
|
+
"stack": true,
|
|
1926
|
+
"dark": false
|
|
1927
|
+
},
|
|
1928
|
+
{
|
|
1929
|
+
"sectionTitle": "Boutons",
|
|
1930
|
+
"sectionDescription": "showButtons ajoute un incrémenteur ; buttonLayout le dispose en pile, à l'horizontale ou à la verticale.",
|
|
1931
|
+
"code": "<sds-input-number label=\"Empilé\" showButtons [(ngModel)]=\"qty\" />\n<sds-input-number label=\"Horizontal\" showButtons buttonLayout=\"horizontal\" [(ngModel)]=\"qty\" />\n<sds-input-number label=\"Vertical\" showButtons buttonLayout=\"vertical\" [(ngModel)]=\"qty\" />",
|
|
1932
|
+
"runnableExample": "<sds-input-number label=\"Empilé\" showButtons [(ngModel)]=\"qtyStacked\" />\n <sds-input-number label=\"Horizontal\" showButtons buttonLayout=\"horizontal\" [(ngModel)]=\"qtyHorizontal\" />\n <sds-input-number label=\"Vertical\" showButtons buttonLayout=\"vertical\" [(ngModel)]=\"qtyVertical\" />",
|
|
1933
|
+
"stack": false,
|
|
1934
|
+
"dark": false
|
|
1935
|
+
},
|
|
1936
|
+
{
|
|
1937
|
+
"sectionTitle": "Décimales & groupement",
|
|
1938
|
+
"sectionDescription": "minFractionDigits / maxFractionDigits contrôlent la précision ; useGrouping='false' retire les séparateurs.",
|
|
1939
|
+
"code": "<sds-input-number\n label=\"Résultat de laboratoire\"\n [minFractionDigits]=\"2\"\n [maxFractionDigits]=\"4\"\n [(ngModel)]=\"labResult\"\n/>\n<sds-input-number label=\"Référence dossier\" [useGrouping]=\"false\" [(ngModel)]=\"reference\" />",
|
|
1940
|
+
"runnableExample": "<sds-input-number\n label=\"Résultat de laboratoire\"\n [minFractionDigits]=\"2\"\n [maxFractionDigits]=\"4\"\n [(ngModel)]=\"labResult\"\n />\n <sds-input-number label=\"Référence dossier\" [useGrouping]=\"false\" [(ngModel)]=\"reference\" />",
|
|
1941
|
+
"stack": true,
|
|
1942
|
+
"dark": false
|
|
1943
|
+
},
|
|
1944
|
+
{
|
|
1945
|
+
"sectionTitle": "Effaçable",
|
|
1946
|
+
"sectionDescription": "clearable affiche un bouton d'effacement quand une valeur est saisie.",
|
|
1947
|
+
"code": "<sds-input-number\n label=\"Plafond de dépense\"\n mode=\"currency\"\n currency=\"EUR\"\n locale=\"fr-FR\"\n clearable\n [(ngModel)]=\"cap\"\n/>",
|
|
1948
|
+
"runnableExample": "<sds-input-number label=\"Plafond de dépense\" mode=\"currency\" currency=\"EUR\" locale=\"fr-FR\" clearable [(ngModel)]=\"cap\" />",
|
|
1949
|
+
"stack": true,
|
|
1950
|
+
"dark": false
|
|
1951
|
+
},
|
|
1952
|
+
{
|
|
1953
|
+
"sectionTitle": "Tailles",
|
|
1954
|
+
"sectionDescription": null,
|
|
1955
|
+
"code": "<sds-input-number size=\"sm\" label=\"Petit (sm)\" [(ngModel)]=\"value\" />\n<sds-input-number size=\"md\" label=\"Moyen (md)\" [(ngModel)]=\"value\" />\n<sds-input-number size=\"lg\" label=\"Grand (lg)\" [(ngModel)]=\"value\" />",
|
|
1956
|
+
"runnableExample": "<sds-input-number size=\"sm\" label=\"Petit (sm)\" [(ngModel)]=\"sizeSm\" />\n <sds-input-number size=\"md\" label=\"Moyen (md)\" [(ngModel)]=\"sizeMd\" />\n <sds-input-number size=\"lg\" label=\"Grand (lg)\" [(ngModel)]=\"sizeLg\" />",
|
|
1957
|
+
"stack": true,
|
|
1958
|
+
"dark": false
|
|
1959
|
+
},
|
|
1960
|
+
{
|
|
1961
|
+
"sectionTitle": "Rempli & erreur",
|
|
1962
|
+
"sectionDescription": null,
|
|
1963
|
+
"code": "<sds-input-number appearance=\"filled\" label=\"Rempli\" [(ngModel)]=\"value\" />\n<sds-input-number label=\"Nombre requis\" [error]=\"'Veuillez saisir un nombre.'\" [(ngModel)]=\"value\" />",
|
|
1964
|
+
"runnableExample": "<sds-input-number appearance=\"filled\" label=\"Rempli\" [(ngModel)]=\"filled\" />\n <sds-input-number label=\"Nombre requis\" [error]=\"'Veuillez saisir un nombre.'\" [(ngModel)]=\"required\" />",
|
|
1965
|
+
"stack": true,
|
|
1966
|
+
"dark": false
|
|
1967
|
+
},
|
|
1968
|
+
{
|
|
1969
|
+
"sectionTitle": "Désactivé",
|
|
1970
|
+
"sectionDescription": null,
|
|
1971
|
+
"code": "<sds-input-number label=\"Capacité verrouillée\" [ngModel]=\"120\" disabled />",
|
|
1972
|
+
"runnableExample": "<sds-input-number label=\"Capacité verrouillée\" [ngModel]=\"120\" disabled />",
|
|
1973
|
+
"stack": true,
|
|
1974
|
+
"dark": false
|
|
1975
|
+
}
|
|
1976
|
+
]
|
|
1977
|
+
},
|
|
1978
|
+
{
|
|
1979
|
+
"className": "SdsLocalizedInput",
|
|
1980
|
+
"selector": "sds-localized-input",
|
|
1981
|
+
"kind": "component",
|
|
1982
|
+
"group": "primitive",
|
|
1983
|
+
"importName": "SdsLocalizedInput",
|
|
1984
|
+
"description": "Un seul champ pour saisir un texte traduit (titre, libellé, description) dans plusieurs langues. Un sélecteur compact bascule la traduction éditée ; une pastille marque les langues déjà renseignées. Le champ s'ouvre sur currentLanguage (sinon la première langue). Implémente ControlValueAccessor sur la map { langue: texte }.",
|
|
1985
|
+
"overviewDescription": null,
|
|
1986
|
+
"jsdoc": "One language-aware text field for editing a translated value (a {@link SdsLocalizedValue} — a title,\nlabel or description in several languages). Only one language is edited at a time; a compact switcher\nsitting **inside the field** flips which translation you are editing, and a dot marks the languages that\nalready have content, so a partially-translated value is obvious at a glance.\n\nThe active language defaults to {@link currentLanguage} when it is one of {@link languages}, otherwise the\nfirst accepted language — so the field \"opens on the language you are working in\". Empty translations are\npruned from the emitted value, keeping the stored map clean.\n\nImplements ControlValueAccessor over the map — use with reactive forms or `[(ngModel)]`:\n`<sds-localized-input [languages]=\"['fr','nl','en']\" [(ngModel)]=\"title\" />`.",
|
|
1987
|
+
"example": null,
|
|
1988
|
+
"cva": true,
|
|
1989
|
+
"usesNgModel": true,
|
|
1990
|
+
"inputs": [
|
|
1991
|
+
{
|
|
1992
|
+
"name": "label",
|
|
1993
|
+
"type": "string",
|
|
1994
|
+
"default": "''",
|
|
1995
|
+
"required": false,
|
|
1996
|
+
"transform": null,
|
|
1997
|
+
"alias": null,
|
|
1998
|
+
"jsdoc": null
|
|
1999
|
+
},
|
|
2000
|
+
{
|
|
2001
|
+
"name": "hint",
|
|
2002
|
+
"type": "string",
|
|
2003
|
+
"default": "''",
|
|
2004
|
+
"required": false,
|
|
2005
|
+
"transform": null,
|
|
2006
|
+
"alias": null,
|
|
2007
|
+
"jsdoc": null
|
|
2008
|
+
},
|
|
2009
|
+
{
|
|
2010
|
+
"name": "placeholder",
|
|
2011
|
+
"type": "string",
|
|
2012
|
+
"default": "''",
|
|
2013
|
+
"required": false,
|
|
2014
|
+
"transform": null,
|
|
2015
|
+
"alias": null,
|
|
2016
|
+
"jsdoc": null
|
|
2017
|
+
},
|
|
2018
|
+
{
|
|
2019
|
+
"name": "languages",
|
|
2020
|
+
"type": "string[]",
|
|
2021
|
+
"default": "[]",
|
|
2022
|
+
"required": false,
|
|
2023
|
+
"transform": null,
|
|
2024
|
+
"alias": null,
|
|
2025
|
+
"jsdoc": "The accepted language codes, in display order (e.g. `['fr','nl','en']`)."
|
|
2026
|
+
},
|
|
2027
|
+
{
|
|
2028
|
+
"name": "currentLanguage",
|
|
2029
|
+
"type": "string | null",
|
|
2030
|
+
"default": "null",
|
|
2031
|
+
"required": false,
|
|
2032
|
+
"transform": null,
|
|
2033
|
+
"alias": null,
|
|
2034
|
+
"jsdoc": "Language to pre-select; used when it is one of {@link languages}, else the first accepted language."
|
|
2035
|
+
},
|
|
2036
|
+
{
|
|
2037
|
+
"name": "multiline",
|
|
2038
|
+
"type": "boolean",
|
|
2039
|
+
"default": "false",
|
|
2040
|
+
"required": false,
|
|
2041
|
+
"transform": "booleanAttribute",
|
|
2042
|
+
"alias": null,
|
|
2043
|
+
"jsdoc": null
|
|
2044
|
+
},
|
|
2045
|
+
{
|
|
2046
|
+
"name": "rows",
|
|
2047
|
+
"type": "number",
|
|
2048
|
+
"default": "3",
|
|
2049
|
+
"required": false,
|
|
2050
|
+
"transform": "numberAttribute",
|
|
2051
|
+
"alias": null,
|
|
2052
|
+
"jsdoc": null
|
|
2053
|
+
},
|
|
2054
|
+
{
|
|
2055
|
+
"name": "size",
|
|
2056
|
+
"type": "SdsLocalizedInputSize",
|
|
2057
|
+
"default": "'md'",
|
|
2058
|
+
"required": false,
|
|
2059
|
+
"transform": null,
|
|
2060
|
+
"alias": null,
|
|
2061
|
+
"jsdoc": null
|
|
2062
|
+
},
|
|
2063
|
+
{
|
|
2064
|
+
"name": "disabled",
|
|
2065
|
+
"type": "boolean",
|
|
2066
|
+
"default": "false",
|
|
2067
|
+
"required": false,
|
|
2068
|
+
"transform": "booleanAttribute",
|
|
2069
|
+
"alias": null,
|
|
2070
|
+
"jsdoc": null
|
|
2071
|
+
},
|
|
2072
|
+
{
|
|
2073
|
+
"name": "languageSwitcherLabel",
|
|
2074
|
+
"type": "string",
|
|
2075
|
+
"default": "'Langue'",
|
|
2076
|
+
"required": false,
|
|
2077
|
+
"transform": null,
|
|
2078
|
+
"alias": null,
|
|
2079
|
+
"jsdoc": "Accessible name for the in-field language switcher, and the \"no translation yet\" title suffix on each\nlanguage button. French defaults so existing consumers are unchanged; translate them in a multi-language\napp (the buttons are letter-only, so the title carries their meaning)."
|
|
2080
|
+
},
|
|
2081
|
+
{
|
|
2082
|
+
"name": "untranslatedLabel",
|
|
2083
|
+
"type": "string",
|
|
2084
|
+
"default": "'à traduire'",
|
|
2085
|
+
"required": false,
|
|
2086
|
+
"transform": null,
|
|
2087
|
+
"alias": null,
|
|
2088
|
+
"jsdoc": null
|
|
2089
|
+
}
|
|
2090
|
+
],
|
|
2091
|
+
"outputs": [],
|
|
2092
|
+
"exportedTypes": [
|
|
2093
|
+
{
|
|
2094
|
+
"name": "SdsLocalizedValue",
|
|
2095
|
+
"kind": "type",
|
|
2096
|
+
"body": "Record<string, string>"
|
|
2097
|
+
},
|
|
2098
|
+
{
|
|
2099
|
+
"name": "SdsLocalizedInputSize",
|
|
2100
|
+
"kind": "union",
|
|
2101
|
+
"body": "'sm' | 'md' | 'lg'"
|
|
2102
|
+
}
|
|
2103
|
+
],
|
|
2104
|
+
"projectionSlots": [],
|
|
2105
|
+
"hostBindings": {
|
|
2106
|
+
"class": "block"
|
|
2107
|
+
},
|
|
2108
|
+
"examples": [
|
|
2109
|
+
{
|
|
2110
|
+
"sectionTitle": "Basique",
|
|
2111
|
+
"sectionDescription": "Passez les langues acceptées ; le champ s'ouvre sur la langue courante et n'édite qu'une langue à la fois.",
|
|
2112
|
+
"code": "<sds-localized-input\n label=\"Titre\"\n [languages]=\"['fr', 'nl', 'en']\"\n [(ngModel)]=\"title\"\n/>\n\n// title: SdsLocalizedValue = {}; // e.g. { fr: 'Signaler un incident' }",
|
|
2113
|
+
"runnableExample": "<sds-localized-input label=\"Titre\" [languages]=\"['fr', 'nl', 'en']\" [(ngModel)]=\"title\" />",
|
|
2114
|
+
"stack": true,
|
|
2115
|
+
"dark": false
|
|
2116
|
+
},
|
|
2117
|
+
{
|
|
2118
|
+
"sectionTitle": "Valeur partiellement traduite",
|
|
2119
|
+
"sectionDescription": "Une pastille pleine marque les langues renseignées, une pastille creuse celles qui restent à traduire.",
|
|
2120
|
+
"code": "label = { fr: 'Applications & logiciels', en: 'Applications & software' };\n\n<sds-localized-input\n label=\"Libellé de catégorie\"\n [languages]=\"['fr', 'nl', 'en']\"\n [(ngModel)]=\"label\"\n/>",
|
|
2121
|
+
"runnableExample": "<sds-localized-input\n label=\"Libellé de catégorie\"\n [languages]=\"['fr', 'nl', 'en']\"\n [(ngModel)]=\"label\"\n />",
|
|
2122
|
+
"stack": true,
|
|
2123
|
+
"dark": false
|
|
2124
|
+
},
|
|
2125
|
+
{
|
|
2126
|
+
"sectionTitle": "Langue pré-sélectionnée",
|
|
2127
|
+
"sectionDescription": "currentLanguage ouvre le champ sur une langue précise quand elle fait partie des langues acceptées.",
|
|
2128
|
+
"code": "<sds-localized-input\n label=\"Titre\"\n [languages]=\"['fr', 'nl', 'en']\"\n currentLanguage=\"nl\"\n [(ngModel)]=\"title\"\n/>",
|
|
2129
|
+
"runnableExample": "<sds-localized-input\n label=\"Titre\"\n [languages]=\"['fr', 'nl', 'en']\"\n currentLanguage=\"nl\"\n [(ngModel)]=\"titleNl\"\n />",
|
|
2130
|
+
"stack": true,
|
|
2131
|
+
"dark": false
|
|
2132
|
+
},
|
|
2133
|
+
{
|
|
2134
|
+
"sectionTitle": "Multiligne",
|
|
2135
|
+
"sectionDescription": "multiline rend une zone de texte au lieu d'un champ simple.",
|
|
2136
|
+
"code": "<sds-localized-input\n label=\"Description\"\n [languages]=\"['fr', 'nl', 'en']\"\n multiline\n [rows]=\"3\"\n [(ngModel)]=\"description\"\n/>",
|
|
2137
|
+
"runnableExample": "<sds-localized-input\n label=\"Description\"\n [languages]=\"['fr', 'nl', 'en']\"\n multiline\n [rows]=\"3\"\n [(ngModel)]=\"description\"\n />",
|
|
2138
|
+
"stack": true,
|
|
2139
|
+
"dark": false
|
|
2140
|
+
},
|
|
2141
|
+
{
|
|
2142
|
+
"sectionTitle": "Désactivé",
|
|
2143
|
+
"sectionDescription": null,
|
|
2144
|
+
"code": "<sds-localized-input\n label=\"Titre\"\n [languages]=\"['fr', 'nl', 'en']\"\n [(ngModel)]=\"value\"\n disabled\n/>",
|
|
2145
|
+
"runnableExample": "<sds-localized-input\n label=\"Titre\"\n [languages]=\"['fr', 'nl', 'en']\"\n [ngModel]=\"label\"\n disabled\n />",
|
|
2146
|
+
"stack": true,
|
|
2147
|
+
"dark": false
|
|
2148
|
+
}
|
|
2149
|
+
]
|
|
2150
|
+
},
|
|
1579
2151
|
{
|
|
1580
2152
|
"className": "SdsMultiSelect",
|
|
1581
2153
|
"selector": "sds-multi-select",
|
|
@@ -3053,7 +3625,7 @@
|
|
|
3053
3625
|
"sectionTitle": "Navigation",
|
|
3054
3626
|
"sectionDescription": "Les items acceptent [link] (routerLink avec état actif automatique) ; ici active est défini manuellement pour la démo.",
|
|
3055
3627
|
"code": "<sds-sidebar>\n <sds-nav-group>\n <sds-nav-item icon=\"home\" label=\"Accueil\" link=\"/\" exact />\n </sds-nav-group>\n\n <sds-nav-group label=\"Membres\">\n <sds-nav-item icon=\"user-plus\" label=\"Créer un membre\" link=\"/membres/creer\" />\n <sds-nav-item icon=\"building-2\" label=\"Recherche Occupants\" link=\"/membres/occupants\" />\n </sds-nav-group>\n\n <div sdsFooter>\n <sds-badge variant=\"warning\" dot>TEST V.1.0.0</sds-badge>\n </div>\n</sds-sidebar>",
|
|
3056
|
-
"runnableExample": "<div class=\"h-[460px] w-fit overflow-hidden rounded-card border border-border\">\n <sds-sidebar>\n <sds-nav-group>\n <sds-nav-item icon=\"home\" label=\"Accueil\" active />\n </sds-nav-group>\n\n <sds-nav-group label=\"Membres\">\n <sds-nav-item icon=\"user-plus\" label=\"Créer un membre\" />\n <sds-nav-item icon=\"building-2\" label=\"Recherche Occupants\" />\n </sds-nav-group>\n\n <sds-nav-group label=\"Dotations\">\n <sds-nav-item icon=\"package-plus\" label=\"Créer une dotation\" />\n <sds-nav-item icon=\"rotate-ccw\" label=\"Retour de dotation\" />\n </sds-nav-group>\n\n <div sdsFooter>\n <
|
|
3628
|
+
"runnableExample": "<div class=\"h-[460px] w-fit overflow-hidden rounded-card border border-border\">\n <sds-sidebar>\n <sds-nav-group>\n <sds-nav-item icon=\"home\" label=\"Accueil\" active />\n </sds-nav-group>\n\n <sds-nav-group label=\"Membres\">\n <sds-nav-item icon=\"user-plus\" label=\"Créer un membre\" />\n <sds-nav-item icon=\"building-2\" label=\"Recherche Occupants\" />\n </sds-nav-group>\n\n <sds-nav-group label=\"Dotations\">\n <sds-nav-item icon=\"package-plus\" label=\"Créer une dotation\" />\n <sds-nav-item icon=\"rotate-ccw\" label=\"Retour de dotation\" />\n </sds-nav-group>\n\n <div sdsFooter class=\"text-[0.68rem] text-white/40 flex justify-center items-center\">\n <div class=\"font-mono\">Saitech Design System v{{ version }}</div>\n </div>\n </sds-sidebar>\n </div>",
|
|
3057
3629
|
"stack": true,
|
|
3058
3630
|
"dark": false
|
|
3059
3631
|
}
|
|
@@ -4013,6 +4585,52 @@
|
|
|
4013
4585
|
}
|
|
4014
4586
|
]
|
|
4015
4587
|
},
|
|
4588
|
+
{
|
|
4589
|
+
"className": "SdsToastHost",
|
|
4590
|
+
"selector": "sds-toast-host",
|
|
4591
|
+
"kind": "component",
|
|
4592
|
+
"group": "primitive",
|
|
4593
|
+
"importName": "SdsToastService, SdsToastHost",
|
|
4594
|
+
"description": "Notifications transitoires. Le code applicatif appelle SdsToastService.success / error / info après une action ; un unique <sds-toast-host> monté dans le shell affiche la file et chaque toast disparaît tout seul. Régions live accessibles : les erreurs interrompent (assertive), les succès/infos patientent (polite).",
|
|
4595
|
+
"overviewDescription": null,
|
|
4596
|
+
"jsdoc": "Renders the {@link SdsToastService} queue, fixed bottom-centre. Mount it once, in the app shell:\n`<sds-toast-host />`. Application code pushes toasts through the injected service.\n\nAccessibility: the two live regions are ALWAYS in the DOM (even when empty), because a live region must\npre-exist for its later content changes to be announced. Errors go to an assertive `role=\"alert\"` region\nso a failure interrupts; success/info go to a polite region so they queue.",
|
|
4597
|
+
"example": null,
|
|
4598
|
+
"cva": false,
|
|
4599
|
+
"usesNgModel": false,
|
|
4600
|
+
"inputs": [
|
|
4601
|
+
{
|
|
4602
|
+
"name": "closeLabel",
|
|
4603
|
+
"type": "string",
|
|
4604
|
+
"default": "'Fermer'",
|
|
4605
|
+
"required": false,
|
|
4606
|
+
"transform": null,
|
|
4607
|
+
"alias": null,
|
|
4608
|
+
"jsdoc": "Accessible name for each toast's close button. French default so existing consumers are unchanged; the\nbutton is icon-only, so an app serving more than one language MUST translate it."
|
|
4609
|
+
}
|
|
4610
|
+
],
|
|
4611
|
+
"outputs": [],
|
|
4612
|
+
"exportedTypes": [],
|
|
4613
|
+
"projectionSlots": [],
|
|
4614
|
+
"hostBindings": {},
|
|
4615
|
+
"examples": [
|
|
4616
|
+
{
|
|
4617
|
+
"sectionTitle": "Déclencher",
|
|
4618
|
+
"sectionDescription": "Injectez SdsToastService et appelez success / error / info. Les erreurs restent affichées plus longtemps.",
|
|
4619
|
+
"code": "private readonly toasts = inject(SdsToastService);\n\nsave(): void {\n this.api.save(form).subscribe({\n next: () => this.toasts.success('Formulaire enregistré.'),\n error: () => this.toasts.error('Échec de l’enregistrement.'),\n });\n}",
|
|
4620
|
+
"runnableExample": "<div class=\"flex flex-wrap gap-2\">\n <sds-button variant=\"secondary\" (click)=\"toasts.success('Formulaire enregistré.')\">\n Succès\n </sds-button>\n <sds-button variant=\"secondary\" (click)=\"toasts.error('Échec de l’enregistrement.')\">\n Erreur\n </sds-button>\n <sds-button variant=\"secondary\" (click)=\"toasts.info('Synchronisation en cours…')\">\n Info\n </sds-button>\n </div>",
|
|
4621
|
+
"stack": true,
|
|
4622
|
+
"dark": false
|
|
4623
|
+
},
|
|
4624
|
+
{
|
|
4625
|
+
"sectionTitle": "Mise en place",
|
|
4626
|
+
"sectionDescription": "Montez l'hôte une seule fois (dans le shell de l'application), puis poussez des toasts depuis n'importe quel service ou composant.",
|
|
4627
|
+
"code": "// Shell / app root — mount the host once:\n@Component({\n imports: [SdsToastHost /* … */],\n template: `\n <sds-shell> … </sds-shell>\n <sds-toast-host />\n `,\n})\nexport class AppShell {}",
|
|
4628
|
+
"runnableExample": "<p class=\"text-sm text-ink-soft\">\n <code class=\"rounded bg-muted px-1.5 py-0.5 text-xs\"><sds-toast-host /></code>\n est monté une fois en haut de l'application ; il n'a pas de rendu propre tant qu'aucun toast n'est\n actif.\n </p>",
|
|
4629
|
+
"stack": true,
|
|
4630
|
+
"dark": false
|
|
4631
|
+
}
|
|
4632
|
+
]
|
|
4633
|
+
},
|
|
4016
4634
|
{
|
|
4017
4635
|
"className": "SdsToggleSwitch",
|
|
4018
4636
|
"selector": "sds-toggle-switch",
|
|
@@ -4395,6 +5013,18 @@
|
|
|
4395
5013
|
],
|
|
4396
5014
|
"jsdoc": "Coordinates a single <sds-tabs> instance: holds the active value (shared from\nthe host's two-way model), tracks registered tabs for default selection and\ngenerates the ARIA ids that link each tab to its panel.\n\nProvided at the <sds-tabs> component level so every tab set is isolated."
|
|
4397
5015
|
},
|
|
5016
|
+
{
|
|
5017
|
+
"className": "SdsToastService",
|
|
5018
|
+
"providedIn": "root",
|
|
5019
|
+
"exports": [
|
|
5020
|
+
"toasts",
|
|
5021
|
+
"success()",
|
|
5022
|
+
"error()",
|
|
5023
|
+
"info()",
|
|
5024
|
+
"dismiss()"
|
|
5025
|
+
],
|
|
5026
|
+
"jsdoc": "A tiny transient-notification bus. Application code calls {@link success} / {@link error} / {@link info}\nafter an action; a single {@link SdsToastHost} mounted in the app shell renders the queue and each toast\nauto-dismisses. Deliberately minimal — no positions, no actions-in-toast — because it exists to confirm\nan action, not to be a notification centre.\n\n`providedIn: 'root'`, so injecting it anywhere shares one queue:\n\n```ts\nprivate readonly toasts = inject(SdsToastService);\nthis.toasts.success('Enregistré.');\n```\n\nMount the host once (e.g. in the shell): `<sds-toast-host />`."
|
|
5027
|
+
},
|
|
4398
5028
|
{
|
|
4399
5029
|
"className": "SidebarStore",
|
|
4400
5030
|
"providedIn": "root",
|
|
@@ -4431,6 +5061,7 @@
|
|
|
4431
5061
|
"chevron-down",
|
|
4432
5062
|
"chevron-left",
|
|
4433
5063
|
"chevron-right",
|
|
5064
|
+
"chevron-up",
|
|
4434
5065
|
"chevrons-left",
|
|
4435
5066
|
"chevrons-right",
|
|
4436
5067
|
"chevrons-up-down",
|
|
@@ -4455,6 +5086,7 @@
|
|
|
4455
5086
|
"map-pin",
|
|
4456
5087
|
"megaphone",
|
|
4457
5088
|
"menu",
|
|
5089
|
+
"minus",
|
|
4458
5090
|
"monitor",
|
|
4459
5091
|
"package",
|
|
4460
5092
|
"package-open",
|
|
@@ -4466,6 +5098,7 @@
|
|
|
4466
5098
|
"panel-top",
|
|
4467
5099
|
"panels-top-left",
|
|
4468
5100
|
"phone",
|
|
5101
|
+
"plus",
|
|
4469
5102
|
"refresh-cw",
|
|
4470
5103
|
"rotate-ccw",
|
|
4471
5104
|
"rows-3",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@besaitech/ng-design-system-mcp",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.12",
|
|
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": {
|