twntyx-css 1.0.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 (228) hide show
  1. package/README.md +105 -0
  2. package/llm/CHANGELOG.md +7 -0
  3. package/llm/components/ai-background.json +90 -0
  4. package/llm/components/ai-orb.json +91 -0
  5. package/llm/components/ai-perl.json +91 -0
  6. package/llm/components/all-components.json +104 -0
  7. package/llm/components/animation-references.json +84 -0
  8. package/llm/components/avatar.json +149 -0
  9. package/llm/components/badge.json +263 -0
  10. package/llm/components/banner-marketplace.json +81 -0
  11. package/llm/components/banner.json +120 -0
  12. package/llm/components/breadcrumb.json +169 -0
  13. package/llm/components/button-container.json +150 -0
  14. package/llm/components/button-feedback.json +155 -0
  15. package/llm/components/button.json +290 -0
  16. package/llm/components/card-assessment.json +93 -0
  17. package/llm/components/card-test.json +83 -0
  18. package/llm/components/card.json +94 -0
  19. package/llm/components/chat.json +155 -0
  20. package/llm/components/checkbox.json +186 -0
  21. package/llm/components/checkmark.json +175 -0
  22. package/llm/components/collapsible.json +100 -0
  23. package/llm/components/color-palette.json +79 -0
  24. package/llm/components/color-usage.json +83 -0
  25. package/llm/components/combobox.json +143 -0
  26. package/llm/components/command-palette.json +159 -0
  27. package/llm/components/countdown.json +113 -0
  28. package/llm/components/datepicker.json +151 -0
  29. package/llm/components/divider.json +104 -0
  30. package/llm/components/empty-state.json +80 -0
  31. package/llm/components/field.json +123 -0
  32. package/llm/components/fieldset.json +78 -0
  33. package/llm/components/file-upload.json +163 -0
  34. package/llm/components/form-example.json +82 -0
  35. package/llm/components/getting-started.json +70 -0
  36. package/llm/components/icons-reference.json +78 -0
  37. package/llm/components/illustrations-library.json +78 -0
  38. package/llm/components/input-group.json +94 -0
  39. package/llm/components/introduction.json +71 -0
  40. package/llm/components/join.json +105 -0
  41. package/llm/components/kbd.json +139 -0
  42. package/llm/components/key-value.json +86 -0
  43. package/llm/components/link.json +120 -0
  44. package/llm/components/loader.json +117 -0
  45. package/llm/components/logotype.json +75 -0
  46. package/llm/components/menu.json +192 -0
  47. package/llm/components/modal.json +167 -0
  48. package/llm/components/navbar.json +158 -0
  49. package/llm/components/pagination.json +122 -0
  50. package/llm/components/pie-chart.json +94 -0
  51. package/llm/components/popover.json +174 -0
  52. package/llm/components/progress-bullet.json +203 -0
  53. package/llm/components/progress-linear.json +129 -0
  54. package/llm/components/progress-radial.json +125 -0
  55. package/llm/components/radio.json +162 -0
  56. package/llm/components/range-slider.json +125 -0
  57. package/llm/components/scrollbar.json +96 -0
  58. package/llm/components/select-input.json +224 -0
  59. package/llm/components/shadows.json +107 -0
  60. package/llm/components/skeleton.json +84 -0
  61. package/llm/components/stacked-chart.json +100 -0
  62. package/llm/components/state.json +138 -0
  63. package/llm/components/stepper.json +95 -0
  64. package/llm/components/steps.json +177 -0
  65. package/llm/components/surface.json +181 -0
  66. package/llm/components/table.json +223 -0
  67. package/llm/components/tabs.json +147 -0
  68. package/llm/components/template-ai.json +80 -0
  69. package/llm/components/template-login.json +88 -0
  70. package/llm/components/template-stats.json +76 -0
  71. package/llm/components/text-input.json +275 -0
  72. package/llm/components/textarea.json +183 -0
  73. package/llm/components/timeline.json +142 -0
  74. package/llm/components/toast.json +164 -0
  75. package/llm/components/toggle.json +158 -0
  76. package/llm/components/tool-svg-to-base64.json +78 -0
  77. package/llm/components/tool-svg-to-icon-data.json +81 -0
  78. package/llm/components/tooltip.json +90 -0
  79. package/llm/examples/ai-background.html +1 -0
  80. package/llm/examples/ai-orb.html +1 -0
  81. package/llm/examples/ai-perl.html +1 -0
  82. package/llm/examples/all-components.html +1 -0
  83. package/llm/examples/animation-references.html +1 -0
  84. package/llm/examples/avatar.html +1 -0
  85. package/llm/examples/badge.html +1 -0
  86. package/llm/examples/banner-marketplace.html +1 -0
  87. package/llm/examples/banner.html +1 -0
  88. package/llm/examples/breadcrumb.html +1 -0
  89. package/llm/examples/button-container.html +1 -0
  90. package/llm/examples/button-feedback.html +1 -0
  91. package/llm/examples/button.html +3 -0
  92. package/llm/examples/card-assessment.html +1 -0
  93. package/llm/examples/card-test.html +1 -0
  94. package/llm/examples/card.html +1 -0
  95. package/llm/examples/chat.html +1 -0
  96. package/llm/examples/checkbox.html +1 -0
  97. package/llm/examples/checkmark.html +1 -0
  98. package/llm/examples/collapsible.html +1 -0
  99. package/llm/examples/color-palette.html +1 -0
  100. package/llm/examples/color-usage.html +1 -0
  101. package/llm/examples/combobox.html +1 -0
  102. package/llm/examples/command-palette.html +1 -0
  103. package/llm/examples/countdown.html +1 -0
  104. package/llm/examples/datepicker.html +1 -0
  105. package/llm/examples/divider.html +1 -0
  106. package/llm/examples/empty-state.html +1 -0
  107. package/llm/examples/field.html +1 -0
  108. package/llm/examples/fieldset.html +1 -0
  109. package/llm/examples/file-upload.html +1 -0
  110. package/llm/examples/form-example.html +1 -0
  111. package/llm/examples/getting-started.html +1 -0
  112. package/llm/examples/icons-reference.html +1 -0
  113. package/llm/examples/illustrations-library.html +1 -0
  114. package/llm/examples/input-group.html +1 -0
  115. package/llm/examples/introduction.html +1 -0
  116. package/llm/examples/join.html +1 -0
  117. package/llm/examples/kbd.html +1 -0
  118. package/llm/examples/key-value.html +1 -0
  119. package/llm/examples/link.html +1 -0
  120. package/llm/examples/loader.html +1 -0
  121. package/llm/examples/logotype.html +1 -0
  122. package/llm/examples/menu.html +1 -0
  123. package/llm/examples/modal.html +16 -0
  124. package/llm/examples/navbar.html +1 -0
  125. package/llm/examples/pagination.html +1 -0
  126. package/llm/examples/pie-chart.html +1 -0
  127. package/llm/examples/popover.html +1 -0
  128. package/llm/examples/progress-bullet.html +1 -0
  129. package/llm/examples/progress-linear.html +1 -0
  130. package/llm/examples/progress-radial.html +1 -0
  131. package/llm/examples/radio.html +1 -0
  132. package/llm/examples/range-slider.html +1 -0
  133. package/llm/examples/scrollbar.html +1 -0
  134. package/llm/examples/select-input.html +1 -0
  135. package/llm/examples/shadows.html +1 -0
  136. package/llm/examples/skeleton.html +1 -0
  137. package/llm/examples/stacked-chart.html +1 -0
  138. package/llm/examples/state.html +1 -0
  139. package/llm/examples/stepper.html +1 -0
  140. package/llm/examples/steps.html +1 -0
  141. package/llm/examples/surface.html +1 -0
  142. package/llm/examples/table.html +16 -0
  143. package/llm/examples/tabs.html +1 -0
  144. package/llm/examples/template-ai.html +1 -0
  145. package/llm/examples/template-login.html +1 -0
  146. package/llm/examples/template-stats.html +1 -0
  147. package/llm/examples/text-input.html +10 -0
  148. package/llm/examples/textarea.html +1 -0
  149. package/llm/examples/timeline.html +1 -0
  150. package/llm/examples/toast.html +5 -0
  151. package/llm/examples/toggle.html +1 -0
  152. package/llm/examples/tool-svg-to-base64.html +1 -0
  153. package/llm/examples/tool-svg-to-icon-data.html +1 -0
  154. package/llm/examples/tooltip.html +1 -0
  155. package/llm/index.json +1615 -0
  156. package/llm/llms.txt +18 -0
  157. package/llm/patterns.json +111 -0
  158. package/llm/rules.json +47 -0
  159. package/llm/schema.json +804 -0
  160. package/llm/tokens.json +3629 -0
  161. package/package.json +30 -0
  162. package/styles/ai.css +114 -0
  163. package/styles/animation.css +2493 -0
  164. package/styles/avatar.css +101 -0
  165. package/styles/background-ai.css +118 -0
  166. package/styles/badge.css +274 -0
  167. package/styles/banner.css +98 -0
  168. package/styles/breadcrumb.css +72 -0
  169. package/styles/button.css +621 -0
  170. package/styles/card.css +27 -0
  171. package/styles/chart-pie.css +39 -0
  172. package/styles/chart-stacked.css +91 -0
  173. package/styles/chat.css +506 -0
  174. package/styles/checkmark.css +105 -0
  175. package/styles/code.css +264 -0
  176. package/styles/collapsible.css +93 -0
  177. package/styles/colors.css +536 -0
  178. package/styles/combobox.css +66 -0
  179. package/styles/command.css +81 -0
  180. package/styles/contest.css +227 -0
  181. package/styles/countdown.css +65 -0
  182. package/styles/datepicker.css +124 -0
  183. package/styles/divider.css +72 -0
  184. package/styles/drawer.css +142 -0
  185. package/styles/dropdown.css +22 -0
  186. package/styles/empty-state.css +48 -0
  187. package/styles/field.css +47 -0
  188. package/styles/fieldset.css +24 -0
  189. package/styles/form-checkbox-radio-toggle.css +233 -0
  190. package/styles/form-fileupload.css +146 -0
  191. package/styles/form-rangeslider.css +106 -0
  192. package/styles/form-shared.css +41 -0
  193. package/styles/form-text-select.css +411 -0
  194. package/styles/form.css +86 -0
  195. package/styles/globals.css +66 -0
  196. package/styles/input-group.css +63 -0
  197. package/styles/join.css +141 -0
  198. package/styles/kbd.css +55 -0
  199. package/styles/key-value.css +44 -0
  200. package/styles/link.css +48 -0
  201. package/styles/loader.css +183 -0
  202. package/styles/logotype.css +13 -0
  203. package/styles/menu.css +317 -0
  204. package/styles/modal.css +172 -0
  205. package/styles/navbar.css +48 -0
  206. package/styles/package-quill.css +1001 -0
  207. package/styles/pagination.css +147 -0
  208. package/styles/panel.css +113 -0
  209. package/styles/popover.css +303 -0
  210. package/styles/prism.css +60 -0
  211. package/styles/progress.css +209 -0
  212. package/styles/scrollbar.css +17 -0
  213. package/styles/shadow.css +25 -0
  214. package/styles/shared.css +226 -0
  215. package/styles/skeleton.css +34 -0
  216. package/styles/state.css +150 -0
  217. package/styles/stepper.css +72 -0
  218. package/styles/steps.css +98 -0
  219. package/styles/surface.css +252 -0
  220. package/styles/tab.css +286 -0
  221. package/styles/table.css +243 -0
  222. package/styles/theme.css +126 -0
  223. package/styles/timeline.css +193 -0
  224. package/styles/toast.css +150 -0
  225. package/styles/tooltip.css +8 -0
  226. package/styles/typography.css +160 -0
  227. package/styles/utility.css +20 -0
  228. package/tailwind.config.cjs +9 -0
@@ -0,0 +1,120 @@
1
+ {
2
+ "id": "link",
3
+ "name": "Link",
4
+ "status": "stable",
5
+ "summary": "Accessible link component for navigating between pages or external resources, with support for different visual styles, states and behaviors.",
6
+ "keywords": [
7
+ "a11y",
8
+ "accessibility",
9
+ "anchor",
10
+ "button link",
11
+ "external link",
12
+ "href",
13
+ "hyperlink",
14
+ "internal link",
15
+ "link",
16
+ "navigation",
17
+ "routing",
18
+ "text link",
19
+ "url"
20
+ ],
21
+ "sourcePaths": [
22
+ "app/design-system/link/page.js",
23
+ "assets/styles/link.css"
24
+ ],
25
+ "apiModel": "html-class",
26
+ "baseClass": "link",
27
+ "variants": [
28
+ {
29
+ "name": "link-base",
30
+ "className": "link-base",
31
+ "description": "Default link style with hover and active states"
32
+ },
33
+ {
34
+ "name": "link-underline",
35
+ "className": "link-underline",
36
+ "description": "Underlined link style that removes underline on active state"
37
+ },
38
+ {
39
+ "name": "link-subtle",
40
+ "className": "link-subtle",
41
+ "description": "Subtle link style with background hover effect and smaller text"
42
+ }
43
+ ],
44
+ "sizes": [],
45
+ "states": [],
46
+ "structure": {
47
+ "rootElement": "a",
48
+ "requiredClasses": [
49
+ "link"
50
+ ],
51
+ "optionalClasses": [
52
+ "link-base",
53
+ "link-underline",
54
+ "link-subtle"
55
+ ],
56
+ "requiredChildren": [],
57
+ "optionalChildren": []
58
+ },
59
+ "attributes": {
60
+ "allowed": [
61
+ "class",
62
+ "id",
63
+ "tabindex"
64
+ ],
65
+ "required": [],
66
+ "dataAttributes": [],
67
+ "roles": [],
68
+ "aria": []
69
+ },
70
+ "a11y": {
71
+ "interactive": true,
72
+ "requiredRoles": [],
73
+ "requiredAria": [
74
+ "aria-label (when no visible label)"
75
+ ],
76
+ "keyboardSupport": [
77
+ "Tab",
78
+ "Shift+Tab",
79
+ "Enter",
80
+ "Space"
81
+ ],
82
+ "focusBehavior": "Visible focus state is required when the component is focusable or clickable."
83
+ },
84
+ "dos": [
85
+ "Apply the base class 'link' on the root element.",
86
+ "Use documented modifiers for visual variants instead of ad-hoc custom classes.",
87
+ "Keep semantic color usage aligned with token classes for light/dark support."
88
+ ],
89
+ "donts": [
90
+ "Do not combine conflicting state classes on the same element.",
91
+ "Do not rely on undocumented internal classes in production templates.",
92
+ "Do not remove required accessibility attributes when component is interactive."
93
+ ],
94
+ "tokenUsage": [
95
+ "background-surface-elevated",
96
+ "brand-default",
97
+ "text-brand",
98
+ "text-brand-active",
99
+ "text-brand-hover",
100
+ "text-tertiary"
101
+ ],
102
+ "examples": [
103
+ {
104
+ "id": "canonical",
105
+ "file": "examples/link.html",
106
+ "description": "Minimal canonical Link usage."
107
+ }
108
+ ],
109
+ "composition": {
110
+ "patterns": [
111
+ "navigation-hierarchy"
112
+ ],
113
+ "relatedComponents": [],
114
+ "notes": []
115
+ },
116
+ "breakingChangePolicy": {
117
+ "classContract": "Base class, documented modifiers, and state class names are semver-protected for consumer markup.",
118
+ "a11yContract": "Documented role and aria requirements are semver-protected for generated markup."
119
+ }
120
+ }
@@ -0,0 +1,117 @@
1
+ {
2
+ "id": "loader",
3
+ "name": "Loader",
4
+ "status": "stable",
5
+ "summary": "Loading indicators and spinners to show content loading states.",
6
+ "keywords": [
7
+ "animation",
8
+ "busy",
9
+ "indicator",
10
+ "loader",
11
+ "loading",
12
+ "processing",
13
+ "progress",
14
+ "spinner",
15
+ "status",
16
+ "wait"
17
+ ],
18
+ "sourcePaths": [
19
+ "app/design-system/loader/page.js",
20
+ "assets/styles/loader.css"
21
+ ],
22
+ "apiModel": "html-class",
23
+ "baseClass": "loader",
24
+ "variants": [],
25
+ "sizes": [
26
+ {
27
+ "name": "loader-xl",
28
+ "className": "loader-xl",
29
+ "description": "Extra large loader size"
30
+ },
31
+ {
32
+ "name": "loader-lg",
33
+ "className": "loader-lg",
34
+ "description": "Large loader size"
35
+ },
36
+ {
37
+ "name": "loader-md",
38
+ "className": "loader-md",
39
+ "description": "Medium loader size (default)"
40
+ },
41
+ {
42
+ "name": "loader-sm",
43
+ "className": "loader-sm",
44
+ "description": "Small loader size"
45
+ },
46
+ {
47
+ "name": "loader-xs",
48
+ "className": "loader-xs",
49
+ "description": "Extra small loader size"
50
+ }
51
+ ],
52
+ "states": [],
53
+ "structure": {
54
+ "rootElement": "div",
55
+ "requiredClasses": [
56
+ "loader"
57
+ ],
58
+ "optionalClasses": [
59
+ "loader-xl",
60
+ "loader-lg",
61
+ "loader-md",
62
+ "loader-sm",
63
+ "loader-xs"
64
+ ],
65
+ "requiredChildren": [],
66
+ "optionalChildren": []
67
+ },
68
+ "attributes": {
69
+ "allowed": [
70
+ "class"
71
+ ],
72
+ "required": [],
73
+ "dataAttributes": [],
74
+ "roles": [],
75
+ "aria": []
76
+ },
77
+ "a11y": {
78
+ "interactive": false,
79
+ "requiredRoles": [],
80
+ "requiredAria": [],
81
+ "keyboardSupport": [],
82
+ "focusBehavior": "No keyboard interaction is required unless nested interactive children are introduced."
83
+ },
84
+ "dos": [
85
+ "Apply the base class 'loader' on the root element.",
86
+ "Use documented modifiers for visual variants instead of ad-hoc custom classes.",
87
+ "Keep semantic color usage aligned with token classes for light/dark support."
88
+ ],
89
+ "donts": [
90
+ "Do not combine conflicting state classes on the same element.",
91
+ "Do not rely on undocumented internal classes in production templates.",
92
+ "Do not remove required accessibility attributes when component is interactive."
93
+ ],
94
+ "tokenUsage": [
95
+ "core-black",
96
+ "core-ui-200",
97
+ "core-ui-700",
98
+ "core-white",
99
+ "line-strong"
100
+ ],
101
+ "examples": [
102
+ {
103
+ "id": "canonical",
104
+ "file": "examples/loader.html",
105
+ "description": "Minimal canonical Loader usage."
106
+ }
107
+ ],
108
+ "composition": {
109
+ "patterns": [],
110
+ "relatedComponents": [],
111
+ "notes": []
112
+ },
113
+ "breakingChangePolicy": {
114
+ "classContract": "Base class, documented modifiers, and state class names are semver-protected for consumer markup.",
115
+ "a11yContract": "Documented role and aria requirements are semver-protected for generated markup."
116
+ }
117
+ }
@@ -0,0 +1,75 @@
1
+ {
2
+ "id": "logotype",
3
+ "name": "Logotype",
4
+ "status": "stable",
5
+ "summary": "Logotype component for displaying the brand logo.",
6
+ "keywords": [
7
+ "brand",
8
+ "branding",
9
+ "identity",
10
+ "logo",
11
+ "logotype",
12
+ "visual"
13
+ ],
14
+ "sourcePaths": [
15
+ "app/design-system/logotype/page.js",
16
+ "assets/styles/logotype.css"
17
+ ],
18
+ "apiModel": "html-class",
19
+ "baseClass": "logotype",
20
+ "variants": [],
21
+ "sizes": [],
22
+ "states": [],
23
+ "structure": {
24
+ "rootElement": "div",
25
+ "requiredClasses": [
26
+ "logotype"
27
+ ],
28
+ "optionalClasses": [],
29
+ "requiredChildren": [],
30
+ "optionalChildren": []
31
+ },
32
+ "attributes": {
33
+ "allowed": [
34
+ "class"
35
+ ],
36
+ "required": [],
37
+ "dataAttributes": [],
38
+ "roles": [],
39
+ "aria": []
40
+ },
41
+ "a11y": {
42
+ "interactive": false,
43
+ "requiredRoles": [],
44
+ "requiredAria": [],
45
+ "keyboardSupport": [],
46
+ "focusBehavior": "No keyboard interaction is required unless nested interactive children are introduced."
47
+ },
48
+ "dos": [
49
+ "Apply the base class 'logotype' on the root element.",
50
+ "Use documented modifiers for visual variants instead of ad-hoc custom classes.",
51
+ "Keep semantic color usage aligned with token classes for light/dark support."
52
+ ],
53
+ "donts": [
54
+ "Do not combine conflicting state classes on the same element.",
55
+ "Do not rely on undocumented internal classes in production templates.",
56
+ "Do not remove required accessibility attributes when component is interactive."
57
+ ],
58
+ "tokenUsage": [],
59
+ "examples": [
60
+ {
61
+ "id": "canonical",
62
+ "file": "examples/logotype.html",
63
+ "description": "Minimal canonical Logotype usage."
64
+ }
65
+ ],
66
+ "composition": {
67
+ "patterns": [],
68
+ "relatedComponents": [],
69
+ "notes": []
70
+ },
71
+ "breakingChangePolicy": {
72
+ "classContract": "Base class, documented modifiers, and state class names are semver-protected for consumer markup.",
73
+ "a11yContract": "Documented role and aria requirements are semver-protected for generated markup."
74
+ }
75
+ }
@@ -0,0 +1,192 @@
1
+ {
2
+ "id": "menu",
3
+ "name": "Menu",
4
+ "status": "stable",
5
+ "summary": "Menu is used to display a list of links vertically or horizontally.",
6
+ "keywords": [
7
+ "choices",
8
+ "dropdown",
9
+ "horizontal",
10
+ "items",
11
+ "links",
12
+ "list",
13
+ "menu",
14
+ "nav",
15
+ "navbar",
16
+ "navigation",
17
+ "options",
18
+ "select",
19
+ "ui",
20
+ "vertical"
21
+ ],
22
+ "sourcePaths": [
23
+ "app/design-system/menu/page.js",
24
+ "assets/styles/menu.css"
25
+ ],
26
+ "apiModel": "html-class",
27
+ "baseClass": "menu",
28
+ "variants": [
29
+ {
30
+ "name": "menu-dropdown-toggle",
31
+ "className": "menu-dropdown-toggle",
32
+ "description": "Toggle button for dropdown menu"
33
+ },
34
+ {
35
+ "name": "menu-dropdown-show",
36
+ "className": "menu-dropdown-show",
37
+ "description": "Shows the dropdown menu when applied"
38
+ },
39
+ {
40
+ "name": "menu-horizontal",
41
+ "className": "menu-horizontal",
42
+ "description": "Makes the menu display horizontally"
43
+ },
44
+ {
45
+ "name": "menu-check",
46
+ "className": "menu-check",
47
+ "description": "Applies check icon to active menu item"
48
+ },
49
+ {
50
+ "name": "active",
51
+ "className": "active",
52
+ "description": "Applies active state to menu item"
53
+ },
54
+ {
55
+ "name": "disabled",
56
+ "className": "disabled",
57
+ "description": "Disables menu item"
58
+ },
59
+ {
60
+ "name": "menu-rounded-none",
61
+ "className": "menu-rounded-none",
62
+ "description": "Removes rounded corners from menu items"
63
+ },
64
+ {
65
+ "name": "menu-rounded-full",
66
+ "className": "menu-rounded-full",
67
+ "description": "Applies fully rounded corners to menu items"
68
+ }
69
+ ],
70
+ "sizes": [
71
+ {
72
+ "name": "menu-xs",
73
+ "className": "menu-xs",
74
+ "description": "Extra small menu items"
75
+ },
76
+ {
77
+ "name": "menu-sm",
78
+ "className": "menu-sm",
79
+ "description": "Small menu items"
80
+ },
81
+ {
82
+ "name": "menu-lg",
83
+ "className": "menu-lg",
84
+ "description": "Large menu items"
85
+ },
86
+ {
87
+ "name": "menu-rounded-sm",
88
+ "className": "menu-rounded-sm",
89
+ "description": "Applies small rounded corners to menu items"
90
+ },
91
+ {
92
+ "name": "menu-rounded-lg",
93
+ "className": "menu-rounded-lg",
94
+ "description": "Applies large rounded corners to menu items"
95
+ }
96
+ ],
97
+ "states": [
98
+ {
99
+ "name": "details[open]",
100
+ "className": "details[open]",
101
+ "description": "State for open collapsible menu"
102
+ }
103
+ ],
104
+ "structure": {
105
+ "rootElement": "a",
106
+ "requiredClasses": [
107
+ "menu"
108
+ ],
109
+ "optionalClasses": [
110
+ "menu-dropdown-toggle",
111
+ "menu-dropdown-show",
112
+ "menu-horizontal",
113
+ "menu-check",
114
+ "active",
115
+ "disabled",
116
+ "menu-rounded-none",
117
+ "menu-rounded-full",
118
+ "menu-xs",
119
+ "menu-sm",
120
+ "menu-lg",
121
+ "menu-rounded-sm",
122
+ "menu-rounded-lg",
123
+ "details[open]"
124
+ ],
125
+ "requiredChildren": [],
126
+ "optionalChildren": []
127
+ },
128
+ "attributes": {
129
+ "allowed": [
130
+ "class",
131
+ "id",
132
+ "tabindex"
133
+ ],
134
+ "required": [],
135
+ "dataAttributes": [],
136
+ "roles": [],
137
+ "aria": []
138
+ },
139
+ "a11y": {
140
+ "interactive": true,
141
+ "requiredRoles": [],
142
+ "requiredAria": [
143
+ "aria-label (when no visible label)"
144
+ ],
145
+ "keyboardSupport": [
146
+ "Tab",
147
+ "Shift+Tab",
148
+ "Enter",
149
+ "Space"
150
+ ],
151
+ "focusBehavior": "Visible focus state is required when the component is focusable or clickable."
152
+ },
153
+ "dos": [
154
+ "Apply the base class 'menu' on the root element.",
155
+ "Use documented modifiers for visual variants instead of ad-hoc custom classes.",
156
+ "Keep semantic color usage aligned with token classes for light/dark support."
157
+ ],
158
+ "donts": [
159
+ "Do not combine conflicting state classes on the same element.",
160
+ "Do not rely on undocumented internal classes in production templates.",
161
+ "Do not remove required accessibility attributes when component is interactive."
162
+ ],
163
+ "tokenUsage": [
164
+ "background-brand",
165
+ "background-surface",
166
+ "line-brand",
167
+ "line-default",
168
+ "text-brand",
169
+ "text-default",
170
+ "text-disabled",
171
+ "text-secondary",
172
+ "text-tertiary"
173
+ ],
174
+ "examples": [
175
+ {
176
+ "id": "canonical",
177
+ "file": "examples/menu.html",
178
+ "description": "Minimal canonical Menu usage."
179
+ }
180
+ ],
181
+ "composition": {
182
+ "patterns": [
183
+ "navigation-hierarchy"
184
+ ],
185
+ "relatedComponents": [],
186
+ "notes": []
187
+ },
188
+ "breakingChangePolicy": {
189
+ "classContract": "Base class, documented modifiers, and state class names are semver-protected for consumer markup.",
190
+ "a11yContract": "Documented role and aria requirements are semver-protected for generated markup."
191
+ }
192
+ }
@@ -0,0 +1,167 @@
1
+ {
2
+ "id": "modal",
3
+ "name": "Modal",
4
+ "status": "stable",
5
+ "summary": "Modal dialogs for displaying content that requires attention or user input.",
6
+ "keywords": [
7
+ "alert",
8
+ "attention",
9
+ "content",
10
+ "dialog",
11
+ "focus",
12
+ "form",
13
+ "interaction",
14
+ "layer",
15
+ "lightbox",
16
+ "message",
17
+ "modal",
18
+ "notification",
19
+ "overlay",
20
+ "panel",
21
+ "popup",
22
+ "screen",
23
+ "window"
24
+ ],
25
+ "sourcePaths": [
26
+ "app/design-system/modal/page.js",
27
+ "assets/styles/modal.css"
28
+ ],
29
+ "apiModel": "html-class",
30
+ "baseClass": "modal",
31
+ "variants": [
32
+ {
33
+ "name": "modal-sticky-header",
34
+ "className": "modal-sticky-header",
35
+ "description": "Sticky header variant"
36
+ },
37
+ {
38
+ "name": "modal-sticky-footer",
39
+ "className": "modal-sticky-footer",
40
+ "description": "Sticky footer variant"
41
+ },
42
+ {
43
+ "name": "modal-full",
44
+ "className": "modal-full",
45
+ "description": "Full screen modal"
46
+ }
47
+ ],
48
+ "sizes": [
49
+ {
50
+ "name": "modal-sm",
51
+ "className": "modal-sm",
52
+ "description": "Small width variant (max-w-md)"
53
+ },
54
+ {
55
+ "name": "modal-md",
56
+ "className": "modal-md",
57
+ "description": "Medium width variant (max-w-xl)"
58
+ },
59
+ {
60
+ "name": "modal-lg",
61
+ "className": "modal-lg",
62
+ "description": "Large width variant (max-w-3xl)"
63
+ },
64
+ {
65
+ "name": "modal-xl",
66
+ "className": "modal-xl",
67
+ "description": "Extra large width variant (max-w-4xl)"
68
+ }
69
+ ],
70
+ "states": [],
71
+ "structure": {
72
+ "rootElement": "dialog",
73
+ "requiredClasses": [
74
+ "modal"
75
+ ],
76
+ "optionalClasses": [
77
+ "modal-sticky-header",
78
+ "modal-sticky-footer",
79
+ "modal-full",
80
+ "modal-sm",
81
+ "modal-md",
82
+ "modal-lg",
83
+ "modal-xl"
84
+ ],
85
+ "requiredChildren": [],
86
+ "optionalChildren": []
87
+ },
88
+ "attributes": {
89
+ "allowed": [
90
+ "class",
91
+ "open",
92
+ "role",
93
+ "aria-modal",
94
+ "aria-labelledby",
95
+ "aria-describedby"
96
+ ],
97
+ "required": [
98
+ "role",
99
+ "aria-modal"
100
+ ],
101
+ "dataAttributes": [],
102
+ "roles": [
103
+ "dialog"
104
+ ],
105
+ "aria": [
106
+ "aria-modal",
107
+ "aria-labelledby",
108
+ "aria-describedby"
109
+ ]
110
+ },
111
+ "a11y": {
112
+ "interactive": true,
113
+ "requiredRoles": [
114
+ "dialog"
115
+ ],
116
+ "requiredAria": [
117
+ "aria-modal",
118
+ "aria-labelledby"
119
+ ],
120
+ "keyboardSupport": [
121
+ "Tab",
122
+ "Shift+Tab",
123
+ "Escape",
124
+ "Enter"
125
+ ],
126
+ "focusBehavior": "When opened, focus moves inside the modal and returns to the trigger when closed."
127
+ },
128
+ "dos": [
129
+ "Use modals only for blocking, decision-critical flows.",
130
+ "Include a visible close action and Escape key support.",
131
+ "Set `aria-labelledby` to the modal title and keep title concise."
132
+ ],
133
+ "donts": [
134
+ "Do not open nested modals.",
135
+ "Do not trap focus without a keyboard-accessible close action.",
136
+ "Do not place long-form navigation inside modal dialogs."
137
+ ],
138
+ "tokenUsage": [
139
+ "background-overlay",
140
+ "background-surface",
141
+ "line-default"
142
+ ],
143
+ "examples": [
144
+ {
145
+ "id": "canonical",
146
+ "file": "examples/modal.html",
147
+ "description": "Minimal canonical Modal usage."
148
+ }
149
+ ],
150
+ "composition": {
151
+ "patterns": [
152
+ "feedback-and-status"
153
+ ],
154
+ "relatedComponents": [
155
+ "button",
156
+ "state",
157
+ "toast"
158
+ ],
159
+ "notes": [
160
+ "Use modal footer actions in deterministic order: secondary cancel before primary confirm."
161
+ ]
162
+ },
163
+ "breakingChangePolicy": {
164
+ "classContract": "Base class, documented modifiers, and state class names are semver-protected for consumer markup.",
165
+ "a11yContract": "Documented role and aria requirements are semver-protected for generated markup."
166
+ }
167
+ }