@smwb/ui-mcp-solid 0.11.2 → 0.12.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.
Files changed (28) hide show
  1. package/component-meta/dataDisplay/accordion/accordion.json +27 -2
  2. package/component-meta/dataDisplay/avatar/avatar.avatarGroup.json +10 -0
  3. package/component-meta/dataDisplay/chart/chart.json +73 -0
  4. package/component-meta/dataDisplay/descriptionList/descriptionList.descriptionItem.json +35 -0
  5. package/component-meta/dataDisplay/descriptionList/descriptionList.json +50 -0
  6. package/component-meta/dataDisplay/kanban/kanban.json +35 -0
  7. package/component-meta/dataDisplay/kanban/kanban.kanbanCard.json +45 -0
  8. package/component-meta/dataDisplay/kanban/kanban.kanbanColumn.json +55 -0
  9. package/component-meta/dataDisplay/meter/meter.json +70 -0
  10. package/component-meta/dataDisplay/personChip/personChip.json +72 -0
  11. package/component-meta/dataDisplay/stat/stat.json +67 -0
  12. package/component-meta/dataDisplay/stat/stat.statGroup.json +35 -0
  13. package/component-meta/dataDisplay/table/table.json +5 -0
  14. package/component-meta/dataDisplay/table/tableCell.json +5 -0
  15. package/component-meta/dataDisplay/table/tableHeadCell.json +1 -1
  16. package/component-meta/dataDisplay/timeline/timeline.json +42 -0
  17. package/component-meta/dataDisplay/timeline/timeline.timelineGroup.json +35 -0
  18. package/component-meta/dataDisplay/timeline/timeline.timelineItem.json +55 -0
  19. package/component-meta/dataDisplay/typography/typography.json +10 -0
  20. package/component-meta/feedBack/emptyState/emptyState.json +57 -0
  21. package/component-meta/feedBack/progressIndicator/progressIndicator.circularProgress.json +1 -1
  22. package/component-meta/feedBack/progressIndicator/progressIndicator.json +20 -0
  23. package/component-meta/inputs/selectField/selectField.json +5 -0
  24. package/component-meta/layout/sectionHeader/sectionHeader.json +68 -0
  25. package/component-meta/navigation/stepper/stepper.json +2 -2
  26. package/component-meta/navigation/tabs/tab/tab.json +5 -0
  27. package/component-meta/navigation/tabs/tabs.json +23 -2
  28. package/package.json +3 -3
@@ -25,9 +25,19 @@
25
25
  "description": "Class. Optional. Type: string."
26
26
  },
27
27
  "title": {
28
- "type": "string",
28
+ "type": "JSX.Element",
29
+ "required": false,
30
+ "description": "Header text or markup (a date, an author, a badge…)."
31
+ },
32
+ "subtitle": {
33
+ "type": "JSX.Element",
34
+ "required": false,
35
+ "description": "Secondary line under the title."
36
+ },
37
+ "variant": {
38
+ "type": "AccordionVariant",
29
39
  "required": false,
30
- "description": "Accessible title or tooltip text."
40
+ "description": "Visual style variant."
31
41
  },
32
42
  "isOpenByDefault": {
33
43
  "type": "boolean",
@@ -59,11 +69,26 @@
59
69
  "required": false,
60
70
  "description": "Start Adornment. Optional. Type: (isOpen: boolean) => JSX.Element."
61
71
  },
72
+ "endAdornment": {
73
+ "type": "(isOpen: boolean) => JSX.Element",
74
+ "required": false,
75
+ "description": "Rendered after the title, before the expand icon."
76
+ },
62
77
  "noIcon": {
63
78
  "type": "boolean",
64
79
  "required": false,
65
80
  "description": "No Icon. Optional. Type: boolean."
66
81
  },
82
+ "lazy": {
83
+ "type": "boolean",
84
+ "required": false,
85
+ "description": "Create the content on first open instead of up front."
86
+ },
87
+ "unmountOnExit": {
88
+ "type": "boolean",
89
+ "required": false,
90
+ "description": "Remove the content once the panel has collapsed (created again on open)."
91
+ },
67
92
  "onToggleClick": {
68
93
  "type": "(e: MouseEvent & { currentTarget: HTMLButtonElement; target: Element }) => void",
69
94
  "required": false,
@@ -36,6 +36,16 @@
36
36
  "required": false,
37
37
  "description": "Click handler for the \"+N\" surplus chip."
38
38
  },
39
+ "surplusAriaLabel": {
40
+ "type": "(count: number) => string",
41
+ "required": false,
42
+ "description": "Accessible name of the \"+N\" surplus chip."
43
+ },
44
+ "size": {
45
+ "type": "AvatarSize | number",
46
+ "required": false,
47
+ "description": "Size of the \"+N\" surplus chip: match the avatars in the group."
48
+ },
39
49
  "ref": {
40
50
  "type": "Ref<HTMLDivElement>",
41
51
  "required": false,
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "Chart",
3
+ "description": "An ECharts chart in the theme's palette (import from @smwb/ui-solid/chart; echarts is an optional peer): option or option(palette), lazy-loaded ECharts or your own loader, a skeleton until it draws, redrawn on theme switches and resizes (not at zero size).",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal",
7
+ "note": "Renders a same-size skeleton and the summary on the server; ECharts loads and draws in the browser."
8
+ },
9
+ "extends": [
10
+ "Omit<JSX.HTMLAttributes<HTMLDivElement>, \"onClick\">"
11
+ ],
12
+ "inheritedAttributes": "Also accepts standard HTML attributes for the underlying element (see extends clause in TypeScript).",
13
+ "styles": {
14
+ "base": [
15
+ "@smwb/ui-styles/less/foundation.less",
16
+ "@smwb/ui-styles/less/theme.less"
17
+ ],
18
+ "entries": [
19
+ "@smwb/ui-styles/less/components/chart/chart.entry.less"
20
+ ],
21
+ "dependencies": [
22
+ "@smwb/ui-styles/less/components/skeleton/skeleton.entry.less"
23
+ ],
24
+ "importExample": "@import (less) \"node_modules/@smwb/ui-styles/less/foundation.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/theme.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/chart/chart.entry.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/skeleton/skeleton.entry.less\";"
25
+ },
26
+ "props": {
27
+ "label": {
28
+ "type": "string",
29
+ "required": true,
30
+ "description": "What the chart shows: its accessible name."
31
+ },
32
+ "summary": {
33
+ "type": "string",
34
+ "required": false,
35
+ "description": "The chart in words, for screen readers; it is there before the chart draws, and on the server."
36
+ },
37
+ "option": {
38
+ "type": "ChartOption | ((palette: ChartPalette) => ChartOption)",
39
+ "required": true,
40
+ "description": "The ECharts option, or a function of the theme's palette that returns it.\nIt is applied whole whenever it or the theme changes."
41
+ },
42
+ "height": {
43
+ "type": "number | string",
44
+ "required": false,
45
+ "description": "The chart's height: a number of pixels or any CSS length; 240 by default. It fills the width."
46
+ },
47
+ "loader": {
48
+ "type": "() => Promise<ChartModule>",
49
+ "required": false,
50
+ "description": "Loads ECharts in the browser: `import(\"echarts\")` by default, the whole\nlibrary. For a smaller bundle pass `() => import(\"./my-echarts\")`, a module\nthat registers only the charts you use with `echarts/core`."
51
+ },
52
+ "renderer": {
53
+ "type": "\"canvas\" | \"svg\"",
54
+ "required": false,
55
+ "description": "How ECharts draws: \"canvas\" (default) or \"svg\". Read once, when the chart is created."
56
+ },
57
+ "onClick": {
58
+ "type": "(params: ChartEventParams) => void",
59
+ "required": false,
60
+ "description": "A click on an item: a bar, a point, a node."
61
+ },
62
+ "onReady": {
63
+ "type": "(chart: ChartInstance) => void",
64
+ "required": false,
65
+ "description": "The ECharts instance, once it has drawn — for other events and actions. Called again if a theme change re-creates it."
66
+ },
67
+ "ref": {
68
+ "type": "Ref<HTMLDivElement>",
69
+ "required": false,
70
+ "description": "Ref. Optional. Type: Ref<HTMLDivElement>."
71
+ }
72
+ }
73
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "DescriptionItem",
3
+ "description": "One term and its description inside a DescriptionList.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
8
+ "extends": [
9
+ "JSX.HTMLAttributes<HTMLDivElement>"
10
+ ],
11
+ "inheritedAttributes": "Also accepts standard HTML attributes for the underlying element (see extends clause in TypeScript).",
12
+ "styles": {
13
+ "base": [
14
+ "@smwb/ui-styles/less/foundation.less",
15
+ "@smwb/ui-styles/less/theme.less"
16
+ ],
17
+ "entries": [
18
+ "@smwb/ui-styles/less/components/descriptionList/descriptionList.entry.less"
19
+ ],
20
+ "dependencies": [],
21
+ "importExample": "@import (less) \"node_modules/@smwb/ui-styles/less/foundation.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/theme.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/descriptionList/descriptionList.entry.less\";"
22
+ },
23
+ "props": {
24
+ "term": {
25
+ "type": "JSX.Element",
26
+ "required": true,
27
+ "description": "The field's name."
28
+ },
29
+ "ref": {
30
+ "type": "Ref<HTMLDivElement>",
31
+ "required": false,
32
+ "description": "Ref. Optional. Type: Ref<HTMLDivElement>."
33
+ }
34
+ }
35
+ }
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "DescriptionList",
3
+ "description": "Field-value pairs (<dl>) from items or DescriptionItem children; side by side, stacking in a narrow container (container query).",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
8
+ "extends": [
9
+ "JSX.HTMLAttributes<HTMLDListElement>"
10
+ ],
11
+ "inheritedAttributes": "Also accepts standard HTML attributes for the underlying element (see extends clause in TypeScript).",
12
+ "styles": {
13
+ "base": [
14
+ "@smwb/ui-styles/less/foundation.less",
15
+ "@smwb/ui-styles/less/theme.less"
16
+ ],
17
+ "entries": [
18
+ "@smwb/ui-styles/less/components/descriptionList/descriptionList.entry.less"
19
+ ],
20
+ "dependencies": [],
21
+ "importExample": "@import (less) \"node_modules/@smwb/ui-styles/less/foundation.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/theme.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/descriptionList/descriptionList.entry.less\";"
22
+ },
23
+ "props": {
24
+ "items": {
25
+ "type": "DescriptionListEntry[]",
26
+ "required": false,
27
+ "description": "The pairs as data; `DescriptionItem` children work too, and come after them."
28
+ },
29
+ "layout": {
30
+ "type": "DescriptionListLayout",
31
+ "required": false,
32
+ "description": "Current chat shell layout mode."
33
+ },
34
+ "termWidth": {
35
+ "type": "number | string",
36
+ "required": false,
37
+ "description": "Width of the term column in the row layout: px or any CSS track size. 30% of the list, at least 6rem, by default."
38
+ },
39
+ "dense": {
40
+ "type": "boolean",
41
+ "required": false,
42
+ "description": "Tighter spacing, for side panels."
43
+ },
44
+ "ref": {
45
+ "type": "Ref<HTMLDListElement>",
46
+ "required": false,
47
+ "description": "Ref. Optional. Type: Ref<HTMLDListElement>."
48
+ }
49
+ }
50
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "Kanban",
3
+ "description": "A board of KanbanColumn children side by side, scrolling sideways (with snap) when they do not fit; columnWidth sets the narrowest column.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
8
+ "extends": [
9
+ "JSX.HTMLAttributes<HTMLDivElement>"
10
+ ],
11
+ "inheritedAttributes": "Also accepts standard HTML attributes for the underlying element (see extends clause in TypeScript).",
12
+ "styles": {
13
+ "base": [
14
+ "@smwb/ui-styles/less/foundation.less",
15
+ "@smwb/ui-styles/less/theme.less"
16
+ ],
17
+ "entries": [
18
+ "@smwb/ui-styles/less/components/kanban/kanban.entry.less"
19
+ ],
20
+ "dependencies": [],
21
+ "importExample": "@import (less) \"node_modules/@smwb/ui-styles/less/foundation.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/theme.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/kanban/kanban.entry.less\";"
22
+ },
23
+ "props": {
24
+ "columnWidth": {
25
+ "type": "number | string",
26
+ "required": false,
27
+ "description": "The narrowest a column gets before the board scrolls sideways: a number of\npixels or any CSS length. 15.5rem by default."
28
+ },
29
+ "ref": {
30
+ "type": "Ref<HTMLDivElement>",
31
+ "required": false,
32
+ "description": "Ref. Optional. Type: Ref<HTMLDivElement>."
33
+ }
34
+ }
35
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "KanbanCard",
3
+ "description": "A card on a Kanban board: a title clamped to titleLines lines (a link stretched over the card with href) and content below.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
8
+ "extends": [
9
+ "Omit<JSX.HTMLAttributes<HTMLLIElement>, \"title\">"
10
+ ],
11
+ "inheritedAttributes": "Also accepts standard HTML attributes for the underlying element (see extends clause in TypeScript).",
12
+ "styles": {
13
+ "base": [
14
+ "@smwb/ui-styles/less/foundation.less",
15
+ "@smwb/ui-styles/less/theme.less"
16
+ ],
17
+ "entries": [
18
+ "@smwb/ui-styles/less/components/kanban/kanban.entry.less"
19
+ ],
20
+ "dependencies": [],
21
+ "importExample": "@import (less) \"node_modules/@smwb/ui-styles/less/foundation.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/theme.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/kanban/kanban.entry.less\";"
22
+ },
23
+ "props": {
24
+ "title": {
25
+ "type": "JSX.Element",
26
+ "required": false,
27
+ "description": "The card's title, clamped to `titleLines` lines."
28
+ },
29
+ "href": {
30
+ "type": "string",
31
+ "required": false,
32
+ "description": "Makes the title a link, and the whole card open it."
33
+ },
34
+ "titleLines": {
35
+ "type": "number",
36
+ "required": false,
37
+ "description": "Lines the title is clamped to: 3 by default."
38
+ },
39
+ "ref": {
40
+ "type": "Ref<HTMLLIElement>",
41
+ "required": false,
42
+ "description": "Ref. Optional. Type: Ref<HTMLLIElement>."
43
+ }
44
+ }
45
+ }
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "KanbanColumn",
3
+ "description": "A board column (role=group named by its title): a count, an accent stripe, KanbanCard children, an empty placeholder and a footer.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
8
+ "extends": [
9
+ "Omit<JSX.HTMLAttributes<HTMLDivElement>, \"title\">"
10
+ ],
11
+ "inheritedAttributes": "Also accepts standard HTML attributes for the underlying element (see extends clause in TypeScript).",
12
+ "styles": {
13
+ "base": [
14
+ "@smwb/ui-styles/less/foundation.less",
15
+ "@smwb/ui-styles/less/theme.less"
16
+ ],
17
+ "entries": [
18
+ "@smwb/ui-styles/less/components/kanban/kanban.entry.less"
19
+ ],
20
+ "dependencies": [],
21
+ "importExample": "@import (less) \"node_modules/@smwb/ui-styles/less/foundation.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/theme.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/kanban/kanban.entry.less\";"
22
+ },
23
+ "props": {
24
+ "title": {
25
+ "type": "JSX.Element",
26
+ "required": true,
27
+ "description": "The column's name: text or a badge. It names the column for assistive technology."
28
+ },
29
+ "count": {
30
+ "type": "number | string | null",
31
+ "required": false,
32
+ "description": "How many cards the column holds (it may show fewer), beside the title. Nothing is shown for null."
33
+ },
34
+ "accent": {
35
+ "type": "string",
36
+ "required": false,
37
+ "description": "The column's colour, a stripe along its top: any CSS colour."
38
+ },
39
+ "empty": {
40
+ "type": "JSX.Element",
41
+ "required": false,
42
+ "description": "Shown in place of the cards when there are none, e.g. \"Empty\"."
43
+ },
44
+ "footer": {
45
+ "type": "JSX.Element",
46
+ "required": false,
47
+ "description": "Under the cards, e.g. a link to the rest as a list."
48
+ },
49
+ "ref": {
50
+ "type": "Ref<HTMLDivElement>",
51
+ "required": false,
52
+ "description": "Ref. Optional. Type: Ref<HTMLDivElement>."
53
+ }
54
+ }
55
+ }
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "Meter",
3
+ "description": "Share of a whole, 'X of Y': a bar with the figures beside it, coloured by thresholds (role=meter).",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
8
+ "extends": [
9
+ "Omit<JSX.HTMLAttributes<HTMLDivElement>, \"role\">"
10
+ ],
11
+ "inheritedAttributes": "Also accepts standard HTML attributes for the underlying element (see extends clause in TypeScript).",
12
+ "styles": {
13
+ "base": [
14
+ "@smwb/ui-styles/less/foundation.less",
15
+ "@smwb/ui-styles/less/theme.less"
16
+ ],
17
+ "entries": [
18
+ "@smwb/ui-styles/less/components/meter/meter.entry.less"
19
+ ],
20
+ "dependencies": [],
21
+ "importExample": "@import (less) \"node_modules/@smwb/ui-styles/less/foundation.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/theme.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/meter/meter.entry.less\";"
22
+ },
23
+ "props": {
24
+ "value": {
25
+ "type": "number",
26
+ "required": true,
27
+ "description": "How many are done (X of Y)."
28
+ },
29
+ "max": {
30
+ "type": "number",
31
+ "required": true,
32
+ "description": "How many there are in all (X of Y)."
33
+ },
34
+ "label": {
35
+ "type": "string",
36
+ "required": true,
37
+ "description": "What is measured — the accessible name, e.g. \"Requirements accepted\"."
38
+ },
39
+ "text": {
40
+ "type": "JSX.Element | ((value: number, max: number) => JSX.Element)",
41
+ "required": false,
42
+ "description": "Visible text instead of \"X of Y\": markup, or a function of (value, max)."
43
+ },
44
+ "ofLabel": {
45
+ "type": "string",
46
+ "required": false,
47
+ "description": "The word between the figures in the default text and in aria-valuetext."
48
+ },
49
+ "thresholds": {
50
+ "type": "readonly MeterThreshold[]",
51
+ "required": false,
52
+ "description": "Colour by share of `max`: the last threshold the share reaches wins."
53
+ },
54
+ "color": {
55
+ "type": "MeterColor",
56
+ "required": false,
57
+ "description": "A fixed colour, instead of the thresholds."
58
+ },
59
+ "hideText": {
60
+ "type": "boolean",
61
+ "required": false,
62
+ "description": "The bar only; the text stays available to assistive technology."
63
+ },
64
+ "ref": {
65
+ "type": "Ref<HTMLDivElement>",
66
+ "required": false,
67
+ "description": "Ref. Optional. Type: Ref<HTMLDivElement>."
68
+ }
69
+ }
70
+ }
@@ -0,0 +1,72 @@
1
+ {
2
+ "name": "PersonChip",
3
+ "description": "A person as an avatar (image or initials on a steady colour) and a name; a link to their card with href; avatar-only when compact.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
8
+ "extends": [
9
+ "Omit<JSX.HTMLAttributes<HTMLElement>, \"title\">"
10
+ ],
11
+ "inheritedAttributes": "Also accepts standard HTML attributes for the underlying element (see extends clause in TypeScript).",
12
+ "styles": {
13
+ "base": [
14
+ "@smwb/ui-styles/less/foundation.less",
15
+ "@smwb/ui-styles/less/theme.less"
16
+ ],
17
+ "entries": [
18
+ "@smwb/ui-styles/less/components/personChip/personChip.entry.less"
19
+ ],
20
+ "dependencies": [
21
+ "@smwb/ui-styles/less/components/avatar/avatar.entry.less"
22
+ ],
23
+ "importExample": "@import (less) \"node_modules/@smwb/ui-styles/less/foundation.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/theme.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/personChip/personChip.entry.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/avatar/avatar.entry.less\";"
24
+ },
25
+ "props": {
26
+ "name": {
27
+ "type": "string",
28
+ "required": true,
29
+ "description": "The person's name: shown beside the avatar, and the source of its initials."
30
+ },
31
+ "src": {
32
+ "type": "string",
33
+ "required": false,
34
+ "description": "Avatar image; initials on a colour without it or when it fails."
35
+ },
36
+ "href": {
37
+ "type": "string",
38
+ "required": false,
39
+ "description": "Link to the person's card."
40
+ },
41
+ "compact": {
42
+ "type": "boolean",
43
+ "required": false,
44
+ "description": "The avatar only; the name becomes its tooltip and accessible name."
45
+ },
46
+ "size": {
47
+ "type": "AvatarSize | number",
48
+ "required": false,
49
+ "description": "Avatar size: a preset or pixels. 24px by default."
50
+ },
51
+ "colorSeed": {
52
+ "type": "string",
53
+ "required": false,
54
+ "description": "Seed for the avatar colour (an id); the name by default."
55
+ },
56
+ "color": {
57
+ "type": "string",
58
+ "required": false,
59
+ "description": "A fixed avatar colour instead of the derived one."
60
+ },
61
+ "meta": {
62
+ "type": "JSX.Element",
63
+ "required": false,
64
+ "description": "A second line under the name: a role, a date."
65
+ },
66
+ "ref": {
67
+ "type": "Ref<HTMLElement>",
68
+ "required": false,
69
+ "description": "Ref. Optional. Type: Ref<HTMLElement>."
70
+ }
71
+ }
72
+ }
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "Stat",
3
+ "description": "A figure with its label, hint and optional icon: a KPI tile with a toned accent edge, or a plain stat; can be a link.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
8
+ "extends": [
9
+ "JSX.HTMLAttributes<HTMLElement>"
10
+ ],
11
+ "inheritedAttributes": "Also accepts standard HTML attributes for the underlying element (see extends clause in TypeScript).",
12
+ "styles": {
13
+ "base": [
14
+ "@smwb/ui-styles/less/foundation.less",
15
+ "@smwb/ui-styles/less/theme.less"
16
+ ],
17
+ "entries": [
18
+ "@smwb/ui-styles/less/components/stat/stat.entry.less"
19
+ ],
20
+ "dependencies": [
21
+ "@smwb/ui-styles/less/components/icon/icon.entry.less"
22
+ ],
23
+ "importExample": "@import (less) \"node_modules/@smwb/ui-styles/less/foundation.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/theme.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/stat/stat.entry.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/icon/icon.entry.less\";"
24
+ },
25
+ "props": {
26
+ "label": {
27
+ "type": "JSX.Element",
28
+ "required": true,
29
+ "description": "What the figure counts."
30
+ },
31
+ "value": {
32
+ "type": "JSX.Element",
33
+ "required": true,
34
+ "description": "The figure — a number, or a short value such as \"3 / 14\"."
35
+ },
36
+ "hint": {
37
+ "type": "JSX.Element",
38
+ "required": false,
39
+ "description": "A line under the value: a comparison, a period, a caveat."
40
+ },
41
+ "icon": {
42
+ "type": "string | JSX.Element",
43
+ "required": false,
44
+ "description": "An icon beside the figure: a Material Symbols name or an element."
45
+ },
46
+ "tone": {
47
+ "type": "StatTone",
48
+ "required": false,
49
+ "description": "Colour of the accent (a tile's edge, the icon). `warning` and `error` colour the figure too."
50
+ },
51
+ "variant": {
52
+ "type": "\"tile\" | \"plain\"",
53
+ "required": false,
54
+ "description": "`tile`: a bordered card with an accent edge, for KPIs. `plain`: text only, for rows of small figures."
55
+ },
56
+ "href": {
57
+ "type": "string",
58
+ "required": false,
59
+ "description": "Make the whole stat a link to what the figure is made of."
60
+ },
61
+ "ref": {
62
+ "type": "Ref<HTMLElement>",
63
+ "required": false,
64
+ "description": "Ref. Optional. Type: Ref<HTMLElement>."
65
+ }
66
+ }
67
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "StatGroup",
3
+ "description": "Responsive grid row of stats: as many columns as fit, each at least minItemWidth wide.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
8
+ "extends": [
9
+ "JSX.HTMLAttributes<HTMLDivElement>"
10
+ ],
11
+ "inheritedAttributes": "Also accepts standard HTML attributes for the underlying element (see extends clause in TypeScript).",
12
+ "styles": {
13
+ "base": [
14
+ "@smwb/ui-styles/less/foundation.less",
15
+ "@smwb/ui-styles/less/theme.less"
16
+ ],
17
+ "entries": [
18
+ "@smwb/ui-styles/less/components/stat/stat.entry.less"
19
+ ],
20
+ "dependencies": [],
21
+ "importExample": "@import (less) \"node_modules/@smwb/ui-styles/less/foundation.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/theme.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/stat/stat.entry.less\";"
22
+ },
23
+ "props": {
24
+ "minItemWidth": {
25
+ "type": "number | string",
26
+ "required": false,
27
+ "description": "Narrowest a stat may get before the row wraps; a CSS length or px. 9rem by default."
28
+ },
29
+ "ref": {
30
+ "type": "Ref<HTMLDivElement>",
31
+ "required": false,
32
+ "description": "Ref. Optional. Type: Ref<HTMLDivElement>."
33
+ }
34
+ }
35
+ }
@@ -49,6 +49,11 @@
49
49
  "required": false,
50
50
  "description": "Optional accessible caption rendered for screen readers."
51
51
  },
52
+ "stackBelow": {
53
+ "type": "\"sm\" | \"md\" | \"lg\"",
54
+ "required": false,
55
+ "description": "Show each row as a card — cells one under another, each with its column's\nlabel — while the table's container is narrower than this breakpoint:\n`sm` (420px), `md` (768px) or `lg` (1024px). A container query: the space\nthe table has decides, not the window. Labels come from `TableCell label`."
56
+ },
52
57
  "paginationSettings": {
53
58
  "type": "TablePaginationProps",
54
59
  "required": false,
@@ -26,6 +26,11 @@
26
26
  "required": false,
27
27
  "description": "Cell Align. Optional. Type: \"left\" | \"right\" | \"center\"."
28
28
  },
29
+ "label": {
30
+ "type": "string",
31
+ "required": false,
32
+ "description": "The column's name, shown next to the value when the table stacks rows as cards (`Table stackBelow`)."
33
+ },
29
34
  "ref": {
30
35
  "type": "Ref<HTMLTableCellElement>",
31
36
  "required": false,
@@ -41,7 +41,7 @@
41
41
  "sortable": {
42
42
  "type": "boolean",
43
43
  "required": false,
44
- "description": "Enables the interactive sort affordance with keyboard/aria support."
44
+ "description": "Enables the interactive sort affordance with keyboard/aria support.\n\nThe children sit inside the sort control, and controls among them keep\ntheir own input: Enter and Space sort only while the sort control itself\nhas focus, and a click sorts unless it lands in a nested control (input,\nbutton, link, label, anything focusable) or in a portal. Content that is not\na control, such as click-to-edit text, keeps its click from sorting by\ncalling `preventDefault()` on it. A nested control's name, or its value,\nbecomes part of the sort control's accessible name."
45
45
  },
46
46
  "sortDirection": {
47
47
  "type": "SortDirection",
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "Timeline",
3
+ "description": "Feed of events on a vertical line (<ol>): TimelineItem children, optionally grouped by TimelineGroup.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
8
+ "extends": [
9
+ "JSX.HTMLAttributes<HTMLOListElement>"
10
+ ],
11
+ "inheritedAttributes": "Also accepts standard HTML attributes for the underlying element (see extends clause in TypeScript).",
12
+ "styles": {
13
+ "base": [
14
+ "@smwb/ui-styles/less/foundation.less",
15
+ "@smwb/ui-styles/less/theme.less"
16
+ ],
17
+ "entries": [
18
+ "@smwb/ui-styles/less/components/timeline/timeline.entry.less"
19
+ ],
20
+ "dependencies": [
21
+ "@smwb/ui-styles/less/components/icon/icon.entry.less"
22
+ ],
23
+ "importExample": "@import (less) \"node_modules/@smwb/ui-styles/less/foundation.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/theme.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/timeline/timeline.entry.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/icon/icon.entry.less\";"
24
+ },
25
+ "props": {
26
+ "dense": {
27
+ "type": "boolean",
28
+ "required": false,
29
+ "description": "Tighter rows, for side panels."
30
+ },
31
+ "stickyLabels": {
32
+ "type": "boolean",
33
+ "required": false,
34
+ "description": "Keep a group's label in view while its events scroll past (in a scrolling container)."
35
+ },
36
+ "ref": {
37
+ "type": "Ref<HTMLOListElement>",
38
+ "required": false,
39
+ "description": "Ref. Optional. Type: Ref<HTMLOListElement>."
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "TimelineGroup",
3
+ "description": "A labelled run of timeline events, e.g. one day.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
8
+ "extends": [
9
+ "Omit<JSX.HTMLAttributes<HTMLLIElement>, \"title\">"
10
+ ],
11
+ "inheritedAttributes": "Also accepts standard HTML attributes for the underlying element (see extends clause in TypeScript).",
12
+ "styles": {
13
+ "base": [
14
+ "@smwb/ui-styles/less/foundation.less",
15
+ "@smwb/ui-styles/less/theme.less"
16
+ ],
17
+ "entries": [
18
+ "@smwb/ui-styles/less/components/timeline/timeline.entry.less"
19
+ ],
20
+ "dependencies": [],
21
+ "importExample": "@import (less) \"node_modules/@smwb/ui-styles/less/foundation.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/theme.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/timeline/timeline.entry.less\";"
22
+ },
23
+ "props": {
24
+ "label": {
25
+ "type": "JSX.Element",
26
+ "required": true,
27
+ "description": "What groups the events — a day, a week, a stage."
28
+ },
29
+ "ref": {
30
+ "type": "Ref<HTMLLIElement>",
31
+ "required": false,
32
+ "description": "Ref. Optional. Type: Ref<HTMLLIElement>."
33
+ }
34
+ }
35
+ }
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "TimelineItem",
3
+ "description": "One timeline event: a toned mark (icon or dot), title and meta lines, a time, and content below.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
8
+ "extends": [
9
+ "Omit<JSX.HTMLAttributes<HTMLLIElement>, \"title\">"
10
+ ],
11
+ "inheritedAttributes": "Also accepts standard HTML attributes for the underlying element (see extends clause in TypeScript).",
12
+ "styles": {
13
+ "base": [
14
+ "@smwb/ui-styles/less/foundation.less",
15
+ "@smwb/ui-styles/less/theme.less"
16
+ ],
17
+ "entries": [
18
+ "@smwb/ui-styles/less/components/timeline/timeline.entry.less"
19
+ ],
20
+ "dependencies": [],
21
+ "importExample": "@import (less) \"node_modules/@smwb/ui-styles/less/foundation.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/theme.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/timeline/timeline.entry.less\";"
22
+ },
23
+ "props": {
24
+ "title": {
25
+ "type": "JSX.Element",
26
+ "required": true,
27
+ "description": "The event itself: a line of text, usually a link."
28
+ },
29
+ "meta": {
30
+ "type": "JSX.Element",
31
+ "required": false,
32
+ "description": "A second line: who, what kind, where."
33
+ },
34
+ "time": {
35
+ "type": "JSX.Element",
36
+ "required": false,
37
+ "description": "When: a time or a date, at the end of the row."
38
+ },
39
+ "icon": {
40
+ "type": "string | JSX.Element",
41
+ "required": false,
42
+ "description": "The event's mark on the line: a Material Symbols name or an element. A dot without it."
43
+ },
44
+ "tone": {
45
+ "type": "TimelineTone",
46
+ "required": false,
47
+ "description": "Colour of the mark."
48
+ },
49
+ "ref": {
50
+ "type": "Ref<HTMLLIElement>",
51
+ "required": false,
52
+ "description": "Ref. Optional. Type: Ref<HTMLLIElement>."
53
+ }
54
+ }
55
+ }
@@ -46,6 +46,16 @@
46
46
  "required": false,
47
47
  "description": "Truncate with an ellipsis on a single line."
48
48
  },
49
+ "lines": {
50
+ "type": "number",
51
+ "required": false,
52
+ "description": "Truncate with an ellipsis after this many lines."
53
+ },
54
+ "tabularNums": {
55
+ "type": "boolean",
56
+ "required": false,
57
+ "description": "Digits of equal width (`tabular-nums`), so figures line up in KPIs and tables."
58
+ },
49
59
  "component": {
50
60
  "type": "string",
51
61
  "required": false,
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "EmptyState",
3
+ "description": "What a list, table or panel shows when it has nothing: an icon, a title, the message (children) and actions; a centred block or an inline muted line, medium or small.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
8
+ "extends": [
9
+ "Omit<JSX.HTMLAttributes<HTMLDivElement>, \"title\">"
10
+ ],
11
+ "inheritedAttributes": "Also accepts standard HTML attributes for the underlying element (see extends clause in TypeScript).",
12
+ "styles": {
13
+ "base": [
14
+ "@smwb/ui-styles/less/foundation.less",
15
+ "@smwb/ui-styles/less/theme.less"
16
+ ],
17
+ "entries": [
18
+ "@smwb/ui-styles/less/components/emptyState/emptyState.entry.less"
19
+ ],
20
+ "dependencies": [
21
+ "@smwb/ui-styles/less/components/icon/icon.entry.less"
22
+ ],
23
+ "importExample": "@import (less) \"node_modules/@smwb/ui-styles/less/foundation.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/theme.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/emptyState/emptyState.entry.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/icon/icon.entry.less\";"
24
+ },
25
+ "props": {
26
+ "title": {
27
+ "type": "JSX.Element",
28
+ "required": false,
29
+ "description": "What is empty, e.g. \"No works yet\"."
30
+ },
31
+ "icon": {
32
+ "type": "JSX.Element | string",
33
+ "required": false,
34
+ "description": "An icon name, or an icon element. Decorative: the title and the message say it all."
35
+ },
36
+ "actions": {
37
+ "type": "JSX.Element",
38
+ "required": false,
39
+ "description": "What the reader can do about it: buttons or links."
40
+ },
41
+ "variant": {
42
+ "type": "\"block\" | \"inline\"",
43
+ "required": false,
44
+ "description": "`block` (default): centred, for an empty page, panel or card.\n`inline`: a muted line of text, for a list, a table or a column that came\nout empty; an action follows the last word."
45
+ },
46
+ "size": {
47
+ "type": "\"small\" | \"medium\"",
48
+ "required": false,
49
+ "description": "`small`: tighter, for a narrow column or a card."
50
+ },
51
+ "ref": {
52
+ "type": "Ref<HTMLDivElement>",
53
+ "required": false,
54
+ "description": "Ref. Optional. Type: Ref<HTMLDivElement>."
55
+ }
56
+ }
57
+ }
@@ -20,7 +20,7 @@
20
20
  "progressValue": {
21
21
  "type": "number",
22
22
  "required": false,
23
- "description": "Progress Value. Optional. Type: number."
23
+ "description": "Percent, 0–100."
24
24
  }
25
25
  }
26
26
  }
@@ -37,6 +37,11 @@
37
37
  "required": false,
38
38
  "description": "Progress Value. Optional. Type: number."
39
39
  },
40
+ "max": {
41
+ "type": "number",
42
+ "required": false,
43
+ "description": "Upper bound of `progressValue` (100 by default): with `max={14}`, `progressValue={3}` is 3 of 14."
44
+ },
40
45
  "color": {
41
46
  "type": "ProgressColor",
42
47
  "required": false,
@@ -47,6 +52,21 @@
47
52
  "required": false,
48
53
  "description": "Circular size preset."
49
54
  },
55
+ "fullWidth": {
56
+ "type": "boolean",
57
+ "required": false,
58
+ "description": "Linear: fill the container's width instead of the fixed 240px track."
59
+ },
60
+ "width": {
61
+ "type": "number | string",
62
+ "required": false,
63
+ "description": "Linear: the width, in px or any CSS length."
64
+ },
65
+ "valueLabel": {
66
+ "type": "boolean | ((value: number, max: number) => JSX.Element)",
67
+ "required": false,
68
+ "description": "Linear, determinate: the value as text beside the bar. `true` shows a\npercentage — or \"3 / 14\" with a custom `max`; a function formats it, e.g.\n`(value, max) => <>{value} of {max}</>`."
69
+ },
50
70
  "aria-label": {
51
71
  "type": "string",
52
72
  "required": false,
@@ -119,6 +119,11 @@
119
119
  "required": false,
120
120
  "description": "Visual style variant."
121
121
  },
122
+ "size": {
123
+ "type": "\"small\" | \"medium\" | \"large\"",
124
+ "required": false,
125
+ "description": "Height of the field, as for TextField: `small` (40px, for toolbars), `medium` (default) or `large`."
126
+ },
122
127
  "fullWidth": {
123
128
  "type": "boolean",
124
129
  "required": false,
@@ -0,0 +1,68 @@
1
+ {
2
+ "name": "SectionHeader",
3
+ "description": "A section's heading row: title (h2–h6), a count, a '?' help hint (hover and keyboard focus), actions at the end, an optional subtitle.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
8
+ "extends": [
9
+ "Omit<JSX.HTMLAttributes<HTMLElement>, \"title\">"
10
+ ],
11
+ "inheritedAttributes": "Also accepts standard HTML attributes for the underlying element (see extends clause in TypeScript).",
12
+ "styles": {
13
+ "base": [
14
+ "@smwb/ui-styles/less/foundation.less",
15
+ "@smwb/ui-styles/less/theme.less"
16
+ ],
17
+ "entries": [
18
+ "@smwb/ui-styles/less/components/sectionHeader/sectionHeader.entry.less"
19
+ ],
20
+ "dependencies": [
21
+ "@smwb/ui-styles/less/components/icon/icon.entry.less",
22
+ "@smwb/ui-styles/less/components/tooltip/tooltip.entry.less"
23
+ ],
24
+ "importExample": "@import (less) \"node_modules/@smwb/ui-styles/less/foundation.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/theme.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/sectionHeader/sectionHeader.entry.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/icon/icon.entry.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/tooltip/tooltip.entry.less\";"
25
+ },
26
+ "props": {
27
+ "title": {
28
+ "type": "JSX.Element",
29
+ "required": true,
30
+ "description": "The section's name."
31
+ },
32
+ "level": {
33
+ "type": "2 | 3 | 4 | 5 | 6",
34
+ "required": false,
35
+ "description": "Heading level of the title: 2 by default."
36
+ },
37
+ "count": {
38
+ "type": "number | string | null",
39
+ "required": false,
40
+ "description": "How many items the section holds, beside the title. Nothing is shown for null."
41
+ },
42
+ "help": {
43
+ "type": "string",
44
+ "required": false,
45
+ "description": "How to read the section, behind a \"?\" icon: shown on hover and on keyboard\nfocus, and the icon's accessible name. Text only — the tooltip renders in\nthe browser."
46
+ },
47
+ "helpLabel": {
48
+ "type": "string",
49
+ "required": false,
50
+ "description": "The \"?\" icon's accessible name, e.g. \"Explanation: …\"; the help text by default."
51
+ },
52
+ "titleId": {
53
+ "type": "string",
54
+ "required": false,
55
+ "description": "Id of the heading, for anchors and aria-labelledby."
56
+ },
57
+ "subtitle": {
58
+ "type": "JSX.Element",
59
+ "required": false,
60
+ "description": "A line under the title."
61
+ },
62
+ "ref": {
63
+ "type": "Ref<HTMLElement>",
64
+ "required": false,
65
+ "description": "Ref. Optional. Type: Ref<HTMLElement>."
66
+ }
67
+ }
68
+ }
@@ -34,14 +34,14 @@
34
34
  "description": "Index of the active (current) step."
35
35
  },
36
36
  "orientation": {
37
- "type": "\"horizontal\" | \"vertical\"",
37
+ "type": "StepperOrientation",
38
38
  "required": false,
39
39
  "description": "Layout orientation."
40
40
  },
41
41
  "alternativeLabel": {
42
42
  "type": "boolean",
43
43
  "required": false,
44
- "description": "Place the label under the icon (horizontal only)."
44
+ "description": "Place the label under the icon (in a row: horizontal, or auto while wide)."
45
45
  },
46
46
  "onStepClick": {
47
47
  "type": "(index: number) => void",
@@ -54,6 +54,11 @@
54
54
  "required": false,
55
55
  "description": "Tag. Optional. Type: string."
56
56
  },
57
+ "href": {
58
+ "type": "string",
59
+ "required": false,
60
+ "description": "With `tag=\"a\"`: where the link goes, so the tab stays a real link."
61
+ },
57
62
  "disabled": {
58
63
  "type": "boolean",
59
64
  "required": false,
@@ -14,10 +14,11 @@
14
14
  "@smwb/ui-styles/less/components/tabs/tabs.entry.less"
15
15
  ],
16
16
  "dependencies": [
17
+ "@smwb/ui-styles/less/components/icon/icon.entry.less",
17
18
  "@smwb/ui-styles/less/components/ripple/ripple.entry.less",
18
19
  "@smwb/ui-styles/less/components/tabs/tab/tab.entry.less"
19
20
  ],
20
- "importExample": "@import (less) \"node_modules/@smwb/ui-styles/less/foundation.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/theme.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/tabs/tabs.entry.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/ripple/ripple.entry.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/tabs/tab/tab.entry.less\";"
21
+ "importExample": "@import (less) \"node_modules/@smwb/ui-styles/less/foundation.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/theme.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/tabs/tabs.entry.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/icon/icon.entry.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/ripple/ripple.entry.less\";\n@import (less) \"node_modules/@smwb/ui-styles/less/components/tabs/tab/tab.entry.less\";"
21
22
  },
22
23
  "props": {
23
24
  "value": {
@@ -38,7 +39,27 @@
38
39
  "scrollable": {
39
40
  "type": "boolean",
40
41
  "required": false,
41
- "description": "Scrollable. Optional. Type: boolean."
42
+ "description": "Let the tab row scroll sideways instead of clipping it. The edge beyond which\nmore tabs are hidden fades out."
43
+ },
44
+ "scrollButtons": {
45
+ "type": "boolean",
46
+ "required": false,
47
+ "description": "With `scrollable`: buttons at both ends that scroll the row while it overflows."
48
+ },
49
+ "dense": {
50
+ "type": "boolean",
51
+ "required": false,
52
+ "description": "Compact tabs: labels as written (no capitals, no letter spacing) and less padding."
53
+ },
54
+ "scrollBackAriaLabel": {
55
+ "type": "string",
56
+ "required": false,
57
+ "description": "Accessible label of the button that scrolls back."
58
+ },
59
+ "scrollForwardAriaLabel": {
60
+ "type": "string",
61
+ "required": false,
62
+ "description": "Accessible label of the button that scrolls forward."
42
63
  },
43
64
  "class": {
44
65
  "type": "string",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smwb/ui-mcp-solid",
3
- "version": "0.11.2",
3
+ "version": "0.12.0",
4
4
  "description": "Model Context Protocol server exposing the @smwb/ui-solid (SolidJS) component catalog and customization guide.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -28,8 +28,8 @@
28
28
  "zod": "^4.4.3"
29
29
  },
30
30
  "devDependencies": {
31
- "@smwb/ui-solid": "^0.11.2",
32
- "@smwb/ui-styles": "^1.4.3",
31
+ "@smwb/ui-solid": "^0.12.0",
32
+ "@smwb/ui-styles": "^1.5.0",
33
33
  "glob": "^13.0.6",
34
34
  "typescript": "^6.0.3",
35
35
  "vitest": "^2.1.9"