@mindfiredigital/ignix-lite-mcp 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +108 -0
- package/dist/server.js +187 -1954
- package/dist/server.js.map +1 -1
- package/dist/utils/check-api.js +2 -0
- package/dist/utils/check-api.js.map +1 -1
- package/package.json +14 -6
- package/.turbo/turbo-build.log +0 -25
- package/CHANGELOG.md +0 -7
- package/dist/manifests/accordion.json +0 -61
- package/dist/manifests/alert.json +0 -69
- package/dist/manifests/avatar.json +0 -75
- package/dist/manifests/badge.json +0 -74
- package/dist/manifests/breadcrumb.json +0 -87
- package/dist/manifests/button.json +0 -85
- package/dist/manifests/card.json +0 -91
- package/dist/manifests/checkbox.json +0 -122
- package/dist/manifests/codeblock.json +0 -63
- package/dist/manifests/combobox.json +0 -33
- package/dist/manifests/dialog.json +0 -64
- package/dist/manifests/divider.json +0 -47
- package/dist/manifests/dropdown.json +0 -105
- package/dist/manifests/form.json +0 -81
- package/dist/manifests/grid.json +0 -143
- package/dist/manifests/input.json +0 -99
- package/dist/manifests/meter.json +0 -103
- package/dist/manifests/navigation.json +0 -70
- package/dist/manifests/progress.json +0 -88
- package/dist/manifests/radio.json +0 -121
- package/dist/manifests/select.json +0 -109
- package/dist/manifests/skeleton.json +0 -101
- package/dist/manifests/tab.json +0 -88
- package/dist/manifests/table.json +0 -92
- package/dist/manifests/textarea.json +0 -117
- package/dist/manifests/toast.json +0 -157
- package/dist/manifests/tooltip.json +0 -115
- package/dist/vector-index.json +0 -14015
- package/src/context/api-context.ts +0 -14
- package/src/global.d.ts +0 -15
- package/src/manifests/accordion.json +0 -61
- package/src/manifests/alert.json +0 -69
- package/src/manifests/avatar.json +0 -75
- package/src/manifests/badge.json +0 -74
- package/src/manifests/breadcrumb.json +0 -87
- package/src/manifests/button.json +0 -85
- package/src/manifests/card.json +0 -91
- package/src/manifests/checkbox.json +0 -122
- package/src/manifests/codeblock.json +0 -63
- package/src/manifests/combobox.json +0 -33
- package/src/manifests/dialog.json +0 -64
- package/src/manifests/divider.json +0 -47
- package/src/manifests/dropdown.json +0 -105
- package/src/manifests/form.json +0 -81
- package/src/manifests/grid.json +0 -143
- package/src/manifests/index.ts +0 -45
- package/src/manifests/input.json +0 -99
- package/src/manifests/meter.json +0 -103
- package/src/manifests/navigation.json +0 -70
- package/src/manifests/progress.json +0 -88
- package/src/manifests/radio.json +0 -121
- package/src/manifests/select.json +0 -109
- package/src/manifests/skeleton.json +0 -101
- package/src/manifests/tab.json +0 -88
- package/src/manifests/table.json +0 -92
- package/src/manifests/textarea.json +0 -117
- package/src/manifests/toast.json +0 -157
- package/src/manifests/tooltip.json +0 -115
- package/src/server.ts +0 -201
- package/src/tools/build-index.ts +0 -55
- package/src/tools/check-a11y.ts +0 -106
- package/src/tools/embedder.ts +0 -18
- package/src/tools/generate-theme.ts +0 -42
- package/src/tools/get-emmet.ts +0 -64
- package/src/tools/get-manifests.ts +0 -55
- package/src/tools/intent-engine.ts +0 -197
- package/src/tools/list-components.ts +0 -20
- package/src/tools/search-index.ts +0 -66
- package/src/tools/theme-palette.ts +0 -65
- package/src/tools/theme-tokens.ts +0 -176
- package/src/tools/validator.ts +0 -367
- package/src/types.ts +0 -63
- package/src/utils/a11y-rules.ts +0 -873
- package/src/utils/a11y-types.ts +0 -15
- package/src/utils/check-api.ts +0 -13
- package/src/utils/cosine.ts +0 -15
- package/src/utils/emmet-helpers.ts +0 -171
- package/src/utils/intent-helpers.ts +0 -66
- package/src/utils/intent-parser.ts +0 -186
- package/src/utils/tokenizer.ts +0 -7
- package/tsconfig.json +0 -14
- package/tsup.config.ts +0 -13
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"component": "dialog",
|
|
3
|
-
"version": "2.0",
|
|
4
|
-
"description": "Modal dialog used for confirmations, warnings, and information display.",
|
|
5
|
-
|
|
6
|
-
"element": "dialog",
|
|
7
|
-
|
|
8
|
-
"emmet": "dialog#id[data-intent=?]>(h2{Title}+p{Message}+button{Cancel}+button{Confirm})",
|
|
9
|
-
|
|
10
|
-
"props": {
|
|
11
|
-
"id": {
|
|
12
|
-
"type": "string",
|
|
13
|
-
"native": true,
|
|
14
|
-
"agent_hint": "Unique identifier used to control dialog"
|
|
15
|
-
},
|
|
16
|
-
|
|
17
|
-
"data-intent": {
|
|
18
|
-
"type": "enum",
|
|
19
|
-
"values": ["danger", "warning", "info"],
|
|
20
|
-
"default": "info",
|
|
21
|
-
"native": false,
|
|
22
|
-
"agent_hint": "Controls dialog style (danger for destructive, warning for caution)"
|
|
23
|
-
}
|
|
24
|
-
},
|
|
25
|
-
|
|
26
|
-
"states": [],
|
|
27
|
-
|
|
28
|
-
"required_props": ["id"],
|
|
29
|
-
|
|
30
|
-
"required_slots": [],
|
|
31
|
-
|
|
32
|
-
"forbidden_props": ["class", "variant", "color", "style"],
|
|
33
|
-
|
|
34
|
-
"do": [
|
|
35
|
-
"Always include a heading (h2)",
|
|
36
|
-
"Include descriptive text using p tags",
|
|
37
|
-
"Provide at least one action button",
|
|
38
|
-
"Use data-intent for styling"
|
|
39
|
-
],
|
|
40
|
-
|
|
41
|
-
"dont": [
|
|
42
|
-
"Do not use class attribute",
|
|
43
|
-
"Do not attach JS handlers like onclick",
|
|
44
|
-
"Do not leave dialog empty"
|
|
45
|
-
],
|
|
46
|
-
|
|
47
|
-
"examples": [
|
|
48
|
-
{
|
|
49
|
-
"label": "Confirm dialog",
|
|
50
|
-
"emmet": "dialog#confirm[data-intent=danger]>(h2{Confirm}+p{Are you sure?}+button{Cancel}+button{Delete})",
|
|
51
|
-
"html": "<dialog id=\"confirm\" data-intent=\"danger\"><h2>Confirm</h2><p>Are you sure?</p><button>Cancel</button><button>Delete</button></dialog>"
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
"label": "Warning dialog",
|
|
55
|
-
"emmet": "dialog#warn[data-intent=warning]>(h2{Warning}+p{Unsaved changes}+button{Close})",
|
|
56
|
-
"html": "<dialog id=\"warn\" data-intent=\"warning\"><h2>Warning</h2><p>Unsaved changes</p><button>Close</button></dialog>"
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
"label": "Info dialog",
|
|
60
|
-
"emmet": "dialog#info[data-intent=info]>(h2{Info}+p{Session expiring}+button{Close})",
|
|
61
|
-
"html": "<dialog id=\"info\" data-intent=\"info\"><h2>Info</h2><p>Session expiring</p><button>Close</button></dialog>"
|
|
62
|
-
}
|
|
63
|
-
]
|
|
64
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"component": "divider",
|
|
3
|
-
"version": "2.0",
|
|
4
|
-
"description": "Visual separator using semantic hr element with orientation support.",
|
|
5
|
-
|
|
6
|
-
"element": "hr",
|
|
7
|
-
|
|
8
|
-
"emmet": "hr",
|
|
9
|
-
|
|
10
|
-
"props": {
|
|
11
|
-
"data-orientation": {
|
|
12
|
-
"type": "string",
|
|
13
|
-
|
|
14
|
-
"values": ["horizontal", "vertical"],
|
|
15
|
-
|
|
16
|
-
"default": "horizontal",
|
|
17
|
-
|
|
18
|
-
"agent_hint": "Controls divider direction."
|
|
19
|
-
}
|
|
20
|
-
},
|
|
21
|
-
|
|
22
|
-
"states": [],
|
|
23
|
-
|
|
24
|
-
"forbidden_props": ["class"],
|
|
25
|
-
|
|
26
|
-
"required_props": [],
|
|
27
|
-
|
|
28
|
-
"required_slots": [],
|
|
29
|
-
|
|
30
|
-
"do": ["Use hr element", "Use data-orientation for vertical mode"],
|
|
31
|
-
|
|
32
|
-
"dont": ["Do not use div wrappers", "Do not use class attribute"],
|
|
33
|
-
|
|
34
|
-
"examples": [
|
|
35
|
-
{
|
|
36
|
-
"label": "Horizontal",
|
|
37
|
-
"emmet": "hr",
|
|
38
|
-
"html": "<hr>"
|
|
39
|
-
},
|
|
40
|
-
|
|
41
|
-
{
|
|
42
|
-
"label": "Vertical",
|
|
43
|
-
"emmet": "hr[data-orientation=vertical]",
|
|
44
|
-
"html": "<hr data-orientation=\"vertical\">"
|
|
45
|
-
}
|
|
46
|
-
]
|
|
47
|
-
}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"component": "dropdown",
|
|
3
|
-
"version": "2.0",
|
|
4
|
-
"description": "Accessible dropdown component using ix-dropdown custom element with trigger and menu slots, keyboard navigation and semantic intents.",
|
|
5
|
-
|
|
6
|
-
"element": "ix-dropdown",
|
|
7
|
-
|
|
8
|
-
"emmet": "ix-dropdown>button[slot=trigger]+ul[slot=menu]",
|
|
9
|
-
|
|
10
|
-
"props": {
|
|
11
|
-
"data-intent": {
|
|
12
|
-
"type": "enum",
|
|
13
|
-
"values": [
|
|
14
|
-
"primary",
|
|
15
|
-
"success",
|
|
16
|
-
"warning",
|
|
17
|
-
"danger",
|
|
18
|
-
"ghost",
|
|
19
|
-
"gradient",
|
|
20
|
-
"neutral"
|
|
21
|
-
],
|
|
22
|
-
"default": "neutral",
|
|
23
|
-
"native": false,
|
|
24
|
-
"agent_hint": "Applies dropdown styling."
|
|
25
|
-
},
|
|
26
|
-
|
|
27
|
-
"slot": {
|
|
28
|
-
"type": "enum",
|
|
29
|
-
"values": ["trigger", "menu"],
|
|
30
|
-
"native": true,
|
|
31
|
-
"agent_hint": "Defines dropdown trigger and menu."
|
|
32
|
-
},
|
|
33
|
-
|
|
34
|
-
"aria-haspopup": {
|
|
35
|
-
"type": "string",
|
|
36
|
-
"values": ["menu"],
|
|
37
|
-
"default": "menu",
|
|
38
|
-
"native": true,
|
|
39
|
-
"agent_hint": "Indicates menu popup."
|
|
40
|
-
},
|
|
41
|
-
|
|
42
|
-
"aria-expanded": {
|
|
43
|
-
"type": "boolean",
|
|
44
|
-
"default": false,
|
|
45
|
-
"native": true,
|
|
46
|
-
"agent_hint": "Open state of dropdown."
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
|
|
50
|
-
"states": ["closed", "open", "focused"],
|
|
51
|
-
|
|
52
|
-
"forbidden_props": ["variant", "theme", "size", "class"],
|
|
53
|
-
|
|
54
|
-
"required_props": [],
|
|
55
|
-
|
|
56
|
-
"required_slots": ["trigger", "menu"],
|
|
57
|
-
|
|
58
|
-
"methods": ["open()", "close()", "toggle()"],
|
|
59
|
-
|
|
60
|
-
"do": [
|
|
61
|
-
"Provide trigger slot",
|
|
62
|
-
"Provide menu slot",
|
|
63
|
-
"Use button items inside menu",
|
|
64
|
-
"Keep menu inside ul"
|
|
65
|
-
],
|
|
66
|
-
|
|
67
|
-
"dont": [
|
|
68
|
-
"Do not omit trigger",
|
|
69
|
-
"Do not omit menu",
|
|
70
|
-
"Do not use div instead of menu list",
|
|
71
|
-
"Do not place plain text inside menu"
|
|
72
|
-
],
|
|
73
|
-
|
|
74
|
-
"examples": [
|
|
75
|
-
{
|
|
76
|
-
"label": "Default dropdown",
|
|
77
|
-
"emmet": "ix-dropdown",
|
|
78
|
-
"html": "<ix-dropdown><button slot=\"trigger\">Options ▾</button><ul slot=\"menu\"><li><button>Profile</button></li><li><button>Settings</button></li></ul></ix-dropdown>"
|
|
79
|
-
},
|
|
80
|
-
|
|
81
|
-
{
|
|
82
|
-
"label": "Primary dropdown",
|
|
83
|
-
"emmet": "ix-dropdown[data-intent=primary]",
|
|
84
|
-
"html": "<ix-dropdown data-intent=\"primary\"><button slot=\"trigger\">Primary ▾</button><ul slot=\"menu\"><li><button>Dashboard</button></li><li><button>Profile</button></li></ul></ix-dropdown>"
|
|
85
|
-
},
|
|
86
|
-
|
|
87
|
-
{
|
|
88
|
-
"label": "Ghost dropdown",
|
|
89
|
-
"emmet": "ix-dropdown[data-intent=ghost]",
|
|
90
|
-
"html": "<ix-dropdown data-intent=\"ghost\"><button slot=\"trigger\">Ghost ▾</button><ul slot=\"menu\"><li><button>Item 1</button></li><li><button>Item 2</button></li></ul></ix-dropdown>"
|
|
91
|
-
},
|
|
92
|
-
|
|
93
|
-
{
|
|
94
|
-
"label": "Gradient dropdown",
|
|
95
|
-
"emmet": "ix-dropdown[data-intent=gradient]",
|
|
96
|
-
"html": "<ix-dropdown data-intent=\"gradient\"><button slot=\"trigger\">Gradient ▾</button><ul slot=\"menu\"><li><button>Modern</button></li><li><button>Premium</button></li></ul></ix-dropdown>"
|
|
97
|
-
},
|
|
98
|
-
|
|
99
|
-
{
|
|
100
|
-
"label": "Workspace menu",
|
|
101
|
-
"emmet": "ix-dropdown[data-intent=primary]",
|
|
102
|
-
"html": "<ix-dropdown data-intent=\"primary\"><button slot=\"trigger\">Workspace ▾</button><ul slot=\"menu\"><li><button>Settings</button></li><li><button>Invite Members</button></li><li><button>Billing</button></li><li><button>Logout</button></li></ul></ix-dropdown>"
|
|
103
|
-
}
|
|
104
|
-
]
|
|
105
|
-
}
|
package/dist/manifests/form.json
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"component": "form",
|
|
3
|
-
"version": "2.0",
|
|
4
|
-
"description": "Form container used to collect user input. Contains labels, inputs, and submit button.",
|
|
5
|
-
|
|
6
|
-
"element": "form",
|
|
7
|
-
|
|
8
|
-
"emmet": "form#id>(label>{Label}+input[type=? name=?])+button[type=submit]{Submit}",
|
|
9
|
-
|
|
10
|
-
"props": {
|
|
11
|
-
"id": {
|
|
12
|
-
"type": "string",
|
|
13
|
-
"native": true,
|
|
14
|
-
"agent_hint": "Unique identifier for the form"
|
|
15
|
-
},
|
|
16
|
-
|
|
17
|
-
"action": {
|
|
18
|
-
"type": "string",
|
|
19
|
-
"native": true,
|
|
20
|
-
"agent_hint": "URL where form is submitted"
|
|
21
|
-
},
|
|
22
|
-
|
|
23
|
-
"method": {
|
|
24
|
-
"type": "enum",
|
|
25
|
-
"values": ["get", "post"],
|
|
26
|
-
"default": "post",
|
|
27
|
-
"native": true,
|
|
28
|
-
"agent_hint": "HTTP method for submission"
|
|
29
|
-
},
|
|
30
|
-
|
|
31
|
-
"aria-busy": {
|
|
32
|
-
"type": "boolean",
|
|
33
|
-
"native": true,
|
|
34
|
-
"agent_hint": "Indicates loading/submitting state"
|
|
35
|
-
},
|
|
36
|
-
|
|
37
|
-
"data-loading": {
|
|
38
|
-
"type": "boolean",
|
|
39
|
-
"native": false,
|
|
40
|
-
"agent_hint": "Triggers loading UI styles"
|
|
41
|
-
}
|
|
42
|
-
},
|
|
43
|
-
|
|
44
|
-
"states": ["aria-busy", "data-loading"],
|
|
45
|
-
|
|
46
|
-
"required_props": [],
|
|
47
|
-
|
|
48
|
-
"required_slots": [],
|
|
49
|
-
|
|
50
|
-
"forbidden_props": ["class", "variant", "color", "style"],
|
|
51
|
-
|
|
52
|
-
"do": [
|
|
53
|
-
"Always include a submit button inside form",
|
|
54
|
-
"Wrap inputs inside label elements",
|
|
55
|
-
"Use aria-busy for loading state"
|
|
56
|
-
],
|
|
57
|
-
|
|
58
|
-
"dont": [
|
|
59
|
-
"Do not use class attribute",
|
|
60
|
-
"Do not attach JS handlers like onsubmit",
|
|
61
|
-
"Do not leave form without submit button"
|
|
62
|
-
],
|
|
63
|
-
|
|
64
|
-
"examples": [
|
|
65
|
-
{
|
|
66
|
-
"label": "Basic form",
|
|
67
|
-
"emmet": "form#signup>(label>{Email}+input[type=email name=email])+button[type=submit]{Submit}",
|
|
68
|
-
"html": "<form id=\"signup\"><label>Email <input type=\"email\" name=\"email\" /></label><button type=\"submit\">Submit</button></form>"
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
"label": "Form loading",
|
|
72
|
-
"emmet": "form[aria-busy=true data-loading]>(label>{Email}+input[type=email])+button{Submitting...}",
|
|
73
|
-
"html": "<form aria-busy=\"true\" data-loading><label>Email <input type=\"email\" /></label><button>Submitting...</button></form>"
|
|
74
|
-
},
|
|
75
|
-
{
|
|
76
|
-
"label": "Validation state",
|
|
77
|
-
"emmet": "form>(label[data-state=error]>(input[type=email aria-invalid=true])+small{Error})",
|
|
78
|
-
"html": "<form><label data-state=\"error\"><input type=\"email\" aria-invalid=\"true\" /><small>Error</small></label></form>"
|
|
79
|
-
}
|
|
80
|
-
]
|
|
81
|
-
}
|
package/dist/manifests/grid.json
DELETED
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"component": "grid",
|
|
3
|
-
"version": "2.0",
|
|
4
|
-
"description": "Responsive semantic grid layout using section container with column spans, gaps, alignment and auto layouts.",
|
|
5
|
-
|
|
6
|
-
"element": "section",
|
|
7
|
-
|
|
8
|
-
"emmet": "section[data-grid=3]>article*3",
|
|
9
|
-
|
|
10
|
-
"props": {
|
|
11
|
-
"data-grid": {
|
|
12
|
-
"type": "string",
|
|
13
|
-
|
|
14
|
-
"values": ["1", "2", "3", "4", "5", "6", "auto", "fill"],
|
|
15
|
-
|
|
16
|
-
"default": "3",
|
|
17
|
-
|
|
18
|
-
"agent_hint": "Controls column count or auto layout."
|
|
19
|
-
},
|
|
20
|
-
|
|
21
|
-
"data-gap": {
|
|
22
|
-
"type": "string",
|
|
23
|
-
|
|
24
|
-
"values": ["xs", "sm", "md", "lg", "xl"],
|
|
25
|
-
|
|
26
|
-
"default": "md",
|
|
27
|
-
|
|
28
|
-
"agent_hint": "Controls spacing between items."
|
|
29
|
-
},
|
|
30
|
-
|
|
31
|
-
"data-align": {
|
|
32
|
-
"type": "string",
|
|
33
|
-
|
|
34
|
-
"values": ["start", "center", "end", "stretch", "baseline"],
|
|
35
|
-
|
|
36
|
-
"agent_hint": "Controls vertical alignment."
|
|
37
|
-
},
|
|
38
|
-
|
|
39
|
-
"data-justify": {
|
|
40
|
-
"type": "string",
|
|
41
|
-
|
|
42
|
-
"values": ["start", "center", "end", "stretch"],
|
|
43
|
-
|
|
44
|
-
"agent_hint": "Controls horizontal alignment."
|
|
45
|
-
},
|
|
46
|
-
|
|
47
|
-
"data-dense": {
|
|
48
|
-
"type": "boolean",
|
|
49
|
-
|
|
50
|
-
"agent_hint": "Enables dense auto flow packing."
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
|
-
|
|
54
|
-
"states": [],
|
|
55
|
-
|
|
56
|
-
"slots": {
|
|
57
|
-
"item": {
|
|
58
|
-
"required": false,
|
|
59
|
-
|
|
60
|
-
"element": ["article", "section", "span", "p", "button"],
|
|
61
|
-
|
|
62
|
-
"agent_hint": "Grid content item."
|
|
63
|
-
}
|
|
64
|
-
},
|
|
65
|
-
|
|
66
|
-
"child_props": {
|
|
67
|
-
"data-col": {
|
|
68
|
-
"type": "string",
|
|
69
|
-
|
|
70
|
-
"values": ["1", "2", "3", "4", "5", "6", "full"],
|
|
71
|
-
|
|
72
|
-
"agent_hint": "Column span for item."
|
|
73
|
-
},
|
|
74
|
-
|
|
75
|
-
"data-row": {
|
|
76
|
-
"type": "string",
|
|
77
|
-
|
|
78
|
-
"values": ["2", "3"],
|
|
79
|
-
|
|
80
|
-
"agent_hint": "Row span for item."
|
|
81
|
-
}
|
|
82
|
-
},
|
|
83
|
-
|
|
84
|
-
"forbidden_props": ["class"],
|
|
85
|
-
|
|
86
|
-
"required_props": ["data-grid"],
|
|
87
|
-
|
|
88
|
-
"required_slots": [],
|
|
89
|
-
|
|
90
|
-
"required_wrapper": null,
|
|
91
|
-
|
|
92
|
-
"do": [
|
|
93
|
-
"Use section as grid container",
|
|
94
|
-
"Use semantic children",
|
|
95
|
-
"Use data-col for spans",
|
|
96
|
-
"Use data-row for row spans",
|
|
97
|
-
"Use data-gap for spacing"
|
|
98
|
-
],
|
|
99
|
-
|
|
100
|
-
"dont": [
|
|
101
|
-
"Do not use div wrappers",
|
|
102
|
-
"Do not use class attribute",
|
|
103
|
-
"Do not replace grid config with inline styles"
|
|
104
|
-
],
|
|
105
|
-
|
|
106
|
-
"examples": [
|
|
107
|
-
{
|
|
108
|
-
"label": "Two columns",
|
|
109
|
-
"emmet": "section[data-grid=2]>article*2",
|
|
110
|
-
"html": "<section data-grid=\"2\"><article>Column 1</article><article>Column 2</article></section>"
|
|
111
|
-
},
|
|
112
|
-
|
|
113
|
-
{
|
|
114
|
-
"label": "Three columns",
|
|
115
|
-
"emmet": "section[data-grid=3]>article*3",
|
|
116
|
-
"html": "<section data-grid=\"3\"><article>A</article><article>B</article><article>C</article></section>"
|
|
117
|
-
},
|
|
118
|
-
|
|
119
|
-
{
|
|
120
|
-
"label": "Auto fit",
|
|
121
|
-
"emmet": "section[data-grid=auto]>article*5",
|
|
122
|
-
"html": "<section data-grid=\"auto\"><article>1</article><article>2</article><article>3</article></section>"
|
|
123
|
-
},
|
|
124
|
-
|
|
125
|
-
{
|
|
126
|
-
"label": "Column span",
|
|
127
|
-
"emmet": "section[data-grid=4]>(article[data-col=2])+(article*4)",
|
|
128
|
-
"html": "<section data-grid=\"4\"><article data-col=\"2\">Wide</article><article>A</article><article>B</article></section>"
|
|
129
|
-
},
|
|
130
|
-
|
|
131
|
-
{
|
|
132
|
-
"label": "Full width",
|
|
133
|
-
"emmet": "section[data-grid=3]>(article*3)+(article[data-col=full])",
|
|
134
|
-
"html": "<section data-grid=\"3\"><article>1</article><article>2</article><article>3</article><article data-col=\"full\">Full</article></section>"
|
|
135
|
-
},
|
|
136
|
-
|
|
137
|
-
{
|
|
138
|
-
"label": "Dense layout",
|
|
139
|
-
"emmet": "section[data-grid=4][data-dense]>article*6",
|
|
140
|
-
"html": "<section data-grid=\"4\" data-dense><article data-col=\"2\">Wide</article><article>A</article><article>B</article></section>"
|
|
141
|
-
}
|
|
142
|
-
]
|
|
143
|
-
}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"component": "input",
|
|
3
|
-
"version": "2.0",
|
|
4
|
-
"description": "User input field. Must be wrapped inside <label> for accessibility.",
|
|
5
|
-
|
|
6
|
-
"element": "input",
|
|
7
|
-
|
|
8
|
-
"emmet": "label>{Label}+input[type=?]",
|
|
9
|
-
|
|
10
|
-
"props": {
|
|
11
|
-
"type": {
|
|
12
|
-
"type": "enum",
|
|
13
|
-
"values": [
|
|
14
|
-
"text",
|
|
15
|
-
"email",
|
|
16
|
-
"password",
|
|
17
|
-
"number",
|
|
18
|
-
"date",
|
|
19
|
-
"search",
|
|
20
|
-
"tel",
|
|
21
|
-
"url",
|
|
22
|
-
"file"
|
|
23
|
-
],
|
|
24
|
-
"default": "text",
|
|
25
|
-
"native": true,
|
|
26
|
-
"agent_hint": "Choose correct input type based on data"
|
|
27
|
-
},
|
|
28
|
-
|
|
29
|
-
"placeholder": {
|
|
30
|
-
"type": "string",
|
|
31
|
-
"native": true,
|
|
32
|
-
"agent_hint": "Short hint shown inside input"
|
|
33
|
-
},
|
|
34
|
-
|
|
35
|
-
"required": {
|
|
36
|
-
"type": "boolean",
|
|
37
|
-
"native": true,
|
|
38
|
-
"agent_hint": "Marks field as mandatory"
|
|
39
|
-
},
|
|
40
|
-
|
|
41
|
-
"disabled": {
|
|
42
|
-
"type": "boolean",
|
|
43
|
-
"native": true,
|
|
44
|
-
"agent_hint": "Disables user interaction"
|
|
45
|
-
},
|
|
46
|
-
|
|
47
|
-
"aria-invalid": {
|
|
48
|
-
"type": "boolean",
|
|
49
|
-
"native": true,
|
|
50
|
-
"agent_hint": "Set true for validation errors"
|
|
51
|
-
},
|
|
52
|
-
|
|
53
|
-
"data-intent": {
|
|
54
|
-
"type": "enum",
|
|
55
|
-
"values": ["primary", "danger", "warning", "success", "neutral"],
|
|
56
|
-
"default": "neutral",
|
|
57
|
-
"native": false,
|
|
58
|
-
"agent_hint": "Controls border color (design intent)"
|
|
59
|
-
}
|
|
60
|
-
},
|
|
61
|
-
|
|
62
|
-
"states": ["disabled", "aria-invalid"],
|
|
63
|
-
|
|
64
|
-
"required_props": ["type"],
|
|
65
|
-
|
|
66
|
-
"required_wrapper": "label",
|
|
67
|
-
|
|
68
|
-
"forbidden_props": ["variant", "color", "appearance", "size", "class"],
|
|
69
|
-
|
|
70
|
-
"do": [
|
|
71
|
-
"Always wrap input inside <label>",
|
|
72
|
-
"Use correct type (email, number, etc.)",
|
|
73
|
-
"Use aria-invalid for error state"
|
|
74
|
-
],
|
|
75
|
-
|
|
76
|
-
"dont": [
|
|
77
|
-
"Do not use class attribute",
|
|
78
|
-
"Do not use variant or color props",
|
|
79
|
-
"Do not place input outside label"
|
|
80
|
-
],
|
|
81
|
-
|
|
82
|
-
"examples": [
|
|
83
|
-
{
|
|
84
|
-
"label": "Basic input",
|
|
85
|
-
"emmet": "label>{Name}+input[type=text]",
|
|
86
|
-
"html": "<label>Name <input type=\"text\" /></label>"
|
|
87
|
-
},
|
|
88
|
-
{
|
|
89
|
-
"label": "Email required",
|
|
90
|
-
"emmet": "label>{Email}+input[type=email required]",
|
|
91
|
-
"html": "<label>Email <input type=\"email\" required /></label>"
|
|
92
|
-
},
|
|
93
|
-
{
|
|
94
|
-
"label": "Invalid state",
|
|
95
|
-
"emmet": "label>{Email}+input[type=email aria-invalid=true]",
|
|
96
|
-
"html": "<label>Email <input type=\"email\" aria-invalid=\"true\" /></label>"
|
|
97
|
-
}
|
|
98
|
-
]
|
|
99
|
-
}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"component": "meter",
|
|
3
|
-
|
|
4
|
-
"version": "2.0",
|
|
5
|
-
|
|
6
|
-
"description": "Visualizes scalar measurements within a known range using the native HTML meter element.",
|
|
7
|
-
|
|
8
|
-
"element": "meter",
|
|
9
|
-
|
|
10
|
-
"emmet": "meter[value=70 min=0 max=100]",
|
|
11
|
-
|
|
12
|
-
"props": {
|
|
13
|
-
"value": {
|
|
14
|
-
"type": "number",
|
|
15
|
-
"required": true,
|
|
16
|
-
"native": true,
|
|
17
|
-
"agent_hint": "Current measured value."
|
|
18
|
-
},
|
|
19
|
-
|
|
20
|
-
"min": {
|
|
21
|
-
"type": "number",
|
|
22
|
-
"default": 0,
|
|
23
|
-
"native": true
|
|
24
|
-
},
|
|
25
|
-
|
|
26
|
-
"max": {
|
|
27
|
-
"type": "number",
|
|
28
|
-
"default": 1,
|
|
29
|
-
"native": true
|
|
30
|
-
},
|
|
31
|
-
|
|
32
|
-
"low": {
|
|
33
|
-
"type": "number",
|
|
34
|
-
"native": true,
|
|
35
|
-
"agent_hint": "Lower threshold value."
|
|
36
|
-
},
|
|
37
|
-
|
|
38
|
-
"high": {
|
|
39
|
-
"type": "number",
|
|
40
|
-
"native": true,
|
|
41
|
-
"agent_hint": "Upper threshold value."
|
|
42
|
-
},
|
|
43
|
-
|
|
44
|
-
"optimum": {
|
|
45
|
-
"type": "number",
|
|
46
|
-
"native": true,
|
|
47
|
-
"agent_hint": "Preferred or ideal value."
|
|
48
|
-
}
|
|
49
|
-
},
|
|
50
|
-
|
|
51
|
-
"states": ["low", "high", "optimum"],
|
|
52
|
-
|
|
53
|
-
"forbidden_props": [
|
|
54
|
-
"variant",
|
|
55
|
-
"intent",
|
|
56
|
-
"color",
|
|
57
|
-
"percentage",
|
|
58
|
-
"progress",
|
|
59
|
-
"class"
|
|
60
|
-
],
|
|
61
|
-
|
|
62
|
-
"required_props": ["value"],
|
|
63
|
-
|
|
64
|
-
"required_slots": [],
|
|
65
|
-
|
|
66
|
-
"do": [
|
|
67
|
-
"Use value with min and max",
|
|
68
|
-
"Use low and high for thresholds",
|
|
69
|
-
"Use optimum for ideal value ranges"
|
|
70
|
-
],
|
|
71
|
-
|
|
72
|
-
"dont": [
|
|
73
|
-
"Do not use class attribute",
|
|
74
|
-
"Do not use progress prop",
|
|
75
|
-
"Do not use variant or intent props"
|
|
76
|
-
],
|
|
77
|
-
|
|
78
|
-
"examples": [
|
|
79
|
-
{
|
|
80
|
-
"label": "Storage usage",
|
|
81
|
-
"emmet": "meter[value=68 min=0 max=100 low=30 high=70 optimum=100]",
|
|
82
|
-
"html": "<meter value=\"68\" min=\"0\" max=\"100\" low=\"30\" high=\"70\" optimum=\"100\"></meter>"
|
|
83
|
-
},
|
|
84
|
-
|
|
85
|
-
{
|
|
86
|
-
"label": "Low state",
|
|
87
|
-
"emmet": "meter[value=20 min=0 max=100 low=30 high=70 optimum=100]",
|
|
88
|
-
"html": "<meter value=\"20\" min=\"0\" max=\"100\" low=\"30\" high=\"70\" optimum=\"100\"></meter>"
|
|
89
|
-
},
|
|
90
|
-
|
|
91
|
-
{
|
|
92
|
-
"label": "Medium state",
|
|
93
|
-
"emmet": "meter[value=50 min=0 max=100 low=30 high=70 optimum=100]",
|
|
94
|
-
"html": "<meter value=\"50\" min=\"0\" max=\"100\" low=\"30\" high=\"70\" optimum=\"100\"></meter>"
|
|
95
|
-
},
|
|
96
|
-
|
|
97
|
-
{
|
|
98
|
-
"label": "Optimal state",
|
|
99
|
-
"emmet": "meter[value=90 min=0 max=100 low=30 high=70 optimum=100]",
|
|
100
|
-
"html": "<meter value=\"90\" min=\"0\" max=\"100\" low=\"30\" high=\"70\" optimum=\"100\"></meter>"
|
|
101
|
-
}
|
|
102
|
-
]
|
|
103
|
-
}
|