@mindfiredigital/ignix-lite-mcp 1.0.0 → 1.2.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 (96) hide show
  1. package/.turbo/turbo-build.log +17 -14
  2. package/CHANGELOG.md +7 -0
  3. package/dist/manifests/accordion.json +61 -0
  4. package/dist/manifests/alert.json +69 -0
  5. package/dist/manifests/avatar.json +75 -0
  6. package/dist/manifests/badge.json +74 -0
  7. package/dist/manifests/breadcrumb.json +87 -0
  8. package/dist/manifests/button.json +85 -0
  9. package/dist/manifests/card.json +91 -0
  10. package/dist/manifests/checkbox.json +122 -0
  11. package/dist/manifests/codeblock.json +63 -0
  12. package/dist/manifests/combobox.json +33 -0
  13. package/dist/manifests/dialog.json +64 -0
  14. package/dist/manifests/divider.json +47 -0
  15. package/dist/manifests/dropdown.json +105 -0
  16. package/dist/manifests/form.json +81 -0
  17. package/dist/manifests/grid.json +143 -0
  18. package/dist/manifests/input.json +99 -0
  19. package/dist/manifests/meter.json +103 -0
  20. package/dist/manifests/navigation.json +70 -0
  21. package/dist/manifests/progress.json +88 -0
  22. package/dist/manifests/radio.json +121 -0
  23. package/dist/manifests/select.json +109 -0
  24. package/dist/manifests/skeleton.json +101 -0
  25. package/dist/manifests/tab.json +88 -0
  26. package/dist/manifests/table.json +92 -0
  27. package/dist/manifests/textarea.json +117 -0
  28. package/dist/manifests/toast.json +157 -0
  29. package/dist/manifests/tooltip.json +115 -0
  30. package/dist/server.d.ts +1 -2
  31. package/dist/server.js +2102 -1
  32. package/dist/server.js.map +1 -1
  33. package/dist/utils/check-api.d.ts +2 -0
  34. package/dist/utils/check-api.js +11 -0
  35. package/dist/utils/check-api.js.map +1 -0
  36. package/dist/vector-index.json +14015 -0
  37. package/package.json +25 -11
  38. package/src/context/api-context.ts +14 -0
  39. package/src/global.d.ts +15 -0
  40. package/src/manifests/accordion.json +61 -0
  41. package/src/manifests/alert.json +69 -0
  42. package/src/manifests/avatar.json +75 -0
  43. package/src/manifests/badge.json +74 -0
  44. package/src/manifests/breadcrumb.json +87 -0
  45. package/src/manifests/button.json +85 -0
  46. package/src/manifests/card.json +91 -0
  47. package/src/manifests/checkbox.json +122 -0
  48. package/src/manifests/codeblock.json +63 -0
  49. package/src/manifests/combobox.json +33 -0
  50. package/src/manifests/dialog.json +64 -0
  51. package/src/manifests/divider.json +47 -0
  52. package/src/manifests/dropdown.json +105 -0
  53. package/src/manifests/form.json +81 -0
  54. package/src/manifests/grid.json +143 -0
  55. package/src/manifests/index.ts +45 -0
  56. package/src/manifests/input.json +99 -0
  57. package/src/manifests/meter.json +103 -0
  58. package/src/manifests/navigation.json +70 -0
  59. package/src/manifests/progress.json +88 -0
  60. package/src/manifests/radio.json +121 -0
  61. package/src/manifests/select.json +109 -0
  62. package/src/manifests/skeleton.json +101 -0
  63. package/src/manifests/tab.json +88 -0
  64. package/src/manifests/table.json +92 -0
  65. package/src/manifests/textarea.json +117 -0
  66. package/src/manifests/toast.json +157 -0
  67. package/src/manifests/tooltip.json +115 -0
  68. package/src/server.ts +200 -2
  69. package/src/tools/build-index.ts +55 -0
  70. package/src/tools/check-a11y.ts +106 -0
  71. package/src/tools/embedder.ts +18 -0
  72. package/src/tools/generate-theme.ts +42 -0
  73. package/src/tools/get-emmet.ts +64 -0
  74. package/src/tools/get-manifests.ts +55 -0
  75. package/src/tools/intent-engine.ts +197 -0
  76. package/src/tools/list-components.ts +20 -0
  77. package/src/tools/search-index.ts +66 -0
  78. package/src/tools/theme-palette.ts +65 -0
  79. package/src/tools/theme-tokens.ts +176 -0
  80. package/src/tools/validator.ts +367 -0
  81. package/src/types.ts +63 -0
  82. package/src/utils/a11y-rules.ts +873 -0
  83. package/src/utils/a11y-types.ts +15 -0
  84. package/src/utils/check-api.ts +13 -0
  85. package/src/utils/cosine.ts +15 -0
  86. package/src/utils/emmet-helpers.ts +171 -0
  87. package/src/utils/intent-helpers.ts +66 -0
  88. package/src/utils/intent-parser.ts +186 -0
  89. package/src/utils/tokenizer.ts +7 -0
  90. package/tsconfig.json +9 -2
  91. package/tsup.config.ts +6 -3
  92. package/LICENSE +0 -21
  93. package/dist/server.cjs +0 -2
  94. package/dist/server.cjs.map +0 -1
  95. package/dist/server.d.cts +0 -3
  96. package/test/basic.test.ts +0 -8
@@ -0,0 +1,45 @@
1
+ import { readFileSync } from 'fs'
2
+ import path from 'path'
3
+ import { fileURLToPath } from 'url'
4
+ import type { Manifest } from '../types.js'
5
+ import { getTokenCount } from '../utils/tokenizer.js'
6
+
7
+ const __filename = fileURLToPath(import.meta.url)
8
+ const __dirname = path.dirname(__filename)
9
+
10
+ function loadManifest(file: string): Manifest {
11
+ const manifestPath = path.resolve(__dirname, 'manifests', file)
12
+ const manifest = JSON.parse(readFileSync(manifestPath, 'utf8')) as Manifest
13
+ manifest.tokens = getTokenCount(manifest.emmet)
14
+ return manifest
15
+ }
16
+
17
+ export const manifests: Record<string, Manifest> = {
18
+ accordion: loadManifest('accordion.json'),
19
+ alert: loadManifest('alert.json'),
20
+ avatar: loadManifest('avatar.json'),
21
+ badge: loadManifest('badge.json'),
22
+ breadcrumb: loadManifest('breadcrumb.json'),
23
+ button: loadManifest('button.json'),
24
+ card: loadManifest('card.json'),
25
+ checkbox: loadManifest('checkbox.json'),
26
+ codeblock: loadManifest('codeblock.json'),
27
+ combobox: loadManifest('combobox.json'),
28
+ dialog: loadManifest('dialog.json'),
29
+ divider: loadManifest('divider.json'),
30
+ dropdown: loadManifest('dropdown.json'),
31
+ form: loadManifest('form.json'),
32
+ grid: loadManifest('grid.json'),
33
+ input: loadManifest('input.json'),
34
+ meter: loadManifest('meter.json'),
35
+ navigation: loadManifest('navigation.json'),
36
+ progress: loadManifest('progress.json'),
37
+ radio: loadManifest('radio.json'),
38
+ select: loadManifest('select.json'),
39
+ skeleton: loadManifest('skeleton.json'),
40
+ tab: loadManifest('tab.json'),
41
+ table: loadManifest('table.json'),
42
+ textarea: loadManifest('textarea.json'),
43
+ toast: loadManifest('toast.json'),
44
+ tooltip: loadManifest('tooltip.json')
45
+ }
@@ -0,0 +1,99 @@
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
+ }
@@ -0,0 +1,103 @@
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
+ }
@@ -0,0 +1,70 @@
1
+ {
2
+ "component": "navigation",
3
+ "version": "2.0",
4
+ "description": "Semantic navigation component using native nav, ul, li and anchor elements with active state support.",
5
+
6
+ "element": "nav",
7
+
8
+ "emmet": "nav>ul>li*3>a",
9
+
10
+ "props": {
11
+ "aria-current": {
12
+ "type": "enum",
13
+ "values": ["page"],
14
+ "default": null,
15
+ "native": true,
16
+ "agent_hint": "Marks active navigation link."
17
+ },
18
+
19
+ "href": {
20
+ "type": "string",
21
+ "default": "#",
22
+ "native": true,
23
+ "agent_hint": "Navigation destination."
24
+ }
25
+ },
26
+
27
+ "states": ["default", "active", "focus"],
28
+
29
+ "forbidden_props": ["variant", "intent", "theme", "class", "size"],
30
+
31
+ "required_props": [],
32
+
33
+ "required_slots": [],
34
+
35
+ "methods": [],
36
+
37
+ "do": [
38
+ "Wrap links inside nav",
39
+ "Use ul and li structure",
40
+ "Apply aria-current=\"page\" to active link",
41
+ "Keep anchor href present"
42
+ ],
43
+
44
+ "dont": [
45
+ "Do not skip ul structure",
46
+ "Do not apply aria-current on multiple links",
47
+ "Do not use div instead of nav",
48
+ "Do not omit href"
49
+ ],
50
+
51
+ "examples": [
52
+ {
53
+ "label": "Default navigation",
54
+ "emmet": "nav>ul>li*3>a",
55
+ "html": "<nav><ul><li><a href=\"#\" aria-current=\"page\">Home</a></li><li><a href=\"#\">About</a></li><li><a href=\"#\">Contact</a></li></ul></nav>"
56
+ },
57
+
58
+ {
59
+ "label": "Extended navigation",
60
+ "emmet": "nav>ul>li*4>a",
61
+ "html": "<nav><ul><li><a href=\"#\" aria-current=\"page\">Dashboard</a></li><li><a href=\"#\">Projects</a></li><li><a href=\"#\">Settings</a></li><li><a href=\"#\">Profile</a></li></ul></nav>"
62
+ },
63
+
64
+ {
65
+ "label": "Active link",
66
+ "emmet": "a[aria-current=page]",
67
+ "html": "<a href=\"#\" aria-current=\"page\">Home</a>"
68
+ }
69
+ ]
70
+ }
@@ -0,0 +1,88 @@
1
+ {
2
+ "component": "progress",
3
+ "version": "2.0",
4
+ "description": "Displays task completion progress using the native HTML <progress> element.",
5
+
6
+ "element": "progress",
7
+
8
+ "emmet": "progress[value=? max=?]",
9
+
10
+ "props": {
11
+ "value": {
12
+ "type": "number",
13
+ "required": true,
14
+ "native": true,
15
+ "agent_hint": "Current progress amount."
16
+ },
17
+
18
+ "max": {
19
+ "type": "number",
20
+ "default": 1,
21
+ "native": true,
22
+ "agent_hint": "Maximum progress amount."
23
+ }
24
+ },
25
+
26
+ "states": ["empty", "partial", "complete"],
27
+
28
+ "forbidden_props": [
29
+ "variant",
30
+ "intent",
31
+ "appearance",
32
+ "percentage",
33
+ "color",
34
+ "colorScheme",
35
+ "meter",
36
+ "class"
37
+ ],
38
+
39
+ "required_props": ["value"],
40
+
41
+ "required_slots": [],
42
+
43
+ "do": [
44
+ "Use value='0' for empty progress",
45
+ "Use value between 0 and max for partial progress",
46
+ "Use value=max for completed progress",
47
+ "Always provide max when progress range is known"
48
+ ],
49
+
50
+ "dont": [
51
+ "Do not use class attribute",
52
+ "Do not use variant or intent props",
53
+ "Do not use percentage prop",
54
+ "Do not replace progress with meter element semantics"
55
+ ],
56
+
57
+ "examples": [
58
+ {
59
+ "label": "Default progress",
60
+ "emmet": "progress[value=72 max=100]",
61
+ "html": "<progress value=\"72\" max=\"100\"></progress>"
62
+ },
63
+
64
+ {
65
+ "label": "Empty progress",
66
+ "emmet": "progress[value=0 max=100]",
67
+ "html": "<progress value=\"0\" max=\"100\"></progress>"
68
+ },
69
+
70
+ {
71
+ "label": "Partial progress",
72
+ "emmet": "progress[value=50 max=100]",
73
+ "html": "<progress value=\"50\" max=\"100\"></progress>"
74
+ },
75
+
76
+ {
77
+ "label": "Completed progress",
78
+ "emmet": "progress[value=100 max=100]",
79
+ "html": "<progress value=\"100\" max=\"100\"></progress>"
80
+ },
81
+
82
+ {
83
+ "label": "Upload progress",
84
+ "emmet": "progress[value=72 max=100]",
85
+ "html": "<progress value=\"72\" max=\"100\"></progress>"
86
+ }
87
+ ]
88
+ }
@@ -0,0 +1,121 @@
1
+ {
2
+ "component": "radio",
3
+ "version": "2.0",
4
+ "description": "Radio input for single selection. Must be wrapped inside a label element.",
5
+
6
+ "element": "input",
7
+
8
+ "emmet": "label[data-intent=? data-size=?]>(input[type=radio]+{Label})",
9
+
10
+ "props": {
11
+ "type": {
12
+ "type": "enum",
13
+ "values": ["radio"],
14
+ "default": "radio",
15
+ "native": true,
16
+ "agent_hint": "Always use type=radio"
17
+ },
18
+
19
+ "checked": {
20
+ "type": "boolean",
21
+ "native": true,
22
+ "agent_hint": "Marks radio as selected"
23
+ },
24
+
25
+ "disabled": {
26
+ "type": "boolean",
27
+ "native": true,
28
+ "agent_hint": "Disables radio"
29
+ },
30
+
31
+ "required": {
32
+ "type": "boolean",
33
+ "native": true,
34
+ "agent_hint": "Marks radio as required"
35
+ },
36
+
37
+ "name": {
38
+ "type": "string",
39
+ "native": true,
40
+ "agent_hint": "Used for grouping radios"
41
+ },
42
+
43
+ "value": {
44
+ "type": "string",
45
+ "native": true,
46
+ "agent_hint": "Submitted value in forms"
47
+ },
48
+
49
+ "data-intent": {
50
+ "type": "enum",
51
+ "values": ["success", "danger", "warning", "neutral"],
52
+ "default": "neutral",
53
+ "native": false,
54
+ "agent_hint": "Controls radio color"
55
+ },
56
+
57
+ "data-size": {
58
+ "type": "enum",
59
+ "values": ["sm", "md", "lg"],
60
+ "default": "md",
61
+ "native": false,
62
+ "agent_hint": "Controls radio size"
63
+ }
64
+ },
65
+
66
+ "states": ["checked", "disabled"],
67
+
68
+ "required_props": ["type"],
69
+
70
+ "required_wrapper": "label",
71
+
72
+ "forbidden_props": ["class", "variant", "color", "style", "onclick"],
73
+
74
+ "do": [
75
+ "Wrap radio inside label",
76
+ "Use checked for default state",
77
+ "Use same name for grouping radios",
78
+ "Use data-intent for styling",
79
+ "Use data-size for scaling"
80
+ ],
81
+
82
+ "dont": [
83
+ "Do not use class attribute",
84
+ "Do not use variant or color props",
85
+ "Do not use inline JS handlers",
86
+ "Do not place radio outside label"
87
+ ],
88
+
89
+ "examples": [
90
+ {
91
+ "label": "Basic radio",
92
+ "emmet": "label>(input[type=radio]+{JavaScript})",
93
+ "html": "<label><input type=\"radio\" />JavaScript</label>"
94
+ },
95
+ {
96
+ "label": "Checked radio",
97
+ "emmet": "label>(input[type=radio checked]+{Selected})",
98
+ "html": "<label><input type=\"radio\" checked />Selected</label>"
99
+ },
100
+ {
101
+ "label": "Disabled radio",
102
+ "emmet": "label>(input[type=radio disabled]+{Disabled})",
103
+ "html": "<label><input type=\"radio\" disabled />Disabled</label>"
104
+ },
105
+ {
106
+ "label": "Intent variant",
107
+ "emmet": "label[data-intent=success]>(input[type=radio checked]+{Success})",
108
+ "html": "<label data-intent=\"success\"><input type=\"radio\" checked />Success</label>"
109
+ },
110
+ {
111
+ "label": "Size variant",
112
+ "emmet": "label[data-size=lg]>(input[type=radio]+{Large})",
113
+ "html": "<label data-size=\"lg\"><input type=\"radio\" />Large</label>"
114
+ },
115
+ {
116
+ "label": "Radio group",
117
+ "emmet": "label>(input[type=radio name=group value=js]+{JavaScript})",
118
+ "html": "<label><input type=\"radio\" name=\"group\" value=\"js\" />JavaScript</label>"
119
+ }
120
+ ]
121
+ }
@@ -0,0 +1,109 @@
1
+ {
2
+ "component": "select",
3
+ "version": "2.0",
4
+ "description": "Provides accessible dropdown selection using the native HTML select element with semantic intent variants.",
5
+
6
+ "element": "select",
7
+
8
+ "emmet": "select[data-intent=primary]>option{Option}",
9
+
10
+ "props": {
11
+ "data-intent": {
12
+ "type": "enum",
13
+ "values": ["primary", "danger", "warning", "success", "neutral"],
14
+ "default": "neutral",
15
+ "native": false,
16
+ "agent_hint": "Use danger for destructive selections, success for positive states, primary for main forms."
17
+ },
18
+
19
+ "disabled": {
20
+ "type": "boolean",
21
+ "native": true,
22
+ "agent_hint": "Disable user interaction."
23
+ },
24
+
25
+ "required": {
26
+ "type": "boolean",
27
+ "native": true,
28
+ "agent_hint": "Marks field as required."
29
+ },
30
+
31
+ "aria-invalid": {
32
+ "type": "boolean",
33
+ "native": true,
34
+ "agent_hint": "Use for validation error state."
35
+ },
36
+
37
+ "multiple": {
38
+ "type": "boolean",
39
+ "native": true,
40
+ "agent_hint": "Enable multiple selection."
41
+ },
42
+
43
+ "name": {
44
+ "type": "string",
45
+ "native": true
46
+ }
47
+ },
48
+
49
+ "states": ["disabled", "invalid", "required", "multiple"],
50
+
51
+ "forbidden_props": [
52
+ "variant",
53
+ "color",
54
+ "appearance",
55
+ "colorScheme",
56
+ "size",
57
+ "isDisabled",
58
+ "class"
59
+ ],
60
+
61
+ "required_props": [],
62
+ "required_slots": [],
63
+
64
+ "do": [
65
+ "Use data-intent='primary' for default form flows",
66
+ "Use aria-invalid='true' for validation errors",
67
+ "Use disabled for unavailable selections",
68
+ "Use multiple for multi-select lists"
69
+ ],
70
+
71
+ "dont": [
72
+ "Do not use class attribute",
73
+ "Do not use variant props",
74
+ "Do not use color props",
75
+ "Do not use isDisabled"
76
+ ],
77
+
78
+ "examples": [
79
+ {
80
+ "label": "Default select",
81
+ "emmet": "select[data-intent=neutral]>option{India}",
82
+ "html": "<select data-intent=\"neutral\"><option>India</option></select>"
83
+ },
84
+
85
+ {
86
+ "label": "Primary select",
87
+ "emmet": "select[data-intent=primary]>option{India}",
88
+ "html": "<select data-intent=\"primary\"><option>India</option></select>"
89
+ },
90
+
91
+ {
92
+ "label": "Disabled select",
93
+ "emmet": "select[data-intent=neutral disabled]>option{Disabled}",
94
+ "html": "<select data-intent=\"neutral\" disabled><option>Disabled</option></select>"
95
+ },
96
+
97
+ {
98
+ "label": "Invalid select",
99
+ "emmet": "select[data-intent=neutral aria-invalid=true]>option{Error}",
100
+ "html": "<select data-intent=\"neutral\" aria-invalid=\"true\"><option>Error</option></select>"
101
+ },
102
+
103
+ {
104
+ "label": "Multiple select",
105
+ "emmet": "select[data-intent=neutral multiple]>option{India}+option{USA}",
106
+ "html": "<select data-intent=\"neutral\" multiple><option>India</option><option>USA</option></select>"
107
+ }
108
+ ]
109
+ }