@ttdk-design-system/library-vue 0.0.0-stage → 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 (232) hide show
  1. package/AI_GUIDE.md +6518 -0
  2. package/llms.txt +6518 -0
  3. package/package.json +1096 -4
  4. package/src/core/index.ts +2 -0
  5. package/src/core/tailwind-preset.cjs +62 -0
  6. package/src/core/tailwind-preset.ts +85 -0
  7. package/src/core/theme/tokens.css +663 -0
  8. package/src/core/types.ts +836 -0
  9. package/src/index.ts +17 -0
  10. package/src/tailwind-preset.cjs +62 -0
  11. package/src/tailwind-preset.ts +85 -0
  12. package/src/types.ts +1 -0
  13. package/src/web/accordion/AI_GUIDE.md +149 -0
  14. package/src/web/accordion/accordion.css +1 -0
  15. package/src/web/accordion/accordion.vue +432 -0
  16. package/src/web/accordion/accordion.vue.d.ts +227 -0
  17. package/src/web/accordion/index.ts +3 -0
  18. package/src/web/accordion/manifest.json +351 -0
  19. package/src/web/alert/AI_GUIDE.md +139 -0
  20. package/src/web/alert/alert.css +1 -0
  21. package/src/web/alert/alert.vue +290 -0
  22. package/src/web/alert/alert.vue.d.ts +154 -0
  23. package/src/web/alert/index.ts +3 -0
  24. package/src/web/alert/manifest.json +240 -0
  25. package/src/web/avatar/AI_GUIDE.md +118 -0
  26. package/src/web/avatar/avatar.css +1 -0
  27. package/src/web/avatar/avatar.vue +217 -0
  28. package/src/web/avatar/avatar.vue.d.ts +135 -0
  29. package/src/web/avatar/index.ts +3 -0
  30. package/src/web/avatar/manifest.json +195 -0
  31. package/src/web/badge/AI_GUIDE.md +94 -0
  32. package/src/web/badge/badge.css +1 -0
  33. package/src/web/badge/badge.vue +135 -0
  34. package/src/web/badge/badge.vue.d.ts +108 -0
  35. package/src/web/badge/index.ts +3 -0
  36. package/src/web/badge/manifest.json +141 -0
  37. package/src/web/banner/AI_GUIDE.md +130 -0
  38. package/src/web/banner/banner.css +1 -0
  39. package/src/web/banner/banner.vue +303 -0
  40. package/src/web/banner/banner.vue.d.ts +162 -0
  41. package/src/web/banner/index.ts +3 -0
  42. package/src/web/banner/manifest.json +240 -0
  43. package/src/web/breadcrumb/AI_GUIDE.md +120 -0
  44. package/src/web/breadcrumb/breadcrumb.css +1 -0
  45. package/src/web/breadcrumb/breadcrumb.vue +313 -0
  46. package/src/web/breadcrumb/breadcrumb.vue.d.ts +139 -0
  47. package/src/web/breadcrumb/index.ts +3 -0
  48. package/src/web/breadcrumb/manifest.json +225 -0
  49. package/src/web/button/AI_GUIDE.md +121 -0
  50. package/src/web/button/button.css +1 -0
  51. package/src/web/button/button.vue +283 -0
  52. package/src/web/button/button.vue.d.ts +147 -0
  53. package/src/web/button/index.ts +3 -0
  54. package/src/web/button/manifest.json +177 -0
  55. package/src/web/calendar/AI_GUIDE.md +151 -0
  56. package/src/web/calendar/calendar.css +1 -0
  57. package/src/web/calendar/calendar.vue +1536 -0
  58. package/src/web/calendar/calendar.vue.d.ts +261 -0
  59. package/src/web/calendar/index.ts +3 -0
  60. package/src/web/calendar/manifest.json +470 -0
  61. package/src/web/card/AI_GUIDE.md +133 -0
  62. package/src/web/card/card.css +1 -0
  63. package/src/web/card/card.vue +423 -0
  64. package/src/web/card/card.vue.d.ts +232 -0
  65. package/src/web/card/index.ts +3 -0
  66. package/src/web/card/manifest.json +357 -0
  67. package/src/web/checkbox/AI_GUIDE.md +146 -0
  68. package/src/web/checkbox/checkbox.css +1 -0
  69. package/src/web/checkbox/checkbox.vue +304 -0
  70. package/src/web/checkbox/checkbox.vue.d.ts +189 -0
  71. package/src/web/checkbox/index.ts +3 -0
  72. package/src/web/checkbox/manifest.json +294 -0
  73. package/src/web/chip/AI_GUIDE.md +186 -0
  74. package/src/web/chip/chip.css +1 -0
  75. package/src/web/chip/chip.vue +220 -0
  76. package/src/web/chip/chip.vue.d.ts +140 -0
  77. package/src/web/chip/index.ts +3 -0
  78. package/src/web/chip/manifest.json +186 -0
  79. package/src/web/dropdown/AI_GUIDE.md +167 -0
  80. package/src/web/dropdown/dropdown.css +1 -0
  81. package/src/web/dropdown/dropdown.vue +1257 -0
  82. package/src/web/dropdown/dropdown.vue.d.ts +381 -0
  83. package/src/web/dropdown/index.ts +3 -0
  84. package/src/web/dropdown/manifest.json +576 -0
  85. package/src/web/flex/AI_GUIDE.md +113 -0
  86. package/src/web/flex/flex-item.vue +94 -0
  87. package/src/web/flex/flex-item.vue.d.ts +84 -0
  88. package/src/web/flex/flex.css +1 -0
  89. package/src/web/flex/flex.vue +103 -0
  90. package/src/web/flex/flex.vue.d.ts +92 -0
  91. package/src/web/flex/index.ts +5 -0
  92. package/src/web/flex/manifest.json +162 -0
  93. package/src/web/form/index.ts +7 -0
  94. package/src/web/grid/AI_GUIDE.md +112 -0
  95. package/src/web/grid/grid-item.vue +109 -0
  96. package/src/web/grid/grid-item.vue.d.ts +99 -0
  97. package/src/web/grid/grid.css +1 -0
  98. package/src/web/grid/grid.vue +94 -0
  99. package/src/web/grid/grid.vue.d.ts +84 -0
  100. package/src/web/grid/index.ts +5 -0
  101. package/src/web/grid/manifest.json +153 -0
  102. package/src/web/index.ts +86 -0
  103. package/src/web/input/AI_GUIDE.md +159 -0
  104. package/src/web/input/index.ts +3 -0
  105. package/src/web/input/input.css +1 -0
  106. package/src/web/input/input.vue +521 -0
  107. package/src/web/input/input.vue.d.ts +274 -0
  108. package/src/web/input/manifest.json +465 -0
  109. package/src/web/input-number/AI_GUIDE.md +164 -0
  110. package/src/web/input-number/index.ts +3 -0
  111. package/src/web/input-number/input-number.css +1 -0
  112. package/src/web/input-number/input-number.vue +1153 -0
  113. package/src/web/input-number/input-number.vue.d.ts +343 -0
  114. package/src/web/input-number/manifest.json +575 -0
  115. package/src/web/modal/AI_GUIDE.md +171 -0
  116. package/src/web/modal/index.ts +3 -0
  117. package/src/web/modal/manifest.json +375 -0
  118. package/src/web/modal/modal.css +1 -0
  119. package/src/web/modal/modal.vue +344 -0
  120. package/src/web/modal/modal.vue.d.ts +64 -0
  121. package/src/web/pagination/AI_GUIDE.md +148 -0
  122. package/src/web/pagination/index.ts +21 -0
  123. package/src/web/pagination/manifest.json +432 -0
  124. package/src/web/pagination/pagination-content.vue +42 -0
  125. package/src/web/pagination/pagination-content.vue.d.ts +28 -0
  126. package/src/web/pagination/pagination-ellipsis.vue +55 -0
  127. package/src/web/pagination/pagination-ellipsis.vue.d.ts +28 -0
  128. package/src/web/pagination/pagination-first.vue +161 -0
  129. package/src/web/pagination/pagination-first.vue.d.ts +67 -0
  130. package/src/web/pagination/pagination-item.vue +42 -0
  131. package/src/web/pagination/pagination-item.vue.d.ts +28 -0
  132. package/src/web/pagination/pagination-last.vue +161 -0
  133. package/src/web/pagination/pagination-last.vue.d.ts +67 -0
  134. package/src/web/pagination/pagination-link.vue +118 -0
  135. package/src/web/pagination/pagination-link.vue.d.ts +61 -0
  136. package/src/web/pagination/pagination-next.vue +160 -0
  137. package/src/web/pagination/pagination-next.vue.d.ts +68 -0
  138. package/src/web/pagination/pagination-previous.vue +160 -0
  139. package/src/web/pagination/pagination-previous.vue.d.ts +68 -0
  140. package/src/web/pagination/pagination.css +1 -0
  141. package/src/web/pagination/pagination.vue +730 -0
  142. package/src/web/pagination/pagination.vue.d.ts +247 -0
  143. package/src/web/popover/AI_GUIDE.md +163 -0
  144. package/src/web/popover/index.ts +3 -0
  145. package/src/web/popover/manifest.json +396 -0
  146. package/src/web/popover/popover.css +1 -0
  147. package/src/web/popover/popover.vue +579 -0
  148. package/src/web/popover/popover.vue.d.ts +83 -0
  149. package/src/web/radio/AI_GUIDE.md +155 -0
  150. package/src/web/radio/index.ts +3 -0
  151. package/src/web/radio/manifest.json +294 -0
  152. package/src/web/radio/radio.css +1 -0
  153. package/src/web/radio/radio.vue +288 -0
  154. package/src/web/radio/radio.vue.d.ts +182 -0
  155. package/src/web/selectbox/AI_GUIDE.md +216 -0
  156. package/src/web/selectbox/index.ts +3 -0
  157. package/src/web/selectbox/manifest.json +477 -0
  158. package/src/web/selectbox/selectbox.css +1 -0
  159. package/src/web/selectbox/selectbox.vue +1024 -0
  160. package/src/web/selectbox/selectbox.vue.d.ts +300 -0
  161. package/src/web/sonner/AI_GUIDE.md +98 -0
  162. package/src/web/sonner/index.ts +114 -0
  163. package/src/web/sonner/manifest.json +132 -0
  164. package/src/web/sonner/sonner.css +1 -0
  165. package/src/web/sonner/sonner.vue +180 -0
  166. package/src/web/sonner/sonner.vue.d.ts +113 -0
  167. package/src/web/table/AI_GUIDE.md +145 -0
  168. package/src/web/table/index.ts +34 -0
  169. package/src/web/table/manifest.json +168 -0
  170. package/src/web/table/table-body.vue +42 -0
  171. package/src/web/table/table-body.vue.d.ts +28 -0
  172. package/src/web/table/table-caption.vue +42 -0
  173. package/src/web/table/table-caption.vue.d.ts +28 -0
  174. package/src/web/table/table-cell.vue +71 -0
  175. package/src/web/table/table-cell.vue.d.ts +49 -0
  176. package/src/web/table/table-empty.vue +105 -0
  177. package/src/web/table/table-empty.vue.d.ts +57 -0
  178. package/src/web/table/table-footer.vue +42 -0
  179. package/src/web/table/table-footer.vue.d.ts +28 -0
  180. package/src/web/table/table-head.vue +78 -0
  181. package/src/web/table/table-head.vue.d.ts +50 -0
  182. package/src/web/table/table-header.vue +42 -0
  183. package/src/web/table/table-header.vue.d.ts +28 -0
  184. package/src/web/table/table-row.vue +70 -0
  185. package/src/web/table/table-row.vue.d.ts +44 -0
  186. package/src/web/table/table.css +1 -0
  187. package/src/web/table/table.vue +298 -0
  188. package/src/web/table/table.vue.d.ts +119 -0
  189. package/src/web/tabs/AI_GUIDE.md +150 -0
  190. package/src/web/tabs/index.ts +2 -0
  191. package/src/web/tabs/manifest.json +315 -0
  192. package/src/web/tabs/tabs.css +1 -0
  193. package/src/web/tabs/tabs.vue +164 -0
  194. package/src/web/tabs/tabs.vue.d.ts +60 -0
  195. package/src/web/text/AI_GUIDE.md +129 -0
  196. package/src/web/text/index.ts +2 -0
  197. package/src/web/text/manifest.json +195 -0
  198. package/src/web/text/text.css +1 -0
  199. package/src/web/text/text.vue +195 -0
  200. package/src/web/text/text.vue.d.ts +161 -0
  201. package/src/web/textarea/AI_GUIDE.md +141 -0
  202. package/src/web/textarea/index.ts +3 -0
  203. package/src/web/textarea/manifest.json +438 -0
  204. package/src/web/textarea/textarea.css +1 -0
  205. package/src/web/textarea/textarea.vue +458 -0
  206. package/src/web/textarea/textarea.vue.d.ts +265 -0
  207. package/src/web/tooltip/AI_GUIDE.md +110 -0
  208. package/src/web/tooltip/index.ts +3 -0
  209. package/src/web/tooltip/manifest.json +222 -0
  210. package/src/web/tooltip/tooltip.css +1 -0
  211. package/src/web/tooltip/tooltip.vue +417 -0
  212. package/src/web/tooltip/tooltip.vue.d.ts +150 -0
  213. package/src/webview/bottomsheet/AI_GUIDE.md +141 -0
  214. package/src/webview/bottomsheet/bottomsheet.css +1 -0
  215. package/src/webview/bottomsheet/bottomsheet.vue +441 -0
  216. package/src/webview/bottomsheet/bottomsheet.vue.d.ts +178 -0
  217. package/src/webview/bottomsheet/index.ts +4 -0
  218. package/src/webview/bottomsheet/manifest.json +377 -0
  219. package/src/webview/button/AI_GUIDE.md +79 -0
  220. package/src/webview/button/button-ios.css +1 -0
  221. package/src/webview/button/button-ios.vue +138 -0
  222. package/src/webview/button/button-ios.vue.d.ts +102 -0
  223. package/src/webview/button/button-material.css +1 -0
  224. package/src/webview/button/button-material.vue +138 -0
  225. package/src/webview/button/button-material.vue.d.ts +102 -0
  226. package/src/webview/button/index.ts +7 -0
  227. package/src/webview/button/manifest.json +148 -0
  228. package/src/webview/index.ts +7 -0
  229. package/tailwind-preset.cjs +62 -0
  230. package/tailwind-preset.js +62 -0
  231. package/ttdk-manifest.json +10188 -0
  232. package/README.md +0 -3
@@ -0,0 +1,438 @@
1
+ {
2
+ "name": "@ttdk-design-system/textarea",
3
+ "component": "Textarea",
4
+ "folder": "textarea",
5
+ "description": "Komponen Textarea TTDK sesuai spesifikasi Anatomy Desain: 1. Field title (14px Semibold, #141313) 2. (Opsional) label (12px Regular, #9698A2) 3. Border radius 8px 4. Field content (14px Regular, #141313, placeholder #9698A2) 5. Additional information / Helper text (12px Regular, #3C4245)",
6
+ "stylesheets": [
7
+ {
8
+ "theme": "common",
9
+ "file": "textarea.css",
10
+ "importPath": "web/textarea/textarea.css"
11
+ }
12
+ ],
13
+ "props": {
14
+ "label": {
15
+ "name": "label",
16
+ "type": "string",
17
+ "optional": true,
18
+ "default": null,
19
+ "description": "Teks label judul field yang ditampilkan di atas textarea (14px Semibold, #141313).",
20
+ "example": null,
21
+ "param": null
22
+ },
23
+ "labelStyle": {
24
+ "name": "labelStyle",
25
+ "type": "UiProps",
26
+ "optional": true,
27
+ "default": null,
28
+ "description": "Style kustom untuk elemen label judul field (UiProps).",
29
+ "example": null,
30
+ "param": null
31
+ },
32
+ "labelClass": {
33
+ "name": "labelClass",
34
+ "type": "string",
35
+ "optional": true,
36
+ "default": null,
37
+ "description": "Class CSS kustom untuk elemen label judul field.",
38
+ "example": null,
39
+ "param": null
40
+ },
41
+ "wrapperStyle": {
42
+ "name": "wrapperStyle",
43
+ "type": "UiProps",
44
+ "optional": true,
45
+ "default": null,
46
+ "description": "Style kustom untuk elemen kontainer textarea wrapper (UiProps).",
47
+ "example": null,
48
+ "param": null
49
+ },
50
+ "wrapperClass": {
51
+ "name": "wrapperClass",
52
+ "type": "string",
53
+ "optional": true,
54
+ "default": null,
55
+ "description": "Class CSS kustom untuk elemen kontainer textarea wrapper.",
56
+ "example": null,
57
+ "param": null
58
+ },
59
+ "textareaStyle": {
60
+ "name": "textareaStyle",
61
+ "type": "UiProps",
62
+ "optional": true,
63
+ "default": null,
64
+ "description": "Style kustom untuk elemen textarea control HTML (UiProps).",
65
+ "example": null,
66
+ "param": null
67
+ },
68
+ "textareaClass": {
69
+ "name": "textareaClass",
70
+ "type": "string",
71
+ "optional": true,
72
+ "default": null,
73
+ "description": "Class CSS kustom untuk elemen textarea control HTML.",
74
+ "example": null,
75
+ "param": null
76
+ },
77
+ "errorMessageStyle": {
78
+ "name": "errorMessageStyle",
79
+ "type": "UiProps",
80
+ "optional": true,
81
+ "default": null,
82
+ "description": "Style kustom untuk elemen pesan error validasi (UiProps).",
83
+ "example": null,
84
+ "param": null
85
+ },
86
+ "errorMessageClass": {
87
+ "name": "errorMessageClass",
88
+ "type": "string",
89
+ "optional": true,
90
+ "default": null,
91
+ "description": "Class CSS kustom untuk elemen pesan error validasi.",
92
+ "example": null,
93
+ "param": null
94
+ },
95
+ "helperTextStyle": {
96
+ "name": "helperTextStyle",
97
+ "type": "UiProps",
98
+ "optional": true,
99
+ "default": null,
100
+ "description": "Style kustom untuk elemen helper text (UiProps).",
101
+ "example": null,
102
+ "param": null
103
+ },
104
+ "helperTextClass": {
105
+ "name": "helperTextClass",
106
+ "type": "string",
107
+ "optional": true,
108
+ "default": null,
109
+ "description": "Class CSS kustom untuk elemen helper text.",
110
+ "example": null,
111
+ "param": null
112
+ },
113
+ "charCountStyle": {
114
+ "name": "charCountStyle",
115
+ "type": "UiProps",
116
+ "optional": true,
117
+ "default": null,
118
+ "description": "Style kustom untuk elemen penghitung karakter (UiProps).",
119
+ "example": null,
120
+ "param": null
121
+ },
122
+ "charCountClass": {
123
+ "name": "charCountClass",
124
+ "type": "string",
125
+ "optional": true,
126
+ "default": null,
127
+ "description": "Class CSS kustom untuk elemen penghitung karakter.",
128
+ "example": null,
129
+ "param": null
130
+ },
131
+ "optional": {
132
+ "name": "optional",
133
+ "type": "boolean",
134
+ "optional": true,
135
+ "default": null,
136
+ "description": "Menandai field sebagai opsi opsional dengan menambahkan teks '(Opsional)' (12px Regular, #9698A2).",
137
+ "example": null,
138
+ "param": null
139
+ },
140
+ "optionalText": {
141
+ "name": "optionalText",
142
+ "type": "string",
143
+ "optional": true,
144
+ "default": "(Opsional)",
145
+ "description": "Kustomisasi teks keterangan opsional.",
146
+ "example": null,
147
+ "param": null
148
+ },
149
+ "placeholder": {
150
+ "name": "placeholder",
151
+ "type": "string",
152
+ "optional": true,
153
+ "default": null,
154
+ "description": "Nilai teks placeholder saat textarea kosong (#9698A2).",
155
+ "example": null,
156
+ "param": null
157
+ },
158
+ "value": {
159
+ "name": "value",
160
+ "type": "string",
161
+ "optional": true,
162
+ "default": null,
163
+ "description": "Nilai terkontrol (controlled value) pada textarea.",
164
+ "example": null,
165
+ "param": null
166
+ },
167
+ "defaultValue": {
168
+ "name": "defaultValue",
169
+ "type": "string",
170
+ "optional": true,
171
+ "default": null,
172
+ "description": "Nilai awal tidak terkontrol (uncontrolled initial value).",
173
+ "example": null,
174
+ "param": null
175
+ },
176
+ "rows": {
177
+ "name": "rows",
178
+ "type": "number",
179
+ "optional": true,
180
+ "default": "4",
181
+ "description": "Jumlah baris default yang ditampilkan.",
182
+ "example": null,
183
+ "param": null
184
+ },
185
+ "name": {
186
+ "name": "name",
187
+ "type": "string",
188
+ "optional": true,
189
+ "default": null,
190
+ "description": "Nama form field HTML untuk integrasi formulir.",
191
+ "example": null,
192
+ "param": null
193
+ },
194
+ "id": {
195
+ "name": "id",
196
+ "type": "string",
197
+ "optional": true,
198
+ "default": null,
199
+ "description": "Identifier unik elemen textarea.",
200
+ "example": null,
201
+ "param": null
202
+ },
203
+ "resize": {
204
+ "name": "resize",
205
+ "type": "'none' | 'vertical' | 'horizontal' | 'both'",
206
+ "optional": true,
207
+ "default": "vertical",
208
+ "description": "Kontrol orientasi resize oleh pengguna. - `'none'`: Tidak dapat di-resize - `'vertical'`: Hanya dapat di-resize vertikal (standar) - `'horizontal'`: Hanya dapat di-resize horizontal - `'both'`: Bebas di-resize kedua arah",
209
+ "example": null,
210
+ "param": null
211
+ },
212
+ "error": {
213
+ "name": "error",
214
+ "type": "boolean",
215
+ "optional": true,
216
+ "default": "false",
217
+ "description": "Status apakah textarea sedang dalam kondisi error / tidak valid.",
218
+ "example": null,
219
+ "param": null
220
+ },
221
+ "errorMessage": {
222
+ "name": "errorMessage",
223
+ "type": "string",
224
+ "optional": true,
225
+ "default": null,
226
+ "description": "Pesan teks penjelasan kesalahan validasi di bawah field.",
227
+ "example": null,
228
+ "param": null
229
+ },
230
+ "helperText": {
231
+ "name": "helperText",
232
+ "type": "string",
233
+ "optional": true,
234
+ "default": null,
235
+ "description": "Teks petunjuk atau keterangan bantuan di bawah field (12px Regular, #3C4245).",
236
+ "example": null,
237
+ "param": null
238
+ },
239
+ "helperTextPosition": {
240
+ "name": "helperTextPosition",
241
+ "type": "'top' | 'bottom'",
242
+ "optional": true,
243
+ "default": null,
244
+ "description": "Posisi teks helper",
245
+ "example": null,
246
+ "param": null
247
+ },
248
+ "size": {
249
+ "name": "size",
250
+ "type": "'sm' | 'md' | 'lg'",
251
+ "optional": true,
252
+ "default": "md",
253
+ "description": "Skala ukuran textarea. - `'sm'`: Padding rapat - `'md'`: Standar - `'lg'`: Padding lapang",
254
+ "example": null,
255
+ "param": null
256
+ },
257
+ "rounded": {
258
+ "name": "rounded",
259
+ "type": "'none' | 'sm' | 'md' | 'lg' | 'full'",
260
+ "optional": true,
261
+ "default": "md",
262
+ "description": "Bentuk sudut kelengkungan textarea. - `'none'`: 0px - `'sm'`: 4px - `'md'`: 8px (standar desain) - `'lg'`: 12px - `'full'`: 16px",
263
+ "example": null,
264
+ "param": null
265
+ },
266
+ "block": {
267
+ "name": "block",
268
+ "type": "boolean",
269
+ "optional": true,
270
+ "default": "false",
271
+ "description": "Menjadikan lebar field textarea memenuhi kontainer penuh (full-width 100%).",
272
+ "example": null,
273
+ "param": null
274
+ },
275
+ "disabled": {
276
+ "name": "disabled",
277
+ "type": "boolean",
278
+ "optional": true,
279
+ "default": "false",
280
+ "description": "Status apakah field dinonaktifkan (disabled).",
281
+ "example": null,
282
+ "param": null
283
+ },
284
+ "readOnly": {
285
+ "name": "readOnly",
286
+ "type": "boolean",
287
+ "optional": true,
288
+ "default": "false",
289
+ "description": "Status apakah field bersifat hanya-baca (readonly).",
290
+ "example": null,
291
+ "param": null
292
+ },
293
+ "required": {
294
+ "name": "required",
295
+ "type": "boolean",
296
+ "optional": true,
297
+ "default": "false",
298
+ "description": "Menandai field sebagai input wajib diisi (menampilkan tanda bintang merah *).",
299
+ "example": null,
300
+ "param": null
301
+ },
302
+ "autoComplete": {
303
+ "name": "autoComplete",
304
+ "type": "string",
305
+ "optional": true,
306
+ "default": null,
307
+ "description": "Konfigurasi atribut autocomplete HTML.",
308
+ "example": null,
309
+ "param": null
310
+ },
311
+ "maxLength": {
312
+ "name": "maxLength",
313
+ "type": "number",
314
+ "optional": true,
315
+ "default": null,
316
+ "description": "Batas maksimum panjang karakter.",
317
+ "example": null,
318
+ "param": null
319
+ },
320
+ "minLength": {
321
+ "name": "minLength",
322
+ "type": "number",
323
+ "optional": true,
324
+ "default": null,
325
+ "description": "Batas minimum panjang karakter.",
326
+ "example": null,
327
+ "param": null
328
+ },
329
+ "style": {
330
+ "name": "style",
331
+ "type": "any",
332
+ "optional": true,
333
+ "default": null,
334
+ "description": "Inline CSS style object native.",
335
+ "example": null,
336
+ "param": null
337
+ },
338
+ "ui": {
339
+ "name": "ui",
340
+ "type": "UiProps",
341
+ "optional": true,
342
+ "default": null,
343
+ "description": "Kustomisasi visual granular root / form-item (UiProps).",
344
+ "example": null,
345
+ "param": null
346
+ },
347
+ "onChange": {
348
+ "name": "onChange",
349
+ "type": "(event: any) => void",
350
+ "optional": true,
351
+ "default": null,
352
+ "description": "Callback event saat nilai textarea berubah.",
353
+ "example": null,
354
+ "param": null
355
+ },
356
+ "onInput": {
357
+ "name": "onInput",
358
+ "type": "(event: any) => void",
359
+ "optional": true,
360
+ "default": null,
361
+ "description": "Callback event saat pengguna mengetik (input event).",
362
+ "example": null,
363
+ "param": null
364
+ },
365
+ "onBlur": {
366
+ "name": "onBlur",
367
+ "type": "(event: any) => void",
368
+ "optional": true,
369
+ "default": null,
370
+ "description": "Callback event saat textarea kehilangan fokus (blur).",
371
+ "example": null,
372
+ "param": null
373
+ },
374
+ "onFocus": {
375
+ "name": "onFocus",
376
+ "type": "(event: any) => void",
377
+ "optional": true,
378
+ "default": null,
379
+ "description": "Callback event saat textarea mendapatkan fokus.",
380
+ "example": null,
381
+ "param": null
382
+ },
383
+ "inputRef": {
384
+ "name": "inputRef",
385
+ "type": "any",
386
+ "optional": true,
387
+ "default": null,
388
+ "description": "Ref instance elemen textarea HTML untuk akses kontrol DOM langsung (focus, blur, select).",
389
+ "example": null,
390
+ "param": null
391
+ },
392
+ "className": {
393
+ "name": "className",
394
+ "type": "string",
395
+ "optional": true,
396
+ "default": null,
397
+ "description": "Class CSS kustom.",
398
+ "example": null,
399
+ "param": null
400
+ },
401
+ "onKeyDown": {
402
+ "name": "onKeyDown",
403
+ "type": "(event: any) => void",
404
+ "optional": true,
405
+ "default": null,
406
+ "description": "Callback event tombol keyboard ditekan.",
407
+ "example": null,
408
+ "param": null
409
+ },
410
+ "onKeyUp": {
411
+ "name": "onKeyUp",
412
+ "type": "(event: any) => void",
413
+ "optional": true,
414
+ "default": null,
415
+ "description": "Callback event tombol keyboard dilepaskan.",
416
+ "example": null,
417
+ "param": null
418
+ },
419
+ "showCount": {
420
+ "name": "showCount",
421
+ "type": "boolean",
422
+ "optional": true,
423
+ "default": "false",
424
+ "description": "Menampilkan penghitung karakter di bawah textarea (format: `x / maxLength`). Memerlukan prop `maxLength` untuk berfungsi.",
425
+ "example": null,
426
+ "param": null
427
+ }
428
+ },
429
+ "subInterfaces": {},
430
+ "supportedFrameworks": [
431
+ "react",
432
+ "vue",
433
+ "svelte"
434
+ ],
435
+ "themes": [
436
+ "tw"
437
+ ]
438
+ }
@@ -0,0 +1 @@
1
+ .ttdk-form-item{gap:var(--ttdk-spacing-xxs);box-sizing:border-box;width:100%;font-family:var(--ttdk-font-sans);flex-direction:column;display:flex}.ttdk-form-item[data-block=true]{width:100%}.ttdk-form-label{font-size:var(--ttdk-font-size-14);font-weight:var(--ttdk-font-weight-semibold);line-height:var(--ttdk-font-size-20);color:var(--ttdk-ui-color,var(--ttdk-text-icon-primary));align-items:center;gap:var(--ttdk-spacing-xxs);user-select:none;display:flex}.dark .ttdk-form-label{color:var(--ttdk-ui-color,var(--ttdk-text-icon-primary))}.ttdk-form-required{color:var(--ttdk-stroke-status-error);font-weight:var(--ttdk-font-weight-bold)}.dark .ttdk-form-required{color:var(--ttdk-stroke-status-error)}.ttdk-form-optional{font-size:var(--ttdk-font-size-12);font-weight:var(--ttdk-font-weight-regular);line-height:var(--ttdk-font-size-18);color:var(--ttdk-text-icon-disabled);margin-left:var(--ttdk-spacing-none)}.dark .ttdk-form-optional{color:var(--ttdk-text-icon-disabled)}.ttdk-textarea-wrapper{background:var(--ttdk-bg-base-primary);border:var(--ttdk-stroke-width-thin) solid var(--ttdk-stroke-subtle);border-radius:var(--ttdk-radius-input-lg);box-sizing:border-box;width:100%;height:112px;min-height:48px;font-family:var(--ttdk-font-sans);transition:border-color .15s,box-shadow .15s,background-color .15s;display:flex;position:relative;overflow:hidden}.dark .ttdk-textarea-wrapper{background:var(--ttdk-bg-base-primary);border-color:var(--ttdk-stroke-subtle)}.ttdk-textarea-wrapper[data-filled=true],.dark .ttdk-textarea-wrapper[data-filled=true]{border-color:var(--ttdk-stroke-strong)}.ttdk-textarea-wrapper:focus-within{box-shadow:0 0 0 3px color-mix(in srgb, var(--ttdk-stroke-border-focus) 15%, transparent);border-color:var(--ttdk-stroke-border-focus)!important}.dark .ttdk-textarea-wrapper:focus-within{box-shadow:0 0 0 3px color-mix(in srgb, var(--ttdk-stroke-border-focus) 25%, transparent);border-color:var(--ttdk-stroke-border-focus)!important}.ttdk-textarea-wrapper[data-error=true]{border-color:var(--ttdk-stroke-status-error)!important}.ttdk-textarea-wrapper[data-error=true]:focus-within{box-shadow:0 0 0 3px color-mix(in srgb, var(--ttdk-stroke-status-error) 15%, transparent);border-color:var(--ttdk-stroke-status-error)!important}.dark .ttdk-textarea-wrapper[data-error=true]{border-color:var(--ttdk-stroke-status-error)!important}.ttdk-form-item[data-error=true] .ttdk-form-label,.dark .ttdk-form-item[data-error=true] .ttdk-form-label{color:var(--ttdk-text-icon-status-error)!important}.ttdk-textarea-wrapper[data-disabled=true],.ttdk-form-item[data-disabled=true] .ttdk-textarea-wrapper{cursor:not-allowed;opacity:.85;background:var(--ttdk-bg-secondary-disabled)!important;border-color:var(--ttdk-stroke-subtle)!important}.dark .ttdk-textarea-wrapper[data-disabled=true],.dark .ttdk-form-item[data-disabled=true] .ttdk-textarea-wrapper{opacity:.75;background:var(--ttdk-bg-secondary-disabled)!important;border-color:var(--ttdk-stroke-subtle)!important}.ttdk-textarea-control{width:100%;height:100%;padding:var(--ttdk-spacing-sm) var(--ttdk-spacing-md);font-size:var(--ttdk-font-size-14);font-weight:var(--ttdk-font-weight-regular);line-height:var(--ttdk-line-height-body);color:var(--ttdk-ui-color,var(--ttdk-text-icon-primary));box-sizing:border-box;font-family:var(--ttdk-font-sans);background:0 0;border:none;outline:none;transition:color .15s}.dark .ttdk-textarea-control{color:var(--ttdk-ui-color,var(--ttdk-text-icon-primary))}.ttdk-textarea-control::placeholder{color:var(--ttdk-text-icon-disabled);opacity:1}.dark .ttdk-textarea-control::placeholder{color:var(--ttdk-text-icon-disabled)}.ttdk-textarea-control:disabled{cursor:not-allowed;color:var(--ttdk-text-icon-disabled)}.dark .ttdk-textarea-control:disabled{color:var(--ttdk-text-icon-disabled)}.ttdk-textarea-wrapper[data-size=sm]{height:80px}.ttdk-textarea-wrapper[data-size=sm] .ttdk-textarea-control{padding:var(--ttdk-spacing-xs) var(--ttdk-spacing-sm);font-size:var(--ttdk-font-size-12)}.ttdk-textarea-wrapper[data-size=md]{height:112px}.ttdk-textarea-wrapper[data-size=md] .ttdk-textarea-control{padding:var(--ttdk-spacing-sm) var(--ttdk-spacing-md);font-size:var(--ttdk-font-size-14)}.ttdk-textarea-wrapper[data-size=lg]{height:144px}.ttdk-textarea-wrapper[data-size=lg] .ttdk-textarea-control{padding:var(--ttdk-spacing-md) var(--ttdk-spacing-lg);font-size:var(--ttdk-font-size-16)}.ttdk-textarea-wrapper[data-rounded=none]{border-radius:var(--ttdk-radius-input-none)}.ttdk-textarea-wrapper[data-rounded=xs]{border-radius:var(--ttdk-radius-input-xs)}.ttdk-textarea-wrapper[data-rounded=sm]{border-radius:var(--ttdk-radius-input-sm)}.ttdk-textarea-wrapper[data-rounded=md]{border-radius:var(--ttdk-radius-input-lg)}.ttdk-textarea-wrapper[data-rounded=lg]{border-radius:var(--ttdk-radius-input-xl)}.ttdk-textarea-wrapper[data-rounded=full]{border-radius:var(--ttdk-radius-input-2xl)}.ttdk-form-helper-text{font-size:var(--ttdk-font-size-12);font-weight:var(--ttdk-font-weight-regular);color:var(--ttdk-text-icon-secondary);line-height:var(--ttdk-font-size-18);min-height:var(--ttdk-font-size-18);font-family:var(--ttdk-font-sans)}.dark .ttdk-form-helper-text{color:var(--ttdk-text-icon-secondary)}.ttdk-form-error-msg{align-items:center;gap:var(--ttdk-spacing-xxs);font-size:var(--ttdk-font-size-12);color:var(--ttdk-text-icon-status-error);font-weight:var(--ttdk-font-weight-medium);line-height:var(--ttdk-font-size-18);min-height:var(--ttdk-font-size-18);font-family:var(--ttdk-font-sans);display:flex}.dark .ttdk-form-error-msg{color:var(--ttdk-text-icon-status-error)}.ttdk-form-error-icon{width:var(--ttdk-font-size-14);height:var(--ttdk-font-size-14);flex-shrink:0}.ttdk-form-error-icon path{fill-rule:evenodd;clip-rule:evenodd}.ttdk-form-footer{justify-content:space-between;align-items:start;gap:var(--ttdk-spacing-xxs) var(--ttdk-spacing-sm);box-sizing:border-box;flex-wrap:wrap-reverse;width:100%;display:flex}.ttdk-form-footer-message{gap:var(--ttdk-spacing-xxs);flex-direction:column;flex:180px;min-width:0;display:flex}.ttdk-form-char-count{font-size:var(--ttdk-font-size-12);font-weight:var(--ttdk-font-weight-regular);color:var(--ttdk-text-icon-disabled);text-align:right;font-family:var(--ttdk-font-sans);line-height:var(--ttdk-font-size-18);white-space:nowrap;flex-shrink:0;margin-left:auto}.dark .ttdk-form-char-count{color:var(--ttdk-text-icon-disabled)}