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,104 @@
1
+ {
2
+ "id": "divider",
3
+ "name": "Divider",
4
+ "status": "stable",
5
+ "summary": "Divider component to separate content with an optional label.",
6
+ "keywords": [
7
+ "border",
8
+ "break",
9
+ "divider",
10
+ "division",
11
+ "horizontal",
12
+ "hr",
13
+ "line",
14
+ "rule",
15
+ "separator",
16
+ "spacer",
17
+ "split"
18
+ ],
19
+ "sourcePaths": [
20
+ "app/design-system/divider/page.js",
21
+ "assets/styles/divider.css"
22
+ ],
23
+ "apiModel": "html-class",
24
+ "baseClass": "divider",
25
+ "variants": [
26
+ {
27
+ "name": "divider-horizontal",
28
+ "className": "divider-horizontal",
29
+ "description": "Makes the divider horizontal"
30
+ },
31
+ {
32
+ "name": "divider-start",
33
+ "className": "divider-start",
34
+ "description": "Aligns content to the start"
35
+ },
36
+ {
37
+ "name": "divider-end",
38
+ "className": "divider-end",
39
+ "description": "Aligns content to the end"
40
+ }
41
+ ],
42
+ "sizes": [],
43
+ "states": [],
44
+ "structure": {
45
+ "rootElement": "div",
46
+ "requiredClasses": [
47
+ "divider"
48
+ ],
49
+ "optionalClasses": [
50
+ "divider-horizontal",
51
+ "divider-start",
52
+ "divider-end"
53
+ ],
54
+ "requiredChildren": [],
55
+ "optionalChildren": []
56
+ },
57
+ "attributes": {
58
+ "allowed": [
59
+ "class"
60
+ ],
61
+ "required": [],
62
+ "dataAttributes": [],
63
+ "roles": [],
64
+ "aria": []
65
+ },
66
+ "a11y": {
67
+ "interactive": false,
68
+ "requiredRoles": [],
69
+ "requiredAria": [],
70
+ "keyboardSupport": [],
71
+ "focusBehavior": "No keyboard interaction is required unless nested interactive children are introduced."
72
+ },
73
+ "dos": [
74
+ "Apply the base class 'divider' on the root element.",
75
+ "Use documented modifiers for visual variants instead of ad-hoc custom classes.",
76
+ "Keep semantic color usage aligned with token classes for light/dark support."
77
+ ],
78
+ "donts": [
79
+ "Do not combine conflicting state classes on the same element.",
80
+ "Do not rely on undocumented internal classes in production templates.",
81
+ "Do not remove required accessibility attributes when component is interactive."
82
+ ],
83
+ "tokenUsage": [
84
+ "line-default",
85
+ "line-highlight",
86
+ "text-tertiary"
87
+ ],
88
+ "examples": [
89
+ {
90
+ "id": "canonical",
91
+ "file": "examples/divider.html",
92
+ "description": "Minimal canonical Divider usage."
93
+ }
94
+ ],
95
+ "composition": {
96
+ "patterns": [],
97
+ "relatedComponents": [],
98
+ "notes": []
99
+ },
100
+ "breakingChangePolicy": {
101
+ "classContract": "Base class, documented modifiers, and state class names are semver-protected for consumer markup.",
102
+ "a11yContract": "Documented role and aria requirements are semver-protected for generated markup."
103
+ }
104
+ }
@@ -0,0 +1,80 @@
1
+ {
2
+ "id": "empty-state",
3
+ "name": "Empty state",
4
+ "status": "stable",
5
+ "summary": "Empty state patterns to communicate no-content situations and guide next actions.",
6
+ "keywords": [
7
+ "blank state",
8
+ "empty state",
9
+ "empty-state",
10
+ "no data",
11
+ "placeholder",
12
+ "zero state"
13
+ ],
14
+ "sourcePaths": [
15
+ "app/design-system/empty-state/page.js",
16
+ "assets/styles/empty-state.css"
17
+ ],
18
+ "apiModel": "html-class",
19
+ "baseClass": "empty-state",
20
+ "variants": [],
21
+ "sizes": [],
22
+ "states": [],
23
+ "structure": {
24
+ "rootElement": "div",
25
+ "requiredClasses": [
26
+ "empty-state"
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 'empty-state' 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
+ "background-surface",
60
+ "line-default",
61
+ "text-secondary",
62
+ "text-tertiary"
63
+ ],
64
+ "examples": [
65
+ {
66
+ "id": "canonical",
67
+ "file": "examples/empty-state.html",
68
+ "description": "Minimal canonical Empty state usage."
69
+ }
70
+ ],
71
+ "composition": {
72
+ "patterns": [],
73
+ "relatedComponents": [],
74
+ "notes": []
75
+ },
76
+ "breakingChangePolicy": {
77
+ "classContract": "Base class, documented modifiers, and state class names are semver-protected for consumer markup.",
78
+ "a11yContract": "Documented role and aria requirements are semver-protected for generated markup."
79
+ }
80
+ }
@@ -0,0 +1,123 @@
1
+ {
2
+ "id": "field",
3
+ "name": "Field",
4
+ "status": "stable",
5
+ "summary": "Field composition pattern that pairs labels, helper text, and validation messages with controls.",
6
+ "keywords": [
7
+ "error",
8
+ "field",
9
+ "form field",
10
+ "helper text",
11
+ "label",
12
+ "validation"
13
+ ],
14
+ "sourcePaths": [
15
+ "app/design-system/field/page.js",
16
+ "assets/styles/field.css",
17
+ "assets/styles/form-fileupload.css",
18
+ "assets/styles/form-text-select.css"
19
+ ],
20
+ "apiModel": "html-class",
21
+ "baseClass": "field",
22
+ "variants": [],
23
+ "sizes": [],
24
+ "states": [
25
+ {
26
+ "name": "has-error",
27
+ "className": "has-error",
28
+ "description": "Applies error state to the field and helper message."
29
+ }
30
+ ],
31
+ "structure": {
32
+ "rootElement": "input",
33
+ "requiredClasses": [
34
+ "field"
35
+ ],
36
+ "optionalClasses": [
37
+ "has-error"
38
+ ],
39
+ "requiredChildren": [],
40
+ "optionalChildren": []
41
+ },
42
+ "attributes": {
43
+ "allowed": [
44
+ "class"
45
+ ],
46
+ "required": [],
47
+ "dataAttributes": [],
48
+ "roles": [],
49
+ "aria": []
50
+ },
51
+ "a11y": {
52
+ "interactive": false,
53
+ "requiredRoles": [],
54
+ "requiredAria": [],
55
+ "keyboardSupport": [],
56
+ "focusBehavior": "No keyboard interaction is required unless nested interactive children are introduced."
57
+ },
58
+ "dos": [
59
+ "Apply the base class 'field' on the root element.",
60
+ "Use documented modifiers for visual variants instead of ad-hoc custom classes.",
61
+ "Keep semantic color usage aligned with token classes for light/dark support."
62
+ ],
63
+ "donts": [
64
+ "Do not combine conflicting state classes on the same element.",
65
+ "Do not rely on undocumented internal classes in production templates.",
66
+ "Do not remove required accessibility attributes when component is interactive."
67
+ ],
68
+ "tokenUsage": [
69
+ "background-brand",
70
+ "background-error",
71
+ "background-error-active",
72
+ "background-info",
73
+ "background-success",
74
+ "background-success-active",
75
+ "background-surface",
76
+ "background-surface-sunken",
77
+ "background-warning",
78
+ "brand-moderate",
79
+ "brand-strong",
80
+ "core-black",
81
+ "core-ui-100",
82
+ "core-ui-50",
83
+ "core-ui-700",
84
+ "core-ui-800",
85
+ "core-ui-900",
86
+ "core-white",
87
+ "line-brand",
88
+ "line-default",
89
+ "line-error",
90
+ "line-focus",
91
+ "line-highlight",
92
+ "line-info",
93
+ "line-strong",
94
+ "line-success",
95
+ "line-warning",
96
+ "text-default",
97
+ "text-disabled",
98
+ "text-error",
99
+ "text-info",
100
+ "text-secondary",
101
+ "text-success",
102
+ "text-tertiary",
103
+ "text-warning"
104
+ ],
105
+ "examples": [
106
+ {
107
+ "id": "canonical",
108
+ "file": "examples/field.html",
109
+ "description": "Minimal canonical Field usage."
110
+ }
111
+ ],
112
+ "composition": {
113
+ "patterns": [
114
+ "form-field-composition"
115
+ ],
116
+ "relatedComponents": [],
117
+ "notes": []
118
+ },
119
+ "breakingChangePolicy": {
120
+ "classContract": "Base class, documented modifiers, and state class names are semver-protected for consumer markup.",
121
+ "a11yContract": "Documented role and aria requirements are semver-protected for generated markup."
122
+ }
123
+ }
@@ -0,0 +1,78 @@
1
+ {
2
+ "id": "fieldset",
3
+ "name": "Fieldset",
4
+ "status": "stable",
5
+ "summary": "Fieldset pattern for grouping related controls with a semantic legend.",
6
+ "keywords": [
7
+ "fieldset",
8
+ "form group",
9
+ "group",
10
+ "legend",
11
+ "options"
12
+ ],
13
+ "sourcePaths": [
14
+ "app/design-system/fieldset/page.js",
15
+ "assets/styles/fieldset.css"
16
+ ],
17
+ "apiModel": "html-class",
18
+ "baseClass": "fieldset",
19
+ "variants": [],
20
+ "sizes": [],
21
+ "states": [],
22
+ "structure": {
23
+ "rootElement": "input",
24
+ "requiredClasses": [
25
+ "fieldset"
26
+ ],
27
+ "optionalClasses": [],
28
+ "requiredChildren": [],
29
+ "optionalChildren": []
30
+ },
31
+ "attributes": {
32
+ "allowed": [
33
+ "class"
34
+ ],
35
+ "required": [],
36
+ "dataAttributes": [],
37
+ "roles": [],
38
+ "aria": []
39
+ },
40
+ "a11y": {
41
+ "interactive": false,
42
+ "requiredRoles": [],
43
+ "requiredAria": [],
44
+ "keyboardSupport": [],
45
+ "focusBehavior": "No keyboard interaction is required unless nested interactive children are introduced."
46
+ },
47
+ "dos": [
48
+ "Apply the base class 'fieldset' on the root element.",
49
+ "Use documented modifiers for visual variants instead of ad-hoc custom classes.",
50
+ "Keep semantic color usage aligned with token classes for light/dark support."
51
+ ],
52
+ "donts": [
53
+ "Do not combine conflicting state classes on the same element.",
54
+ "Do not rely on undocumented internal classes in production templates.",
55
+ "Do not remove required accessibility attributes when component is interactive."
56
+ ],
57
+ "tokenUsage": [
58
+ "text-default"
59
+ ],
60
+ "examples": [
61
+ {
62
+ "id": "canonical",
63
+ "file": "examples/fieldset.html",
64
+ "description": "Minimal canonical Fieldset usage."
65
+ }
66
+ ],
67
+ "composition": {
68
+ "patterns": [
69
+ "form-field-composition"
70
+ ],
71
+ "relatedComponents": [],
72
+ "notes": []
73
+ },
74
+ "breakingChangePolicy": {
75
+ "classContract": "Base class, documented modifiers, and state class names are semver-protected for consumer markup.",
76
+ "a11yContract": "Documented role and aria requirements are semver-protected for generated markup."
77
+ }
78
+ }
@@ -0,0 +1,163 @@
1
+ {
2
+ "id": "file-upload",
3
+ "name": "File upload",
4
+ "status": "stable",
5
+ "summary": "File upload components for single and multiple files with drag and drop support.",
6
+ "keywords": [
7
+ "attachment",
8
+ "browse",
9
+ "document",
10
+ "drag and drop",
11
+ "dropzone",
12
+ "file",
13
+ "file upload",
14
+ "file-upload",
15
+ "form",
16
+ "import",
17
+ "input",
18
+ "select",
19
+ "transfer",
20
+ "upload",
21
+ "uploader"
22
+ ],
23
+ "sourcePaths": [
24
+ "app/design-system/file-upload/page.js",
25
+ "assets/styles/field.css",
26
+ "assets/styles/form-fileupload.css",
27
+ "assets/styles/form-text-select.css"
28
+ ],
29
+ "apiModel": "html-class",
30
+ "baseClass": "file-upload",
31
+ "variants": [
32
+ {
33
+ "name": "file-upload-error",
34
+ "className": "file-upload-error",
35
+ "description": "Error state styling"
36
+ },
37
+ {
38
+ "name": "file-upload-disabled",
39
+ "className": "file-upload-disabled",
40
+ "description": "Disabled state styling"
41
+ }
42
+ ],
43
+ "sizes": [],
44
+ "states": [
45
+ {
46
+ "name": "is-uploading",
47
+ "className": "is-uploading",
48
+ "description": "Shows uploading state with progress bar"
49
+ },
50
+ {
51
+ "name": "is-uploaded",
52
+ "className": "is-uploaded",
53
+ "description": "Shows success state after upload completion"
54
+ },
55
+ {
56
+ "name": "has-error",
57
+ "className": "has-error",
58
+ "description": "Shows error state when upload fails"
59
+ }
60
+ ],
61
+ "structure": {
62
+ "rootElement": "input",
63
+ "requiredClasses": [
64
+ "file-upload"
65
+ ],
66
+ "optionalClasses": [
67
+ "file-upload-error",
68
+ "file-upload-disabled",
69
+ "is-uploading",
70
+ "is-uploaded",
71
+ "has-error"
72
+ ],
73
+ "requiredChildren": [],
74
+ "optionalChildren": []
75
+ },
76
+ "attributes": {
77
+ "allowed": [
78
+ "class"
79
+ ],
80
+ "required": [],
81
+ "dataAttributes": [],
82
+ "roles": [
83
+ "progressbar"
84
+ ],
85
+ "aria": [
86
+ "aria-label"
87
+ ]
88
+ },
89
+ "a11y": {
90
+ "interactive": false,
91
+ "requiredRoles": [
92
+ "progressbar"
93
+ ],
94
+ "requiredAria": [
95
+ "aria-label"
96
+ ],
97
+ "keyboardSupport": [],
98
+ "focusBehavior": "No keyboard interaction is required unless nested interactive children are introduced."
99
+ },
100
+ "dos": [
101
+ "Apply the base class 'file-upload' on the root element.",
102
+ "Use documented modifiers for visual variants instead of ad-hoc custom classes.",
103
+ "Keep semantic color usage aligned with token classes for light/dark support."
104
+ ],
105
+ "donts": [
106
+ "Do not combine conflicting state classes on the same element.",
107
+ "Do not rely on undocumented internal classes in production templates.",
108
+ "Do not remove required accessibility attributes when component is interactive."
109
+ ],
110
+ "tokenUsage": [
111
+ "background-brand",
112
+ "background-error",
113
+ "background-error-active",
114
+ "background-info",
115
+ "background-success",
116
+ "background-success-active",
117
+ "background-surface",
118
+ "background-surface-sunken",
119
+ "background-warning",
120
+ "brand-moderate",
121
+ "brand-strong",
122
+ "core-black",
123
+ "core-ui-100",
124
+ "core-ui-50",
125
+ "core-ui-700",
126
+ "core-ui-800",
127
+ "core-ui-900",
128
+ "core-white",
129
+ "line-brand",
130
+ "line-default",
131
+ "line-error",
132
+ "line-focus",
133
+ "line-highlight",
134
+ "line-info",
135
+ "line-strong",
136
+ "line-success",
137
+ "line-warning",
138
+ "text-default",
139
+ "text-disabled",
140
+ "text-error",
141
+ "text-info",
142
+ "text-secondary",
143
+ "text-success",
144
+ "text-tertiary",
145
+ "text-warning"
146
+ ],
147
+ "examples": [
148
+ {
149
+ "id": "canonical",
150
+ "file": "examples/file-upload.html",
151
+ "description": "Minimal canonical File upload usage."
152
+ }
153
+ ],
154
+ "composition": {
155
+ "patterns": [],
156
+ "relatedComponents": [],
157
+ "notes": []
158
+ },
159
+ "breakingChangePolicy": {
160
+ "classContract": "Base class, documented modifiers, and state class names are semver-protected for consumer markup.",
161
+ "a11yContract": "Documented role and aria requirements are semver-protected for generated markup."
162
+ }
163
+ }
@@ -0,0 +1,82 @@
1
+ {
2
+ "id": "form-example",
3
+ "name": "Form example",
4
+ "status": "preview",
5
+ "summary": "Complete form example using all form components.",
6
+ "keywords": [
7
+ "complete",
8
+ "components",
9
+ "demo",
10
+ "example",
11
+ "fields",
12
+ "form",
13
+ "form example",
14
+ "form-example",
15
+ "inputs",
16
+ "interactive",
17
+ "showcase",
18
+ "submission",
19
+ "template",
20
+ "validation"
21
+ ],
22
+ "sourcePaths": [
23
+ "app/design-system/form-example/page.js"
24
+ ],
25
+ "apiModel": "html-class",
26
+ "baseClass": "form-example",
27
+ "variants": [],
28
+ "sizes": [],
29
+ "states": [],
30
+ "structure": {
31
+ "rootElement": "div",
32
+ "requiredClasses": [
33
+ "form-example"
34
+ ],
35
+ "optionalClasses": [],
36
+ "requiredChildren": [],
37
+ "optionalChildren": []
38
+ },
39
+ "attributes": {
40
+ "allowed": [
41
+ "class"
42
+ ],
43
+ "required": [],
44
+ "dataAttributes": [],
45
+ "roles": [],
46
+ "aria": []
47
+ },
48
+ "a11y": {
49
+ "interactive": false,
50
+ "requiredRoles": [],
51
+ "requiredAria": [],
52
+ "keyboardSupport": [],
53
+ "focusBehavior": "No keyboard interaction is required unless nested interactive children are introduced."
54
+ },
55
+ "dos": [
56
+ "Apply the base class 'form-example' on the root element.",
57
+ "Use documented modifiers for visual variants instead of ad-hoc custom classes.",
58
+ "Keep semantic color usage aligned with token classes for light/dark support."
59
+ ],
60
+ "donts": [
61
+ "Do not combine conflicting state classes on the same element.",
62
+ "Do not rely on undocumented internal classes in production templates.",
63
+ "Do not remove required accessibility attributes when component is interactive."
64
+ ],
65
+ "tokenUsage": [],
66
+ "examples": [
67
+ {
68
+ "id": "canonical",
69
+ "file": "examples/form-example.html",
70
+ "description": "Minimal canonical Form example usage."
71
+ }
72
+ ],
73
+ "composition": {
74
+ "patterns": [],
75
+ "relatedComponents": [],
76
+ "notes": []
77
+ },
78
+ "breakingChangePolicy": {
79
+ "classContract": "Base class, documented modifiers, and state class names are semver-protected for consumer markup.",
80
+ "a11yContract": "Documented role and aria requirements are semver-protected for generated markup."
81
+ }
82
+ }
@@ -0,0 +1,70 @@
1
+ {
2
+ "id": "getting-started",
3
+ "name": "Getting Started",
4
+ "status": "preview",
5
+ "summary": "Documentation and contract metadata for Getting Started in the twntyX design system.",
6
+ "keywords": [
7
+ "getting started",
8
+ "getting-started"
9
+ ],
10
+ "sourcePaths": [
11
+ "app/design-system/getting-started/page.js"
12
+ ],
13
+ "apiModel": "html-class",
14
+ "baseClass": "getting-started",
15
+ "variants": [],
16
+ "sizes": [],
17
+ "states": [],
18
+ "structure": {
19
+ "rootElement": "div",
20
+ "requiredClasses": [
21
+ "getting-started"
22
+ ],
23
+ "optionalClasses": [],
24
+ "requiredChildren": [],
25
+ "optionalChildren": []
26
+ },
27
+ "attributes": {
28
+ "allowed": [
29
+ "class"
30
+ ],
31
+ "required": [],
32
+ "dataAttributes": [],
33
+ "roles": [],
34
+ "aria": []
35
+ },
36
+ "a11y": {
37
+ "interactive": false,
38
+ "requiredRoles": [],
39
+ "requiredAria": [],
40
+ "keyboardSupport": [],
41
+ "focusBehavior": "No keyboard interaction is required unless nested interactive children are introduced."
42
+ },
43
+ "dos": [
44
+ "Apply the base class 'getting-started' on the root element.",
45
+ "Use documented modifiers for visual variants instead of ad-hoc custom classes.",
46
+ "Keep semantic color usage aligned with token classes for light/dark support."
47
+ ],
48
+ "donts": [
49
+ "Do not combine conflicting state classes on the same element.",
50
+ "Do not rely on undocumented internal classes in production templates.",
51
+ "Do not remove required accessibility attributes when component is interactive."
52
+ ],
53
+ "tokenUsage": [],
54
+ "examples": [
55
+ {
56
+ "id": "canonical",
57
+ "file": "examples/getting-started.html",
58
+ "description": "Minimal canonical Getting Started usage."
59
+ }
60
+ ],
61
+ "composition": {
62
+ "patterns": [],
63
+ "relatedComponents": [],
64
+ "notes": []
65
+ },
66
+ "breakingChangePolicy": {
67
+ "classContract": "Base class, documented modifiers, and state class names are semver-protected for consumer markup.",
68
+ "a11yContract": "Documented role and aria requirements are semver-protected for generated markup."
69
+ }
70
+ }