@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,161 @@
1
+ /* eslint-disable */
2
+ // Auto-generated by TTDK Design System Vue Type Generator
3
+ import type { DefineComponent } from "vue";
4
+ import { buildUiVars, type UiProps } from "../../core/types";
5
+
6
+ export type TextUiProps = UiProps;
7
+
8
+ export type TextUiBaseProps = UiProps;
9
+
10
+ export interface TextProps {
11
+ /**
12
+ * Tag elemen HTML semantik yang digunakan untuk me-render teks.
13
+ * - 'span': Inline span (default).
14
+ * - 'p': Paragraf teks.
15
+ * - 'div': Blok generik.
16
+ * - 'h1' s/d 'h6': Heading level 1 sampai 6.
17
+ * - 'label': Elemen label formulir.
18
+ * - 'small': Teks berukuran kecil / disclaimer.
19
+ * - 'strong': Teks tebal berpenekanan penting.
20
+ * - 'em': Teks berpenekanan miring.
21
+ * - 'code': Format kode inline monospace.
22
+ * - 'blockquote': Kutipan blok.
23
+ * - 'a': Tautan / link teks.
24
+ *
25
+ * @default 'span'
26
+ */
27
+ as?:
28
+ | "span"
29
+ | "p"
30
+ | "div"
31
+ | "h1"
32
+ | "h2"
33
+ | "h3"
34
+ | "h4"
35
+ | "h5"
36
+ | "h6"
37
+ | "label"
38
+ | "small"
39
+ | "strong"
40
+ | "em"
41
+ | "code"
42
+ | "blockquote"
43
+ | "a";
44
+
45
+ /**
46
+ * Varian warna semantik teks (disesuaikan dengan Chip / Badge TTDK).
47
+ * - 'primary': Warna utama tema penekanan aksi (brand teal).
48
+ * - 'success': Warna status sukses (hijau).
49
+ * - 'info': Warna status informasi (biru).
50
+ * - 'warning': Warna status peringatan (kuning).
51
+ * - 'danger': Warna status bahaya / kesalahan (merah).
52
+ * - 'neutral': Warna teks dasar foreground (standar).
53
+ *
54
+ * @default 'neutral'
55
+ */
56
+ variant?:
57
+ | "primary"
58
+ | "success"
59
+ | "info"
60
+ | "warning"
61
+ | "danger"
62
+ | "neutral";
63
+
64
+ /**
65
+ * Ukuran tipografi teks (xs s/d 6xl).
66
+ */
67
+ size?:
68
+ | "xs"
69
+ | "sm"
70
+ | "md"
71
+ | "lg"
72
+ | "xl"
73
+ | "2xl"
74
+ | "3xl"
75
+ | "4xl"
76
+ | "5xl"
77
+ | "6xl";
78
+
79
+ /**
80
+ * Ketebalan font teks.
81
+ */
82
+ weight?: "normal" | "medium" | "semibold" | "bold" | "extrabold";
83
+
84
+ /**
85
+ * Perataan horizontal teks.
86
+ */
87
+ align?: "left" | "center" | "right" | "justify";
88
+
89
+ /**
90
+ * Transformasi huruf kapital/kecil pada teks.
91
+ */
92
+ transform?: "uppercase" | "lowercase" | "capitalize" | "normal";
93
+
94
+ /**
95
+ * Memotong teks satu baris yang melebihi batas dengan elipsis (...).
96
+ */
97
+ truncate?: boolean;
98
+
99
+ /**
100
+ * Memotong teks beberapa baris dengan elipsis (...) sesuai jumlah baris.
101
+ */
102
+ lineClamp?: 1 | 2 | 3 | 4 | 5 | 6;
103
+
104
+ /**
105
+ * Mengubah gaya teks menjadi miring (italic).
106
+ */
107
+ italic?: boolean;
108
+
109
+ /**
110
+ * Menampilkan garis bawah pada teks (underline).
111
+ */
112
+ underline?: boolean;
113
+
114
+ /**
115
+ * Margin kustom pada elemen teks (misal: '0 0 16px 0', '8px', '1rem').
116
+ */
117
+ margin?: string;
118
+
119
+ /**
120
+ * Padding kustom pada elemen teks (misal: '8px 12px', '4px 8px').
121
+ */
122
+ padding?: string;
123
+
124
+ /**
125
+ * URL tujuan jika as='a'.
126
+ */
127
+ href?: string;
128
+
129
+ /**
130
+ * Target link jika as='a'.
131
+ */
132
+ target?: string;
133
+
134
+ /**
135
+ * Kustomisasi visual granular ala Nuxt UI (warna teks, ukuran font, ketebalan, line-height, margin, padding).
136
+ */
137
+ ui?: TextUiProps;
138
+
139
+ /**
140
+ * Class CSS kustom.
141
+ */
142
+ className?: string;
143
+
144
+ /**
145
+ * Class CSS kustom (alias untuk Vue/HTML).
146
+ */
147
+ class?: string;
148
+
149
+ /**
150
+ * Inline CSS style kustom.
151
+ */
152
+ style?: any;
153
+
154
+ /**
155
+ * Konten teks atau elemen anak di dalam komponen Text.
156
+ */
157
+ children?: any;
158
+ }
159
+
160
+ declare const component: DefineComponent<TextProps>;
161
+ export default component;
@@ -0,0 +1,141 @@
1
+ # <Textarea /> — TTDK Component Reference
2
+
3
+ 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)
4
+
5
+ ## 1. Stylesheets & Theming (Pure CSS)
6
+ Import the corresponding stylesheet for the theme you wish to use:
7
+ - **COMMON Theme**: `import "@ttdk-design-system/library-<react|vue|svelte>/web/textarea/textarea.css";`
8
+
9
+ ## 2. Subpath Component Import
10
+ ```ts
11
+ // React
12
+ import Textarea from "@ttdk-design-system/library-react/web/textarea";
13
+
14
+ // Vue 3
15
+ import Textarea from "@ttdk-design-system/library-vue/web/textarea";
16
+
17
+ // Svelte
18
+ import Textarea from "@ttdk-design-system/library-svelte/web/textarea";
19
+ ```
20
+
21
+ ## 3. Props & API Reference
22
+
23
+ | Prop | Type | Default | Description |
24
+ | :--- | :--- | :--- | :--- |
25
+ | `label?` | `string` | `-` | Teks label judul field yang ditampilkan di atas textarea (14px Semibold, #141313). |
26
+ | `labelStyle?` | `UiProps` | `-` | Style kustom untuk elemen label judul field (UiProps). |
27
+ | `labelClass?` | `string` | `-` | Class CSS kustom untuk elemen label judul field. |
28
+ | `wrapperStyle?` | `UiProps` | `-` | Style kustom untuk elemen kontainer textarea wrapper (UiProps). |
29
+ | `wrapperClass?` | `string` | `-` | Class CSS kustom untuk elemen kontainer textarea wrapper. |
30
+ | `textareaStyle?` | `UiProps` | `-` | Style kustom untuk elemen textarea control HTML (UiProps). |
31
+ | `textareaClass?` | `string` | `-` | Class CSS kustom untuk elemen textarea control HTML. |
32
+ | `errorMessageStyle?` | `UiProps` | `-` | Style kustom untuk elemen pesan error validasi (UiProps). |
33
+ | `errorMessageClass?` | `string` | `-` | Class CSS kustom untuk elemen pesan error validasi. |
34
+ | `helperTextStyle?` | `UiProps` | `-` | Style kustom untuk elemen helper text (UiProps). |
35
+ | `helperTextClass?` | `string` | `-` | Class CSS kustom untuk elemen helper text. |
36
+ | `charCountStyle?` | `UiProps` | `-` | Style kustom untuk elemen penghitung karakter (UiProps). |
37
+ | `charCountClass?` | `string` | `-` | Class CSS kustom untuk elemen penghitung karakter. |
38
+ | `optional?` | `boolean` | `-` | Menandai field sebagai opsi opsional dengan menambahkan teks '(Opsional)' (12px Regular, #9698A2). |
39
+ | `optionalText?` | `string` | `(Opsional)` | Kustomisasi teks keterangan opsional. |
40
+ | `placeholder?` | `string` | `-` | Nilai teks placeholder saat textarea kosong (#9698A2). |
41
+ | `value?` | `string` | `-` | Nilai terkontrol (controlled value) pada textarea. |
42
+ | `defaultValue?` | `string` | `-` | Nilai awal tidak terkontrol (uncontrolled initial value). |
43
+ | `rows?` | `number` | `4` | Jumlah baris default yang ditampilkan. |
44
+ | `name?` | `string` | `-` | Nama form field HTML untuk integrasi formulir. |
45
+ | `id?` | `string` | `-` | Identifier unik elemen textarea. |
46
+ | `resize?` | `'none' | 'vertical' | 'horizontal' | 'both'` | `vertical` | 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 |
47
+ | `error?` | `boolean` | `false` | Status apakah textarea sedang dalam kondisi error / tidak valid. |
48
+ | `errorMessage?` | `string` | `-` | Pesan teks penjelasan kesalahan validasi di bawah field. |
49
+ | `helperText?` | `string` | `-` | Teks petunjuk atau keterangan bantuan di bawah field (12px Regular, #3C4245). |
50
+ | `helperTextPosition?` | `'top' | 'bottom'` | `-` | Posisi teks helper |
51
+ | `size?` | `'sm' | 'md' | 'lg'` | `md` | Skala ukuran textarea. - `'sm'`: Padding rapat - `'md'`: Standar - `'lg'`: Padding lapang |
52
+ | `rounded?` | `'none' | 'sm' | 'md' | 'lg' | 'full'` | `md` | Bentuk sudut kelengkungan textarea. - `'none'`: 0px - `'sm'`: 4px - `'md'`: 8px (standar desain) - `'lg'`: 12px - `'full'`: 16px |
53
+ | `block?` | `boolean` | `false` | Menjadikan lebar field textarea memenuhi kontainer penuh (full-width 100%). |
54
+ | `disabled?` | `boolean` | `false` | Status apakah field dinonaktifkan (disabled). |
55
+ | `readOnly?` | `boolean` | `false` | Status apakah field bersifat hanya-baca (readonly). |
56
+ | `required?` | `boolean` | `false` | Menandai field sebagai input wajib diisi (menampilkan tanda bintang merah *). |
57
+ | `autoComplete?` | `string` | `-` | Konfigurasi atribut autocomplete HTML. |
58
+ | `maxLength?` | `number` | `-` | Batas maksimum panjang karakter. |
59
+ | `minLength?` | `number` | `-` | Batas minimum panjang karakter. |
60
+ | `style?` | `any` | `-` | Inline CSS style object native. |
61
+ | `ui?` | `UiProps` | `-` | Kustomisasi visual granular root / form-item (UiProps). |
62
+ | `onChange?` | `(event: any) => void` | `-` | Callback event saat nilai textarea berubah. |
63
+ | `onInput?` | `(event: any) => void` | `-` | Callback event saat pengguna mengetik (input event). |
64
+ | `onBlur?` | `(event: any) => void` | `-` | Callback event saat textarea kehilangan fokus (blur). |
65
+ | `onFocus?` | `(event: any) => void` | `-` | Callback event saat textarea mendapatkan fokus. |
66
+ | `inputRef?` | `any` | `-` | Ref instance elemen textarea HTML untuk akses kontrol DOM langsung (focus, blur, select). |
67
+ | `className?` | `string` | `-` | Class CSS kustom. |
68
+ | `onKeyDown?` | `(event: any) => void` | `-` | Callback event tombol keyboard ditekan. |
69
+ | `onKeyUp?` | `(event: any) => void` | `-` | Callback event tombol keyboard dilepaskan. |
70
+ | `showCount?` | `boolean` | `false` | Menampilkan penghitung karakter di bawah textarea (format: `x / maxLength`). Memerlukan prop `maxLength` untuk berfungsi. |
71
+
72
+ ## 4. Usage Examples
73
+
74
+ ### React Example
75
+ ```tsx
76
+ import { useState } from "react";
77
+ import Textarea from "@ttdk-design-system/library-react/web/textarea";
78
+ import "@ttdk-design-system/library-react/web/textarea/textarea.css";
79
+
80
+ export function Example() {
81
+ const [notes, setNotes] = useState("");
82
+
83
+ return (
84
+ <div style={{ maxWidth: '500px' }}>
85
+ <Textarea
86
+ label="Catatan Diagnosa Medis"
87
+ placeholder="Tuliskan catatan rekam medis atau diagnosa pasien..."
88
+ rows={4}
89
+ value={notes}
90
+ helperText="Maksimal 1000 karakter."
91
+ onChange={(e) => setNotes(e.target.value)}
92
+ />
93
+ </div>
94
+ );
95
+ }
96
+ ```
97
+
98
+ ### Vue 3 Example
99
+ ```vue
100
+ <script setup lang="ts">
101
+ import { ref } from "vue";
102
+ import Textarea from "@ttdk-design-system/library-vue/web/textarea";
103
+ import "@ttdk-design-system/library-vue/web/textarea/textarea.css";
104
+
105
+ const notes = ref("");
106
+ </script>
107
+
108
+ <template>
109
+ <div style="max-width: 500px;">
110
+ <Textarea
111
+ label="Catatan Diagnosa Medis"
112
+ placeholder="Tuliskan catatan rekam medis atau diagnosa pasien..."
113
+ :rows="4"
114
+ :value="notes"
115
+ helper-text="Maksimal 1000 karakter."
116
+ @input="(e: any) => (notes = e.target.value)"
117
+ />
118
+ </div>
119
+ </template>
120
+ ```
121
+
122
+ ### Svelte Example
123
+ ```svelte
124
+ <script lang="ts">
125
+ import Textarea from "@ttdk-design-system/library-svelte/web/textarea";
126
+ import "@ttdk-design-system/library-svelte/web/textarea/textarea.css";
127
+
128
+ let notes = "";
129
+ </script>
130
+
131
+ <div style="max-width: 500px;">
132
+ <Textarea
133
+ label="Catatan Diagnosa Medis"
134
+ placeholder="Tuliskan catatan rekam medis atau diagnosa pasien..."
135
+ rows={4}
136
+ value={notes}
137
+ helperText="Maksimal 1000 karakter."
138
+ on:input={(e) => (notes = e.target.value)}
139
+ />
140
+ </div>
141
+ ```
@@ -0,0 +1,3 @@
1
+ export { default } from './textarea.vue';
2
+ export { default as Textarea } from './textarea.vue';
3
+ export * from './textarea.vue';