@mindfiredigital/ignix-lite-mcp 1.2.0 → 1.4.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 (90) hide show
  1. package/README.md +108 -0
  2. package/dist/server.js +187 -1954
  3. package/dist/server.js.map +1 -1
  4. package/dist/utils/check-api.js +2 -0
  5. package/dist/utils/check-api.js.map +1 -1
  6. package/package.json +14 -6
  7. package/.turbo/turbo-build.log +0 -25
  8. package/CHANGELOG.md +0 -7
  9. package/dist/manifests/accordion.json +0 -61
  10. package/dist/manifests/alert.json +0 -69
  11. package/dist/manifests/avatar.json +0 -75
  12. package/dist/manifests/badge.json +0 -74
  13. package/dist/manifests/breadcrumb.json +0 -87
  14. package/dist/manifests/button.json +0 -85
  15. package/dist/manifests/card.json +0 -91
  16. package/dist/manifests/checkbox.json +0 -122
  17. package/dist/manifests/codeblock.json +0 -63
  18. package/dist/manifests/combobox.json +0 -33
  19. package/dist/manifests/dialog.json +0 -64
  20. package/dist/manifests/divider.json +0 -47
  21. package/dist/manifests/dropdown.json +0 -105
  22. package/dist/manifests/form.json +0 -81
  23. package/dist/manifests/grid.json +0 -143
  24. package/dist/manifests/input.json +0 -99
  25. package/dist/manifests/meter.json +0 -103
  26. package/dist/manifests/navigation.json +0 -70
  27. package/dist/manifests/progress.json +0 -88
  28. package/dist/manifests/radio.json +0 -121
  29. package/dist/manifests/select.json +0 -109
  30. package/dist/manifests/skeleton.json +0 -101
  31. package/dist/manifests/tab.json +0 -88
  32. package/dist/manifests/table.json +0 -92
  33. package/dist/manifests/textarea.json +0 -117
  34. package/dist/manifests/toast.json +0 -157
  35. package/dist/manifests/tooltip.json +0 -115
  36. package/dist/vector-index.json +0 -14015
  37. package/src/context/api-context.ts +0 -14
  38. package/src/global.d.ts +0 -15
  39. package/src/manifests/accordion.json +0 -61
  40. package/src/manifests/alert.json +0 -69
  41. package/src/manifests/avatar.json +0 -75
  42. package/src/manifests/badge.json +0 -74
  43. package/src/manifests/breadcrumb.json +0 -87
  44. package/src/manifests/button.json +0 -85
  45. package/src/manifests/card.json +0 -91
  46. package/src/manifests/checkbox.json +0 -122
  47. package/src/manifests/codeblock.json +0 -63
  48. package/src/manifests/combobox.json +0 -33
  49. package/src/manifests/dialog.json +0 -64
  50. package/src/manifests/divider.json +0 -47
  51. package/src/manifests/dropdown.json +0 -105
  52. package/src/manifests/form.json +0 -81
  53. package/src/manifests/grid.json +0 -143
  54. package/src/manifests/index.ts +0 -45
  55. package/src/manifests/input.json +0 -99
  56. package/src/manifests/meter.json +0 -103
  57. package/src/manifests/navigation.json +0 -70
  58. package/src/manifests/progress.json +0 -88
  59. package/src/manifests/radio.json +0 -121
  60. package/src/manifests/select.json +0 -109
  61. package/src/manifests/skeleton.json +0 -101
  62. package/src/manifests/tab.json +0 -88
  63. package/src/manifests/table.json +0 -92
  64. package/src/manifests/textarea.json +0 -117
  65. package/src/manifests/toast.json +0 -157
  66. package/src/manifests/tooltip.json +0 -115
  67. package/src/server.ts +0 -201
  68. package/src/tools/build-index.ts +0 -55
  69. package/src/tools/check-a11y.ts +0 -106
  70. package/src/tools/embedder.ts +0 -18
  71. package/src/tools/generate-theme.ts +0 -42
  72. package/src/tools/get-emmet.ts +0 -64
  73. package/src/tools/get-manifests.ts +0 -55
  74. package/src/tools/intent-engine.ts +0 -197
  75. package/src/tools/list-components.ts +0 -20
  76. package/src/tools/search-index.ts +0 -66
  77. package/src/tools/theme-palette.ts +0 -65
  78. package/src/tools/theme-tokens.ts +0 -176
  79. package/src/tools/validator.ts +0 -367
  80. package/src/types.ts +0 -63
  81. package/src/utils/a11y-rules.ts +0 -873
  82. package/src/utils/a11y-types.ts +0 -15
  83. package/src/utils/check-api.ts +0 -13
  84. package/src/utils/cosine.ts +0 -15
  85. package/src/utils/emmet-helpers.ts +0 -171
  86. package/src/utils/intent-helpers.ts +0 -66
  87. package/src/utils/intent-parser.ts +0 -186
  88. package/src/utils/tokenizer.ts +0 -7
  89. package/tsconfig.json +0 -14
  90. package/tsup.config.ts +0 -13
@@ -1,70 +0,0 @@
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
- }
@@ -1,88 +0,0 @@
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
- }
@@ -1,121 +0,0 @@
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
- }
@@ -1,109 +0,0 @@
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
- }
@@ -1,101 +0,0 @@
1
- {
2
- "component": "skeleton",
3
- "version": "2.0",
4
- "description": "Displays loading placeholders using native span elements with semantic loading states.",
5
-
6
- "element": "span",
7
-
8
- "emmet": "span[aria-busy=true data-shape=text]",
9
-
10
- "props": {
11
- "data-shape": {
12
- "type": "enum",
13
- "values": ["text", "rect", "circle"],
14
- "default": "text",
15
- "native": false,
16
- "agent_hint": "Use text for content placeholders, rect for cards/banners, circle for avatars."
17
- },
18
-
19
- "aria-busy": {
20
- "type": "boolean",
21
- "native": true,
22
- "agent_hint": "Required loading state indicator."
23
- },
24
-
25
- "role": {
26
- "type": "string",
27
- "default": "status",
28
- "native": true,
29
- "agent_hint": "Use status role for accessibility."
30
- },
31
-
32
- "aria-label": {
33
- "type": "string",
34
- "native": true,
35
- "agent_hint": "Provide accessible loading description."
36
- },
37
-
38
- "data-lines": {
39
- "type": "number",
40
- "native": false,
41
- "agent_hint": "Use for multiple text line placeholders."
42
- }
43
- },
44
-
45
- "states": ["loading", "text", "rect", "circle", "multiple-lines"],
46
-
47
- "forbidden_props": [
48
- "variant",
49
- "intent",
50
- "color",
51
- "appearance",
52
- "size",
53
- "isLoading",
54
- "class"
55
- ],
56
-
57
- "required_props": ["aria-busy"],
58
-
59
- "required_slots": [],
60
-
61
- "do": [
62
- "Use aria-busy='true' during loading",
63
- "Use data-shape='text' for text placeholders",
64
- "Use data-shape='rect' for cards and banners",
65
- "Use data-shape='circle' for avatars",
66
- "Provide aria-label for accessibility"
67
- ],
68
-
69
- "dont": [
70
- "Do not use class attribute",
71
- "Do not use variant props",
72
- "Do not use color props",
73
- "Do not use skeleton after content loads"
74
- ],
75
-
76
- "examples": [
77
- {
78
- "label": "Text skeleton",
79
- "emmet": "span[role=status aria-busy=true aria-label='loading text' data-shape=text]",
80
- "html": "<span role=\"status\" aria-busy=\"true\" aria-label=\"loading text\" data-shape=\"text\"></span>"
81
- },
82
-
83
- {
84
- "label": "Rectangle skeleton",
85
- "emmet": "span[role=status aria-busy=true aria-label='loading rectangle' data-shape=rect]",
86
- "html": "<span role=\"status\" aria-busy=\"true\" aria-label=\"loading rectangle\" data-shape=\"rect\"></span>"
87
- },
88
-
89
- {
90
- "label": "Circle skeleton",
91
- "emmet": "span[role=status aria-busy=true aria-label='loading avatar' data-shape=circle]",
92
- "html": "<span role=\"status\" aria-busy=\"true\" aria-label=\"loading avatar\" data-shape=\"circle\"></span>"
93
- },
94
-
95
- {
96
- "label": "Multiple lines",
97
- "emmet": "span[role=status aria-busy=true data-shape=text data-lines=3]",
98
- "html": "<span role=\"status\" aria-busy=\"true\" data-shape=\"text\" data-lines=\"3\"></span>"
99
- }
100
- ]
101
- }
@@ -1,88 +0,0 @@
1
- {
2
- "component": "tabs",
3
- "version": "2.0",
4
- "description": "Provides semantic tab navigation using the ix-tabs custom element with keyboard accessibility and visual variants.",
5
- "element": "ix-tabs",
6
- "emmet": "ix-tabs>button[slot=tab]*3",
7
- "props": {
8
- "data-variant": {
9
- "type": "enum",
10
- "values": ["default", "underline", "pill", "gradient"],
11
- "default": "default",
12
- "native": false,
13
- "agent_hint": "Controls tab appearance."
14
- },
15
- "slot": {
16
- "type": "enum",
17
- "values": ["tab", "panel"],
18
- "native": true,
19
- "agent_hint": "tab defines trigger buttons, panel defines tab content."
20
- },
21
- "aria-selected": {
22
- "type": "boolean",
23
- "native": true,
24
- "agent_hint": "Marks active tab."
25
- },
26
- "role": {
27
- "type": "string",
28
- "native": true,
29
- "agent_hint": "Automatically applied for accessibility."
30
- },
31
- "hidden": {
32
- "type": "boolean",
33
- "native": true,
34
- "agent_hint": "Used for inactive panels."
35
- }
36
- },
37
- "states": ["selected", "focused", "keyboard-navigation"],
38
- "forbidden_props": [
39
- "variant",
40
- "color",
41
- "size",
42
- "appearance",
43
- "class",
44
- "activeTab"
45
- ],
46
- "required_props": [],
47
- "required_slots": ["tab"],
48
- "do": [
49
- "Use slot='tab' for tab triggers",
50
- "Use slot='panel' for content sections",
51
- "Use data-variant for visual styles",
52
- "Use aria-selected for active state",
53
- "Keep related panels inside ix-tabs"
54
- ],
55
- "dont": [
56
- "Do not use class styling",
57
- "Do not use variant prop",
58
- "Do not use custom active props",
59
- "Do not omit tab slot"
60
- ],
61
- "examples": [
62
- {
63
- "label": "Default tabs",
64
- "emmet": "ix-tabs>button[slot=tab]*3",
65
- "html": "<ix-tabs><button slot=\"tab\">Overview</button><button slot=\"tab\">Analytics</button><button slot=\"tab\">Settings</button></ix-tabs>"
66
- },
67
- {
68
- "label": "Underline tabs",
69
- "emmet": "ix-tabs[data-variant=underline]",
70
- "html": "<ix-tabs data-variant=\"underline\"><button slot=\"tab\">Profile</button><button slot=\"tab\">Activity</button><button slot=\"tab\">Security</button></ix-tabs>"
71
- },
72
- {
73
- "label": "Pill tabs",
74
- "emmet": "ix-tabs[data-variant=pill]",
75
- "html": "<ix-tabs data-variant=\"pill\"><button slot=\"tab\">Files</button><button slot=\"tab\">Shared</button><button slot=\"tab\">Starred</button></ix-tabs>"
76
- },
77
- {
78
- "label": "Gradient tabs",
79
- "emmet": "ix-tabs[data-variant=gradient]",
80
- "html": "<ix-tabs data-variant=\"gradient\"><button slot=\"tab\">Home</button><button slot=\"tab\">Dashboard</button><button slot=\"tab\">Reports</button></ix-tabs>"
81
- },
82
- {
83
- "label": "Tabs with panels",
84
- "emmet": "ix-tabs>button[slot=tab]+section[slot=panel]",
85
- "html": "<ix-tabs><button slot=\"tab\">Account</button><button slot=\"tab\">Billing</button><section slot=\"panel\">Account content</section><section slot=\"panel\">Billing content</section></ix-tabs>"
86
- }
87
- ]
88
- }
@@ -1,92 +0,0 @@
1
- {
2
- "component": "table",
3
- "version": "2.0",
4
- "description": "Provides semantic tables with optional sortable columns using the ix-table custom element extension.",
5
-
6
- "element": "table",
7
-
8
- "extends": "ix-table",
9
-
10
- "emmet": "table[is=ix-table]>thead>tr+tbody",
11
-
12
- "props": {
13
- "data-sortable": {
14
- "type": "boolean",
15
- "default": false,
16
- "native": false,
17
- "agent_hint": "Enables sorting on table header."
18
- },
19
-
20
- "aria-sort": {
21
- "type": "enum",
22
- "values": ["ascending", "descending", "none"],
23
- "default": "none",
24
- "native": true,
25
- "agent_hint": "Current sort direction."
26
- },
27
-
28
- "is": {
29
- "type": "string",
30
- "values": ["ix-table"],
31
- "default": "ix-table",
32
- "native": true,
33
- "agent_hint": "Activates sortable table behavior."
34
- }
35
- },
36
-
37
- "states": ["default", "ascending", "descending", "sortable"],
38
-
39
- "forbidden_props": ["sortable", "variant", "theme", "direction", "class"],
40
-
41
- "required_props": [],
42
-
43
- "required_slots": [],
44
-
45
- "methods": ["sortColumn(header)"],
46
-
47
- "do": [
48
- "Use is=\"ix-table\" for sorting",
49
- "Apply data-sortable on th only",
50
- "Keep tbody present",
51
- "Use aria-sort state"
52
- ],
53
-
54
- "dont": [
55
- "Do not add data-sortable on td",
56
- "Do not omit tbody",
57
- "Do not use custom sort attributes",
58
- "Do not use class based sorting"
59
- ],
60
-
61
- "examples": [
62
- {
63
- "label": "Default table",
64
- "emmet": "table>thead>tr+tbody",
65
- "html": "<table><thead><tr><th>Name</th><th>Email</th></tr></thead><tbody><tr><td>John</td><td>john@example.com</td></tr></tbody></table>"
66
- },
67
-
68
- {
69
- "label": "Sortable table",
70
- "emmet": "table[is=ix-table]",
71
- "html": "<table is=\"ix-table\"><thead><tr><th data-sortable>Name</th><th data-sortable>Age</th></tr></thead><tbody><tr><td>John</td><td>28</td></tr><tr><td>Alex</td><td>21</td></tr></tbody></table>"
72
- },
73
-
74
- {
75
- "label": "Ascending state",
76
- "emmet": "th[data-sortable]",
77
- "html": "<th data-sortable aria-sort=\"ascending\">Name</th>"
78
- },
79
-
80
- {
81
- "label": "Descending state",
82
- "emmet": "th[data-sortable]",
83
- "html": "<th data-sortable aria-sort=\"descending\">Age</th>"
84
- },
85
-
86
- {
87
- "label": "Status table",
88
- "emmet": "table[is=ix-table]",
89
- "html": "<table is=\"ix-table\"><thead><tr><th data-sortable>Name</th><th data-sortable>Status</th></tr></thead><tbody><tr><td>Riya</td><td><mark data-intent=\"success\">Active</mark></td></tr></tbody></table>"
90
- }
91
- ]
92
- }