@ttdk-design-system/library-react 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 (184) hide show
  1. package/AI_GUIDE.md +6518 -0
  2. package/llms.txt +6518 -0
  3. package/package.json +1098 -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.tsx +430 -0
  16. package/src/web/accordion/index.ts +3 -0
  17. package/src/web/accordion/manifest.json +351 -0
  18. package/src/web/alert/AI_GUIDE.md +139 -0
  19. package/src/web/alert/alert.css +1 -0
  20. package/src/web/alert/alert.tsx +318 -0
  21. package/src/web/alert/index.ts +3 -0
  22. package/src/web/alert/manifest.json +240 -0
  23. package/src/web/avatar/AI_GUIDE.md +118 -0
  24. package/src/web/avatar/avatar.css +1 -0
  25. package/src/web/avatar/avatar.tsx +233 -0
  26. package/src/web/avatar/index.ts +3 -0
  27. package/src/web/avatar/manifest.json +195 -0
  28. package/src/web/badge/AI_GUIDE.md +94 -0
  29. package/src/web/badge/badge.css +1 -0
  30. package/src/web/badge/badge.tsx +140 -0
  31. package/src/web/badge/index.ts +2 -0
  32. package/src/web/badge/manifest.json +141 -0
  33. package/src/web/banner/AI_GUIDE.md +130 -0
  34. package/src/web/banner/banner.css +1 -0
  35. package/src/web/banner/banner.tsx +334 -0
  36. package/src/web/banner/index.ts +3 -0
  37. package/src/web/banner/manifest.json +240 -0
  38. package/src/web/breadcrumb/AI_GUIDE.md +120 -0
  39. package/src/web/breadcrumb/breadcrumb.css +1 -0
  40. package/src/web/breadcrumb/breadcrumb.tsx +306 -0
  41. package/src/web/breadcrumb/index.ts +3 -0
  42. package/src/web/breadcrumb/manifest.json +225 -0
  43. package/src/web/button/AI_GUIDE.md +121 -0
  44. package/src/web/button/button.css +1 -0
  45. package/src/web/button/button.tsx +287 -0
  46. package/src/web/button/index.ts +2 -0
  47. package/src/web/button/manifest.json +177 -0
  48. package/src/web/calendar/AI_GUIDE.md +151 -0
  49. package/src/web/calendar/calendar.css +1 -0
  50. package/src/web/calendar/calendar.tsx +1611 -0
  51. package/src/web/calendar/index.ts +3 -0
  52. package/src/web/calendar/manifest.json +470 -0
  53. package/src/web/card/AI_GUIDE.md +133 -0
  54. package/src/web/card/card.css +1 -0
  55. package/src/web/card/card.tsx +408 -0
  56. package/src/web/card/index.ts +4 -0
  57. package/src/web/card/manifest.json +357 -0
  58. package/src/web/checkbox/AI_GUIDE.md +146 -0
  59. package/src/web/checkbox/checkbox.css +1 -0
  60. package/src/web/checkbox/checkbox.tsx +307 -0
  61. package/src/web/checkbox/index.ts +2 -0
  62. package/src/web/checkbox/manifest.json +294 -0
  63. package/src/web/chip/AI_GUIDE.md +186 -0
  64. package/src/web/chip/chip.css +1 -0
  65. package/src/web/chip/chip.tsx +230 -0
  66. package/src/web/chip/index.ts +2 -0
  67. package/src/web/chip/manifest.json +186 -0
  68. package/src/web/dropdown/AI_GUIDE.md +167 -0
  69. package/src/web/dropdown/dropdown.css +1 -0
  70. package/src/web/dropdown/dropdown.tsx +1274 -0
  71. package/src/web/dropdown/index.ts +3 -0
  72. package/src/web/dropdown/manifest.json +576 -0
  73. package/src/web/flex/AI_GUIDE.md +113 -0
  74. package/src/web/flex/flex-item.tsx +97 -0
  75. package/src/web/flex/flex.css +1 -0
  76. package/src/web/flex/flex.tsx +108 -0
  77. package/src/web/flex/index.ts +5 -0
  78. package/src/web/flex/manifest.json +162 -0
  79. package/src/web/form/index.ts +7 -0
  80. package/src/web/grid/AI_GUIDE.md +112 -0
  81. package/src/web/grid/grid-item.tsx +112 -0
  82. package/src/web/grid/grid.css +1 -0
  83. package/src/web/grid/grid.tsx +99 -0
  84. package/src/web/grid/index.ts +5 -0
  85. package/src/web/grid/manifest.json +153 -0
  86. package/src/web/index.ts +86 -0
  87. package/src/web/input/AI_GUIDE.md +159 -0
  88. package/src/web/input/index.ts +3 -0
  89. package/src/web/input/input.css +1 -0
  90. package/src/web/input/input.tsx +537 -0
  91. package/src/web/input/manifest.json +465 -0
  92. package/src/web/input-number/AI_GUIDE.md +164 -0
  93. package/src/web/input-number/index.ts +3 -0
  94. package/src/web/input-number/input-number.css +1 -0
  95. package/src/web/input-number/input-number.tsx +1193 -0
  96. package/src/web/input-number/manifest.json +575 -0
  97. package/src/web/modal/AI_GUIDE.md +171 -0
  98. package/src/web/modal/index.ts +3 -0
  99. package/src/web/modal/manifest.json +375 -0
  100. package/src/web/modal/modal.css +1 -0
  101. package/src/web/modal/modal.tsx +571 -0
  102. package/src/web/pagination/AI_GUIDE.md +148 -0
  103. package/src/web/pagination/index.ts +21 -0
  104. package/src/web/pagination/manifest.json +432 -0
  105. package/src/web/pagination/pagination-content.tsx +45 -0
  106. package/src/web/pagination/pagination-ellipsis.tsx +54 -0
  107. package/src/web/pagination/pagination-first.tsx +155 -0
  108. package/src/web/pagination/pagination-item.tsx +45 -0
  109. package/src/web/pagination/pagination-last.tsx +155 -0
  110. package/src/web/pagination/pagination-link.tsx +121 -0
  111. package/src/web/pagination/pagination-next.tsx +158 -0
  112. package/src/web/pagination/pagination-previous.tsx +158 -0
  113. package/src/web/pagination/pagination.css +1 -0
  114. package/src/web/pagination/pagination.tsx +687 -0
  115. package/src/web/popover/AI_GUIDE.md +163 -0
  116. package/src/web/popover/index.ts +3 -0
  117. package/src/web/popover/manifest.json +396 -0
  118. package/src/web/popover/popover.css +1 -0
  119. package/src/web/popover/popover.tsx +702 -0
  120. package/src/web/radio/AI_GUIDE.md +155 -0
  121. package/src/web/radio/index.ts +2 -0
  122. package/src/web/radio/manifest.json +294 -0
  123. package/src/web/radio/radio.css +1 -0
  124. package/src/web/radio/radio.tsx +290 -0
  125. package/src/web/selectbox/AI_GUIDE.md +216 -0
  126. package/src/web/selectbox/index.ts +3 -0
  127. package/src/web/selectbox/manifest.json +477 -0
  128. package/src/web/selectbox/selectbox.css +1 -0
  129. package/src/web/selectbox/selectbox.tsx +1048 -0
  130. package/src/web/sonner/AI_GUIDE.md +98 -0
  131. package/src/web/sonner/index.ts +114 -0
  132. package/src/web/sonner/manifest.json +132 -0
  133. package/src/web/sonner/sonner.css +1 -0
  134. package/src/web/sonner/sonner.tsx +177 -0
  135. package/src/web/table/AI_GUIDE.md +145 -0
  136. package/src/web/table/index.ts +35 -0
  137. package/src/web/table/manifest.json +168 -0
  138. package/src/web/table/table-body.tsx +45 -0
  139. package/src/web/table/table-caption.tsx +45 -0
  140. package/src/web/table/table-cell.tsx +74 -0
  141. package/src/web/table/table-empty.tsx +108 -0
  142. package/src/web/table/table-footer.tsx +45 -0
  143. package/src/web/table/table-head.tsx +80 -0
  144. package/src/web/table/table-header.tsx +45 -0
  145. package/src/web/table/table-row.tsx +69 -0
  146. package/src/web/table/table.css +1 -0
  147. package/src/web/table/table.tsx +305 -0
  148. package/src/web/tabs/AI_GUIDE.md +150 -0
  149. package/src/web/tabs/index.ts +3 -0
  150. package/src/web/tabs/manifest.json +315 -0
  151. package/src/web/tabs/tabs.css +1 -0
  152. package/src/web/tabs/tabs.tsx +332 -0
  153. package/src/web/text/AI_GUIDE.md +129 -0
  154. package/src/web/text/index.ts +3 -0
  155. package/src/web/text/manifest.json +195 -0
  156. package/src/web/text/text.css +1 -0
  157. package/src/web/text/text.tsx +689 -0
  158. package/src/web/textarea/AI_GUIDE.md +141 -0
  159. package/src/web/textarea/index.ts +3 -0
  160. package/src/web/textarea/manifest.json +438 -0
  161. package/src/web/textarea/textarea.css +1 -0
  162. package/src/web/textarea/textarea.tsx +467 -0
  163. package/src/web/tooltip/AI_GUIDE.md +110 -0
  164. package/src/web/tooltip/index.ts +3 -0
  165. package/src/web/tooltip/manifest.json +222 -0
  166. package/src/web/tooltip/tooltip.css +1 -0
  167. package/src/web/tooltip/tooltip.tsx +423 -0
  168. package/src/webview/bottomsheet/AI_GUIDE.md +141 -0
  169. package/src/webview/bottomsheet/bottomsheet.css +1 -0
  170. package/src/webview/bottomsheet/bottomsheet.tsx +603 -0
  171. package/src/webview/bottomsheet/index.ts +4 -0
  172. package/src/webview/bottomsheet/manifest.json +377 -0
  173. package/src/webview/button/AI_GUIDE.md +79 -0
  174. package/src/webview/button/button-ios.css +1 -0
  175. package/src/webview/button/button-ios.tsx +138 -0
  176. package/src/webview/button/button-material.css +1 -0
  177. package/src/webview/button/button-material.tsx +138 -0
  178. package/src/webview/button/index.ts +7 -0
  179. package/src/webview/button/manifest.json +148 -0
  180. package/src/webview/index.ts +7 -0
  181. package/tailwind-preset.cjs +62 -0
  182. package/tailwind-preset.js +62 -0
  183. package/ttdk-manifest.json +10188 -0
  184. package/README.md +0 -3
@@ -0,0 +1,357 @@
1
+ {
2
+ "name": "@ttdk-design-system/card",
3
+ "component": "Card",
4
+ "folder": "card",
5
+ "description": "TTDK Card component with multi-theme support.",
6
+ "stylesheets": [
7
+ {
8
+ "theme": "common",
9
+ "file": "card.css",
10
+ "importPath": "web/card/card.css"
11
+ }
12
+ ],
13
+ "props": {
14
+ "variant": {
15
+ "name": "variant",
16
+ "type": "'bordered' | 'elevated' | 'flat' | 'ghost'",
17
+ "optional": true,
18
+ "default": "default",
19
+ "description": "Gaya varian visual kartu. - 'bordered': Kartu dengan border halus dan background card standar. - 'elevated': Kartu dengan bayangan elevasi bertingkat (shadow). - 'flat': Kartu dengan latar netral subtle tanpa bayangan. - 'ghost': Kartu transparan minimalis tanpa border atau bayangan.",
20
+ "example": null,
21
+ "param": null
22
+ },
23
+ "size": {
24
+ "name": "size",
25
+ "type": "'sm' | 'md' | 'lg'",
26
+ "optional": true,
27
+ "default": "md",
28
+ "description": "Kepadatan padding internal kartu. - 'sm': Padding kompak (12px / 16px). - 'md': Padding proporsional standar (20px / 24px). - 'lg': Padding lapang / hero (28px / 32px).",
29
+ "example": null,
30
+ "param": null
31
+ },
32
+ "cardWidth": {
33
+ "name": "cardWidth",
34
+ "type": "'auto' | 'full' | '1-1' | '1-2' | '1-3' | '1-4' | 'mobile'",
35
+ "optional": true,
36
+ "default": "auto",
37
+ "description": "Preset batas lebar kartu sesuai standar token TTDK. - 'auto': Fleksibel mengikuti lebar kontainer parent. - 'full': Lebar penuh 100%. - '1-1': 1128px (Grid Desktop Maksimal). - '1-2': 552px (Grid 1/2). - '1-3': 360px (Grid 1/3). - '1-4': 264px (Grid 1/4). - 'mobile': 328px (Optimal Layar Seluler).",
38
+ "example": null,
39
+ "param": null
40
+ },
41
+ "rounded": {
42
+ "name": "rounded",
43
+ "type": "'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'full'",
44
+ "optional": true,
45
+ "default": "md",
46
+ "description": "Sudut kelengkungan radius kartu.",
47
+ "example": null,
48
+ "param": null
49
+ },
50
+ "hoverable": {
51
+ "name": "hoverable",
52
+ "type": "boolean",
53
+ "optional": true,
54
+ "default": "false",
55
+ "description": "Menambahkan efek hover interaktif (elevasi bayangan naik + border highlight + pointer kursor).",
56
+ "example": null,
57
+ "param": null
58
+ },
59
+ "clickable": {
60
+ "name": "clickable",
61
+ "type": "boolean",
62
+ "optional": true,
63
+ "default": "false",
64
+ "description": "Menjadikan kartu sebagai elemen interaktif yang dapat diklik.",
65
+ "example": null,
66
+ "param": null
67
+ },
68
+ "loading": {
69
+ "name": "loading",
70
+ "type": "boolean",
71
+ "optional": true,
72
+ "default": "false",
73
+ "description": "Menampilkan efek placeholder shimmer / skeleton loader saat kartu dalam proses memuat data.",
74
+ "example": null,
75
+ "param": null
76
+ },
77
+ "disabled": {
78
+ "name": "disabled",
79
+ "type": "boolean",
80
+ "optional": true,
81
+ "default": "false",
82
+ "description": "Menonaktifkan interaksi kartu dan meredupkan opacity.",
83
+ "example": null,
84
+ "param": null
85
+ },
86
+ "title": {
87
+ "name": "title",
88
+ "type": "any",
89
+ "optional": true,
90
+ "default": null,
91
+ "description": "Judul kartu pada area header.",
92
+ "example": null,
93
+ "param": null
94
+ },
95
+ "subtitle": {
96
+ "name": "subtitle",
97
+ "type": "any",
98
+ "optional": true,
99
+ "default": null,
100
+ "description": "Subjudul atau teks deskripsi singkat di bawah judul.",
101
+ "example": null,
102
+ "param": null
103
+ },
104
+ "extra": {
105
+ "name": "extra",
106
+ "type": "any",
107
+ "optional": true,
108
+ "default": null,
109
+ "description": "Konten pelengkap di sudut kanan atas header kartu (badge, menu tombol, link aksi).",
110
+ "example": null,
111
+ "param": null
112
+ },
113
+ "cover": {
114
+ "name": "cover",
115
+ "type": "any",
116
+ "optional": true,
117
+ "default": null,
118
+ "description": "Media gambar cover atau banner visual kartu (berupa URL string gambar atau elemen/node kustom).",
119
+ "example": null,
120
+ "param": null
121
+ },
122
+ "coverAlt": {
123
+ "name": "coverAlt",
124
+ "type": "string",
125
+ "optional": true,
126
+ "default": null,
127
+ "description": "Alt text untuk gambar cover jika `cover` berupa URL string.",
128
+ "example": null,
129
+ "param": null
130
+ },
131
+ "coverPosition": {
132
+ "name": "coverPosition",
133
+ "type": "'top' | 'bottom'",
134
+ "optional": true,
135
+ "default": "top",
136
+ "description": "Posisi media cover pada kartu ('top' atau 'bottom').",
137
+ "example": null,
138
+ "param": null
139
+ },
140
+ "actions": {
141
+ "name": "actions",
142
+ "type": "any",
143
+ "optional": true,
144
+ "default": null,
145
+ "description": "Grup tombol aksi terstruktur di area footer kartu.",
146
+ "example": null,
147
+ "param": null
148
+ },
149
+ "footer": {
150
+ "name": "footer",
151
+ "type": "any",
152
+ "optional": true,
153
+ "default": null,
154
+ "description": "Konten kustom untuk area footer kartu.",
155
+ "example": null,
156
+ "param": null
157
+ },
158
+ "headerBorder": {
159
+ "name": "headerBorder",
160
+ "type": "boolean",
161
+ "optional": true,
162
+ "default": "true",
163
+ "description": "Menampilkan garis pembatas divider di bawah header kartu.",
164
+ "example": null,
165
+ "param": null
166
+ },
167
+ "footerBorder": {
168
+ "name": "footerBorder",
169
+ "type": "boolean",
170
+ "optional": true,
171
+ "default": "true",
172
+ "description": "Menampilkan garis pembatas divider di atas footer kartu.",
173
+ "example": null,
174
+ "param": null
175
+ },
176
+ "onClick": {
177
+ "name": "onClick",
178
+ "type": "(event: any) => void",
179
+ "optional": true,
180
+ "default": null,
181
+ "description": "Callback event saat kartu diklik.",
182
+ "example": null,
183
+ "param": null
184
+ },
185
+ "ui": {
186
+ "name": "ui",
187
+ "type": "UiProps",
188
+ "optional": true,
189
+ "default": null,
190
+ "description": "Kustomisasi visual granular root kontainer kartu (UiProps).",
191
+ "example": null,
192
+ "param": null
193
+ },
194
+ "style": {
195
+ "name": "style",
196
+ "type": "any",
197
+ "optional": true,
198
+ "default": null,
199
+ "description": "Inline CSS style object native.",
200
+ "example": null,
201
+ "param": null
202
+ },
203
+ "className": {
204
+ "name": "className",
205
+ "type": "string",
206
+ "optional": true,
207
+ "default": null,
208
+ "description": "Class CSS kustom untuk root kontainer kartu.",
209
+ "example": null,
210
+ "param": null
211
+ },
212
+ "headerStyle": {
213
+ "name": "headerStyle",
214
+ "type": "UiProps",
215
+ "optional": true,
216
+ "default": null,
217
+ "description": "Style kustom untuk area header kartu (UiProps).",
218
+ "example": null,
219
+ "param": null
220
+ },
221
+ "headerClass": {
222
+ "name": "headerClass",
223
+ "type": "string",
224
+ "optional": true,
225
+ "default": null,
226
+ "description": "Class CSS kustom untuk area header kartu.",
227
+ "example": null,
228
+ "param": null
229
+ },
230
+ "titleStyle": {
231
+ "name": "titleStyle",
232
+ "type": "UiProps",
233
+ "optional": true,
234
+ "default": null,
235
+ "description": "Style kustom untuk teks judul kartu (UiProps).",
236
+ "example": null,
237
+ "param": null
238
+ },
239
+ "titleClass": {
240
+ "name": "titleClass",
241
+ "type": "string",
242
+ "optional": true,
243
+ "default": null,
244
+ "description": "Class CSS kustom untuk teks judul kartu.",
245
+ "example": null,
246
+ "param": null
247
+ },
248
+ "subtitleStyle": {
249
+ "name": "subtitleStyle",
250
+ "type": "UiProps",
251
+ "optional": true,
252
+ "default": null,
253
+ "description": "Style kustom untuk teks subjudul / deskripsi header (UiProps).",
254
+ "example": null,
255
+ "param": null
256
+ },
257
+ "subtitleClass": {
258
+ "name": "subtitleClass",
259
+ "type": "string",
260
+ "optional": true,
261
+ "default": null,
262
+ "description": "Class CSS kustom untuk teks subjudul / deskripsi header.",
263
+ "example": null,
264
+ "param": null
265
+ },
266
+ "extraStyle": {
267
+ "name": "extraStyle",
268
+ "type": "UiProps",
269
+ "optional": true,
270
+ "default": null,
271
+ "description": "Style kustom untuk elemen extra di sudut kanan header (UiProps).",
272
+ "example": null,
273
+ "param": null
274
+ },
275
+ "extraClass": {
276
+ "name": "extraClass",
277
+ "type": "string",
278
+ "optional": true,
279
+ "default": null,
280
+ "description": "Class CSS kustom untuk elemen extra di sudut kanan header.",
281
+ "example": null,
282
+ "param": null
283
+ },
284
+ "bodyStyle": {
285
+ "name": "bodyStyle",
286
+ "type": "UiProps",
287
+ "optional": true,
288
+ "default": null,
289
+ "description": "Style kustom untuk area body / konten utama kartu (UiProps).",
290
+ "example": null,
291
+ "param": null
292
+ },
293
+ "bodyClass": {
294
+ "name": "bodyClass",
295
+ "type": "string",
296
+ "optional": true,
297
+ "default": null,
298
+ "description": "Class CSS kustom untuk area body / konten utama kartu.",
299
+ "example": null,
300
+ "param": null
301
+ },
302
+ "footerStyle": {
303
+ "name": "footerStyle",
304
+ "type": "UiProps",
305
+ "optional": true,
306
+ "default": null,
307
+ "description": "Style kustom untuk area footer kartu (UiProps).",
308
+ "example": null,
309
+ "param": null
310
+ },
311
+ "footerClass": {
312
+ "name": "footerClass",
313
+ "type": "string",
314
+ "optional": true,
315
+ "default": null,
316
+ "description": "Class CSS kustom untuk area footer kartu.",
317
+ "example": null,
318
+ "param": null
319
+ },
320
+ "coverStyle": {
321
+ "name": "coverStyle",
322
+ "type": "UiProps",
323
+ "optional": true,
324
+ "default": null,
325
+ "description": "Style kustom untuk area media cover kartu (UiProps).",
326
+ "example": null,
327
+ "param": null
328
+ },
329
+ "coverClass": {
330
+ "name": "coverClass",
331
+ "type": "string",
332
+ "optional": true,
333
+ "default": null,
334
+ "description": "Class CSS kustom untuk area media cover kartu.",
335
+ "example": null,
336
+ "param": null
337
+ },
338
+ "children": {
339
+ "name": "children",
340
+ "type": "any",
341
+ "optional": true,
342
+ "default": null,
343
+ "description": "Konten anak atau slot kustom (children).",
344
+ "example": null,
345
+ "param": null
346
+ }
347
+ },
348
+ "subInterfaces": {},
349
+ "supportedFrameworks": [
350
+ "react",
351
+ "vue",
352
+ "svelte"
353
+ ],
354
+ "themes": [
355
+ "tw"
356
+ ]
357
+ }
@@ -0,0 +1,146 @@
1
+ # <Checkbox /> — TTDK Component Reference
2
+
3
+ TTDK Checkbox component with multi-theme support.
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/checkbox/checkbox.css";`
8
+
9
+ ## 2. Subpath Component Import
10
+ ```ts
11
+ // React
12
+ import Checkbox from "@ttdk-design-system/library-react/web/checkbox";
13
+
14
+ // Vue 3
15
+ import Checkbox from "@ttdk-design-system/library-vue/web/checkbox";
16
+
17
+ // Svelte
18
+ import Checkbox from "@ttdk-design-system/library-svelte/web/checkbox";
19
+ ```
20
+
21
+ ## 3. Props & API Reference
22
+
23
+ | Prop | Type | Default | Description |
24
+ | :--- | :--- | :--- | :--- |
25
+ | `checked?` | `boolean` | `false` | Status apakah checkbox sedang dalam kondisi terpilih (checked). |
26
+ | `indeterminate?` | `boolean` | `false` | Status apakah checkbox dalam kondisi parsial / indeterminate (menampilkan tanda strip '-'). |
27
+ | `label?` | `string` | `-` | Teks label utama yang ditampilkan di samping kotak checkbox. |
28
+ | `description?` | `string` | `-` | Deskripsi atau teks bantuan yang ditampilkan di bawah label. |
29
+ | `helperText?` | `string` | `-` | Teks bantuan atau keterangan di bawah label (dapat digunakan bergantian dengan description). |
30
+ | `error?` | `boolean | string` | `-` | Status error visual atau string pesan error. |
31
+ | `errorMessage?` | `string` | `-` | Pesan error yang ditampilkan jika validasi form gagal. |
32
+ | `size?` | `'sm' | 'md' | 'lg'` | `md` | Skala ukuran checkbox: - `'sm'`: Kotak 16px, font 12px. - `'md'`: Kotak 18px, font 14px (standar). - `'lg'`: Kotak 22px, font 16px. |
33
+ | `variant?` | `'primary' | 'info' | 'success' | 'warning' | 'danger' | 'neutral'` | `primary` | Varian warna semantik saat checkbox dicentang: - `'primary'`: Aksen toska aksi (#16b3ac, standar). - `'info'`: Aksen biru informasi (#2196f3). - `'success'`: Warna hijau sukses (#047b5d). - `'warning'`: Warna peringatan kuning/oranye (#fb8c00). - `'danger'`: Warna bahaya merah (#c50a24). - `'neutral'`: Warna abu-abu netral (#4a4f53). |
34
+ | `rounded?` | `'none' | 'sm' | 'md' | 'full'` | `md` | Sudut kelengkungan kotak checkbox: - `'none'`: Kotak tajam 0px. - `'sm'`: Radius halus 2px. - `'md'`: Radius sedang 4px (standar). - `'full'`: Lingkaran penuh 9999px. |
35
+ | `disabled?` | `boolean` | `false` | Menonaktifkan interaksi pada checkbox. |
36
+ | `required?` | `boolean` | `false` | Menandakan bahwa field checkbox wajib diisi (required) pada formulir. |
37
+ | `name?` | `string` | `-` | Name atribut untuk elemen HTML `<input type="checkbox">`. |
38
+ | `value?` | `string` | `-` | Value atribut untuk elemen HTML input. |
39
+ | `id?` | `string` | `-` | Identifier unik elemen checkbox (untuk kaitan dengan label form). |
40
+ | `ui?` | `UiProps` | `-` | Kustomisasi visual granular melalui style-like object (+ support pseudo-class: hover, active). |
41
+ | `style?` | `any` | `-` | Inline CSS style object native. |
42
+ | `controlStyle?` | `UiProps` | `-` | Style kustom untuk kotak kontrol checkbox (UiProps). |
43
+ | `controlClass?` | `string` | `-` | Class CSS kustom untuk kotak kontrol checkbox (Tailwind / class kustom). |
44
+ | `labelStyle?` | `UiProps` | `-` | Style kustom untuk teks label checkbox (UiProps). |
45
+ | `labelClass?` | `string` | `-` | Class CSS kustom untuk teks label checkbox (Tailwind / class kustom). |
46
+ | `descStyle?` | `UiProps` | `-` | Style kustom untuk teks deskripsi bantuan (UiProps). |
47
+ | `descClass?` | `string` | `-` | Class CSS kustom untuk teks deskripsi bantuan (Tailwind / class kustom). |
48
+ | `helperTextStyle?` | `UiProps` | `-` | Style kustom untuk elemen helper text (UiProps). |
49
+ | `helperTextClass?` | `string` | `-` | Class CSS kustom untuk elemen helper text. |
50
+ | `errorMessageStyle?` | `UiProps` | `-` | Style kustom untuk teks pesan error validasi (UiProps). |
51
+ | `errorMessageClass?` | `string` | `-` | Class CSS kustom untuk teks pesan error validasi (Tailwind / class kustom). |
52
+ | `onChange?` | `(checked: boolean, event?: any) => void` | `-` | Event handler yang dipanggil saat nilai checkbox berubah. Mengembalikan `(checked: boolean, event: Event)`. |
53
+ | `className?` | `string` | `-` | Class CSS kustom. |
54
+ | `children?` | `any` | `-` | Slot konten label kustom yang menggantikan prop `label`. |
55
+
56
+ ## 4. Usage Examples
57
+
58
+ ### React Example
59
+ ```tsx
60
+ import { useState } from "react";
61
+ import Checkbox from "@ttdk-design-system/library-react/web/checkbox";
62
+ import "@ttdk-design-system/library-react/web/checkbox/checkbox.css";
63
+
64
+ export function Example() {
65
+ const [agreed, setAgreed] = useState(false);
66
+
67
+ return (
68
+ <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>
69
+ <Checkbox
70
+ checked={agreed}
71
+ label="Saya menyetujui syarat & ketentuan data"
72
+ description="Data akan diproses sesuai standar kepatuhan SATUSEHAT."
73
+ onChange={(val) => setAgreed(val)}
74
+ />
75
+ <Checkbox
76
+ checked={true}
77
+ variant="success"
78
+ label="Aktifkan sinkronisasi otomatis"
79
+ />
80
+ <Checkbox
81
+ indeterminate={true}
82
+ label="Pilih sebagian fasilitas kesehatan"
83
+ />
84
+ </div>
85
+ );
86
+ }
87
+ ```
88
+
89
+ ### Vue 3 Example
90
+ ```vue
91
+ <script setup lang="ts">
92
+ import { ref } from "vue";
93
+ import Checkbox from "@ttdk-design-system/library-vue/web/checkbox";
94
+ import "@ttdk-design-system/library-vue/web/checkbox/checkbox.css";
95
+
96
+ const agreed = ref(false);
97
+ </script>
98
+
99
+ <template>
100
+ <div style="display: flex; flex-direction: column; gap: 12px;">
101
+ <Checkbox
102
+ :checked="agreed"
103
+ label="Saya menyetujui syarat & ketentuan data"
104
+ description="Data akan diproses sesuai standar kepatuhan SATUSEHAT."
105
+ @change="(val: boolean) => (agreed = val)"
106
+ />
107
+ <Checkbox
108
+ :checked="true"
109
+ variant="success"
110
+ label="Aktifkan sinkronisasi otomatis"
111
+ />
112
+ <Checkbox
113
+ :indeterminate="true"
114
+ label="Pilih sebagian fasilitas kesehatan"
115
+ />
116
+ </div>
117
+ </template>
118
+ ```
119
+
120
+ ### Svelte Example
121
+ ```svelte
122
+ <script lang="ts">
123
+ import Checkbox from "@ttdk-design-system/library-svelte/web/checkbox";
124
+ import "@ttdk-design-system/library-svelte/web/checkbox/checkbox.css";
125
+
126
+ let agreed = false;
127
+ </script>
128
+
129
+ <div style="display: flex; flex-direction: column; gap: 12px;">
130
+ <Checkbox
131
+ checked={agreed}
132
+ label="Saya menyetujui syarat & ketentuan data"
133
+ description="Data akan diproses sesuai standar kepatuhan SATUSEHAT."
134
+ on:change={(e) => (agreed = e.detail)}
135
+ />
136
+ <Checkbox
137
+ checked={true}
138
+ variant="success"
139
+ label="Aktifkan sinkronisasi otomatis"
140
+ />
141
+ <Checkbox
142
+ indeterminate={true}
143
+ label="Pilih sebagian fasilitas kesehatan"
144
+ />
145
+ </div>
146
+ ```
@@ -0,0 +1 @@
1
+ :root,.dark,[data-mode=dark],[data-theme=dark],.ttdk-checkbox-wrapper,.ttdk-checkbox-root{--ttdk-checkbox-radius-none:var(--ttdk-radius-input-none);--ttdk-checkbox-radius-sm:var(--ttdk-radius-input-sm);--ttdk-checkbox-radius-md:var(--ttdk-radius-input-md);--ttdk-checkbox-radius-lg:var(--ttdk-radius-input-lg);--ttdk-checkbox-radius-full:var(--ttdk-radius-input-full);--ttdk-checkbox-bg:var(--ttdk-bg-base-primary);--ttdk-checkbox-border:var(--ttdk-stroke-subtle);--ttdk-checkbox-border-hover:var(--ttdk-stroke-strong);--ttdk-checkbox-color-check:var(--ttdk-color-white);--ttdk-checkbox-ring:color-mix(in oklab, var(--ttdk-brand-default) 25%, transparent);--ttdk-checkbox-primary:var(--ttdk-brand-default);--ttdk-checkbox-primary-hover:var(--ttdk-brand-strong);--ttdk-checkbox-neutral:var(--ttdk-stroke-strong);--ttdk-checkbox-neutral-hover:var(--ttdk-color-neutral-700);--ttdk-checkbox-danger:var(--ttdk-bg-status-error);--ttdk-checkbox-danger-hover:var(--ttdk-bg-status-error-strong);--ttdk-checkbox-success:var(--ttdk-bg-status-success);--ttdk-checkbox-success-hover:var(--ttdk-color-green-700);--ttdk-checkbox-warning:var(--ttdk-bg-status-warning);--ttdk-checkbox-warning-hover:var(--ttdk-color-orange-600);--ttdk-checkbox-info:var(--ttdk-bg-status-info);--ttdk-checkbox-info-hover:var(--ttdk-color-blue-600);--ttdk-checkbox-text-title:var(--ttdk-text-icon-primary);--ttdk-checkbox-text-subtitle:var(--ttdk-text-icon-primary);--ttdk-checkbox-text-disabled:var(--ttdk-text-icon-disabled);--ttdk-checkbox-text-error:var(--ttdk-text-icon-status-error);--ttdk-checkbox-disabled-bg:var(--ttdk-bg-secondary-disabled);--ttdk-checkbox-disabled-border:var(--ttdk-stroke-subtle)}.dark,[data-mode=dark],[data-theme=dark]{--ttdk-checkbox-neutral-hover:var(--ttdk-color-neutral-600)}.ttdk-checkbox-wrapper,.ttdk-checkbox-root{cursor:default;user-select:none;font-family:var(--ttdk-font-sans);box-sizing:border-box;pointer-events:none;align-items:center;gap:10px;display:inline-flex;position:relative}.ttdk-checkbox-wrapper[data-has-description=true],.ttdk-checkbox-root[data-has-description=true]{align-items:flex-start}.ttdk-checkbox-native,.ttdk-checkbox-input{opacity:0;pointer-events:none;width:0;height:0;margin:0;padding:0;position:absolute}.ttdk-checkbox-control{background-color:var(--ttdk-checkbox-bg);border:1px solid var(--ttdk-checkbox-border);border-radius:var(--ttdk-checkbox-radius-sm);box-sizing:border-box;cursor:pointer;pointer-events:auto;flex-shrink:0;justify-content:center;align-items:center;margin-top:0;transition:all .15s cubic-bezier(.4,0,.2,1);display:inline-flex}.ttdk-checkbox-wrapper[data-has-description=true] .ttdk-checkbox-control,.ttdk-checkbox-root[data-has-description=true] .ttdk-checkbox-control{margin-top:2px}.ttdk-checkbox-wrapper:not([data-disabled=true]) .ttdk-checkbox-control:hover,.ttdk-checkbox-root:not([data-disabled=true]) .ttdk-checkbox-control:hover{border-color:var(--ttdk-checkbox-border-hover)}.ttdk-checkbox-native:focus-visible+.ttdk-checkbox-control,.ttdk-checkbox-input:focus-visible+.ttdk-checkbox-control{box-shadow:0 0 0 3px var(--ttdk-checkbox-ring)}.ttdk-checkbox-wrapper[data-checked=true] .ttdk-checkbox-control,.ttdk-checkbox-wrapper[data-indeterminate=true] .ttdk-checkbox-control,.ttdk-checkbox-wrapper[data-state=checked] .ttdk-checkbox-control,.ttdk-checkbox-wrapper[data-state=indeterminate] .ttdk-checkbox-control,.ttdk-checkbox-root[data-checked=true] .ttdk-checkbox-control,.ttdk-checkbox-root[data-indeterminate=true] .ttdk-checkbox-control,.ttdk-checkbox-root[data-state=checked] .ttdk-checkbox-control,.ttdk-checkbox-root[data-state=indeterminate] .ttdk-checkbox-control{background-color:var(--ttdk-checkbox-primary);border-color:var(--ttdk-checkbox-primary);color:var(--ttdk-checkbox-color-check)}.ttdk-checkbox-wrapper:not([data-disabled=true])[data-checked=true] .ttdk-checkbox-control:hover,.ttdk-checkbox-wrapper:not([data-disabled=true])[data-indeterminate=true] .ttdk-checkbox-control:hover,.ttdk-checkbox-wrapper:not([data-disabled=true])[data-state=checked] .ttdk-checkbox-control:hover,.ttdk-checkbox-wrapper:not([data-disabled=true])[data-state=indeterminate] .ttdk-checkbox-control:hover,.ttdk-checkbox-root:not([data-disabled=true])[data-checked=true] .ttdk-checkbox-control:hover,.ttdk-checkbox-root:not([data-disabled=true])[data-indeterminate=true] .ttdk-checkbox-control:hover,.ttdk-checkbox-root:not([data-disabled=true])[data-state=checked] .ttdk-checkbox-control:hover,.ttdk-checkbox-root:not([data-disabled=true])[data-state=indeterminate] .ttdk-checkbox-control:hover{background-color:var(--ttdk-checkbox-primary-hover);border-color:var(--ttdk-checkbox-primary-hover)}.ttdk-checkbox-wrapper[data-variant=danger][data-checked=true] .ttdk-checkbox-control,.ttdk-checkbox-wrapper[data-variant=danger][data-indeterminate=true] .ttdk-checkbox-control,.ttdk-checkbox-wrapper[data-color=danger][data-checked=true] .ttdk-checkbox-control,.ttdk-checkbox-wrapper[data-color=danger][data-indeterminate=true] .ttdk-checkbox-control,.ttdk-checkbox-root[data-variant=danger][data-state=checked] .ttdk-checkbox-control,.ttdk-checkbox-root[data-variant=danger][data-state=indeterminate] .ttdk-checkbox-control,.ttdk-checkbox-root[data-color=danger][data-state=checked] .ttdk-checkbox-control,.ttdk-checkbox-root[data-color=danger][data-state=indeterminate] .ttdk-checkbox-control{background-color:var(--ttdk-checkbox-danger);border-color:var(--ttdk-checkbox-danger)}.ttdk-checkbox-wrapper[data-variant=danger]:not([data-disabled=true])[data-checked=true] .ttdk-checkbox-control:hover,.ttdk-checkbox-wrapper[data-variant=danger]:not([data-disabled=true])[data-indeterminate=true] .ttdk-checkbox-control:hover,.ttdk-checkbox-wrapper[data-color=danger]:not([data-disabled=true])[data-checked=true] .ttdk-checkbox-control:hover,.ttdk-checkbox-wrapper[data-color=danger]:not([data-disabled=true])[data-indeterminate=true] .ttdk-checkbox-control:hover,.ttdk-checkbox-root[data-variant=danger]:not([data-disabled=true])[data-state=checked] .ttdk-checkbox-control:hover,.ttdk-checkbox-root[data-variant=danger]:not([data-disabled=true])[data-state=indeterminate] .ttdk-checkbox-control:hover,.ttdk-checkbox-root[data-color=danger]:not([data-disabled=true])[data-state=checked] .ttdk-checkbox-control:hover,.ttdk-checkbox-root[data-color=danger]:not([data-disabled=true])[data-state=indeterminate] .ttdk-checkbox-control:hover{background-color:var(--ttdk-checkbox-danger-hover);border-color:var(--ttdk-checkbox-danger-hover)}.ttdk-checkbox-wrapper[data-variant=success][data-checked=true] .ttdk-checkbox-control,.ttdk-checkbox-wrapper[data-variant=success][data-indeterminate=true] .ttdk-checkbox-control,.ttdk-checkbox-wrapper[data-color=success][data-checked=true] .ttdk-checkbox-control,.ttdk-checkbox-wrapper[data-color=success][data-indeterminate=true] .ttdk-checkbox-control,.ttdk-checkbox-root[data-variant=success][data-state=checked] .ttdk-checkbox-control,.ttdk-checkbox-root[data-variant=success][data-state=indeterminate] .ttdk-checkbox-control,.ttdk-checkbox-root[data-color=success][data-state=checked] .ttdk-checkbox-control,.ttdk-checkbox-root[data-color=success][data-state=indeterminate] .ttdk-checkbox-control{background-color:var(--ttdk-checkbox-success);border-color:var(--ttdk-checkbox-success)}.ttdk-checkbox-wrapper[data-variant=success]:not([data-disabled=true])[data-checked=true] .ttdk-checkbox-control:hover,.ttdk-checkbox-wrapper[data-variant=success]:not([data-disabled=true])[data-indeterminate=true] .ttdk-checkbox-control:hover,.ttdk-checkbox-wrapper[data-color=success]:not([data-disabled=true])[data-checked=true] .ttdk-checkbox-control:hover,.ttdk-checkbox-wrapper[data-color=success]:not([data-disabled=true])[data-indeterminate=true] .ttdk-checkbox-control:hover,.ttdk-checkbox-root[data-variant=success]:not([data-disabled=true])[data-state=checked] .ttdk-checkbox-control:hover,.ttdk-checkbox-root[data-variant=success]:not([data-disabled=true])[data-state=indeterminate] .ttdk-checkbox-control:hover,.ttdk-checkbox-root[data-color=success]:not([data-disabled=true])[data-state=checked] .ttdk-checkbox-control:hover,.ttdk-checkbox-root[data-color=success]:not([data-disabled=true])[data-state=indeterminate] .ttdk-checkbox-control:hover{background-color:var(--ttdk-checkbox-success-hover);border-color:var(--ttdk-checkbox-success-hover)}.ttdk-checkbox-wrapper[data-variant=warning][data-checked=true] .ttdk-checkbox-control,.ttdk-checkbox-wrapper[data-variant=warning][data-indeterminate=true] .ttdk-checkbox-control,.ttdk-checkbox-wrapper[data-color=warning][data-checked=true] .ttdk-checkbox-control,.ttdk-checkbox-wrapper[data-color=warning][data-indeterminate=true] .ttdk-checkbox-control,.ttdk-checkbox-root[data-variant=warning][data-state=checked] .ttdk-checkbox-control,.ttdk-checkbox-root[data-variant=warning][data-state=indeterminate] .ttdk-checkbox-control,.ttdk-checkbox-root[data-color=warning][data-state=checked] .ttdk-checkbox-control,.ttdk-checkbox-root[data-color=warning][data-state=indeterminate] .ttdk-checkbox-control{background-color:var(--ttdk-checkbox-warning);border-color:var(--ttdk-checkbox-warning);color:var(--ttdk-color-black)}.ttdk-checkbox-wrapper[data-variant=warning]:not([data-disabled=true])[data-checked=true] .ttdk-checkbox-control:hover,.ttdk-checkbox-wrapper[data-variant=warning]:not([data-disabled=true])[data-indeterminate=true] .ttdk-checkbox-control:hover,.ttdk-checkbox-wrapper[data-color=warning]:not([data-disabled=true])[data-checked=true] .ttdk-checkbox-control:hover,.ttdk-checkbox-wrapper[data-color=warning]:not([data-disabled=true])[data-indeterminate=true] .ttdk-checkbox-control:hover,.ttdk-checkbox-root[data-variant=warning]:not([data-disabled=true])[data-state=checked] .ttdk-checkbox-control:hover,.ttdk-checkbox-root[data-variant=warning]:not([data-disabled=true])[data-state=indeterminate] .ttdk-checkbox-control:hover,.ttdk-checkbox-root[data-color=warning]:not([data-disabled=true])[data-state=checked] .ttdk-checkbox-control:hover,.ttdk-checkbox-root[data-color=warning]:not([data-disabled=true])[data-state=indeterminate] .ttdk-checkbox-control:hover{background-color:var(--ttdk-checkbox-warning-hover);border-color:var(--ttdk-checkbox-warning-hover)}.ttdk-checkbox-wrapper[data-variant=info][data-checked=true] .ttdk-checkbox-control,.ttdk-checkbox-wrapper[data-variant=info][data-indeterminate=true] .ttdk-checkbox-control,.ttdk-checkbox-wrapper[data-color=info][data-checked=true] .ttdk-checkbox-control,.ttdk-checkbox-wrapper[data-color=info][data-indeterminate=true] .ttdk-checkbox-control,.ttdk-checkbox-root[data-variant=info][data-state=checked] .ttdk-checkbox-control,.ttdk-checkbox-root[data-variant=info][data-state=indeterminate] .ttdk-checkbox-control,.ttdk-checkbox-root[data-color=info][data-state=checked] .ttdk-checkbox-control,.ttdk-checkbox-root[data-color=info][data-state=indeterminate] .ttdk-checkbox-control{background-color:var(--ttdk-checkbox-info);border-color:var(--ttdk-checkbox-info)}.ttdk-checkbox-wrapper[data-variant=info]:not([data-disabled=true])[data-checked=true] .ttdk-checkbox-control:hover,.ttdk-checkbox-wrapper[data-variant=info]:not([data-disabled=true])[data-indeterminate=true] .ttdk-checkbox-control:hover,.ttdk-checkbox-wrapper[data-color=info]:not([data-disabled=true])[data-checked=true] .ttdk-checkbox-control:hover,.ttdk-checkbox-wrapper[data-color=info]:not([data-disabled=true])[data-indeterminate=true] .ttdk-checkbox-control:hover,.ttdk-checkbox-root[data-variant=info]:not([data-disabled=true])[data-state=checked] .ttdk-checkbox-control:hover,.ttdk-checkbox-root[data-variant=info]:not([data-disabled=true])[data-state=indeterminate] .ttdk-checkbox-control:hover,.ttdk-checkbox-root[data-color=info]:not([data-disabled=true])[data-state=checked] .ttdk-checkbox-control:hover,.ttdk-checkbox-root[data-color=info]:not([data-disabled=true])[data-state=indeterminate] .ttdk-checkbox-control:hover{background-color:var(--ttdk-checkbox-info-hover);border-color:var(--ttdk-checkbox-info-hover)}.ttdk-checkbox-wrapper[data-variant=neutral][data-checked=true] .ttdk-checkbox-control,.ttdk-checkbox-wrapper[data-variant=neutral][data-indeterminate=true] .ttdk-checkbox-control,.ttdk-checkbox-wrapper[data-color=neutral][data-checked=true] .ttdk-checkbox-control,.ttdk-checkbox-wrapper[data-color=neutral][data-indeterminate=true] .ttdk-checkbox-control,.ttdk-checkbox-root[data-variant=neutral][data-state=checked] .ttdk-checkbox-control,.ttdk-checkbox-root[data-variant=neutral][data-state=indeterminate] .ttdk-checkbox-control,.ttdk-checkbox-root[data-color=neutral][data-state=checked] .ttdk-checkbox-control,.ttdk-checkbox-root[data-color=neutral][data-state=indeterminate] .ttdk-checkbox-control{background-color:var(--ttdk-checkbox-neutral);border-color:var(--ttdk-checkbox-neutral)}.ttdk-checkbox-wrapper[data-variant=neutral]:not([data-disabled=true])[data-checked=true] .ttdk-checkbox-control:hover,.ttdk-checkbox-wrapper[data-variant=neutral]:not([data-disabled=true])[data-indeterminate=true] .ttdk-checkbox-control:hover,.ttdk-checkbox-wrapper[data-color=neutral]:not([data-disabled=true])[data-checked=true] .ttdk-checkbox-control:hover,.ttdk-checkbox-wrapper[data-color=neutral]:not([data-disabled=true])[data-indeterminate=true] .ttdk-checkbox-control:hover,.ttdk-checkbox-root[data-variant=neutral]:not([data-disabled=true])[data-state=checked] .ttdk-checkbox-control:hover,.ttdk-checkbox-root[data-variant=neutral]:not([data-disabled=true])[data-state=indeterminate] .ttdk-checkbox-control:hover,.ttdk-checkbox-root[data-color=neutral]:not([data-disabled=true])[data-state=checked] .ttdk-checkbox-control:hover,.ttdk-checkbox-root[data-color=neutral]:not([data-disabled=true])[data-state=indeterminate] .ttdk-checkbox-control:hover{background-color:var(--ttdk-checkbox-neutral-hover);border-color:var(--ttdk-checkbox-neutral-hover)}.ttdk-checkbox-wrapper[data-disabled=true],.ttdk-checkbox-root[data-disabled=true]{pointer-events:none;cursor:not-allowed!important}.ttdk-checkbox-wrapper[data-disabled=true] .ttdk-checkbox-control,.ttdk-checkbox-root[data-disabled=true] .ttdk-checkbox-control{background-color:var(--ttdk-checkbox-disabled-bg)!important;border:1px solid var(--ttdk-checkbox-border)!important;color:var(--ttdk-checkbox-text-disabled)!important;box-shadow:none!important}.ttdk-checkbox-wrapper[data-disabled=true] .ttdk-checkbox-label,.ttdk-checkbox-root[data-disabled=true] .ttdk-checkbox-label,.ttdk-checkbox-wrapper[data-disabled=true] .ttdk-checkbox-desc,.ttdk-checkbox-root[data-disabled=true] .ttdk-checkbox-desc{color:var(--ttdk-checkbox-text-disabled)!important}.ttdk-checkbox-wrapper[data-error=true] .ttdk-checkbox-control,.ttdk-checkbox-root[data-error=true] .ttdk-checkbox-control,.ttdk-checkbox-wrapper[data-error=true]:not([data-disabled=true]) .ttdk-checkbox-control:hover,.ttdk-checkbox-root[data-error=true]:not([data-disabled=true]) .ttdk-checkbox-control:hover{border-color:var(--ttdk-checkbox-text-error)}.ttdk-checkbox-wrapper[data-error=true] .ttdk-checkbox-native:focus-visible+.ttdk-checkbox-control,.ttdk-checkbox-wrapper[data-error=true] .ttdk-checkbox-input:focus-visible+.ttdk-checkbox-control,.ttdk-checkbox-root[data-error=true] .ttdk-checkbox-native:focus-visible+.ttdk-checkbox-control,.ttdk-checkbox-root[data-error=true] .ttdk-checkbox-input:focus-visible+.ttdk-checkbox-control{box-shadow:0 0 0 3px color-mix(in oklab, var(--ttdk-checkbox-danger) 25%, transparent)}.ttdk-checkbox-wrapper[data-error=true] .ttdk-checkbox-label,.ttdk-checkbox-root[data-error=true] .ttdk-checkbox-label{color:var(--ttdk-checkbox-text-error)}.ttdk-checkbox-label-wrapper{pointer-events:auto;flex-direction:column;gap:2px;display:flex}.ttdk-checkbox-label{color:var(--ttdk-ui-color,var(--ttdk-checkbox-text-title));letter-spacing:.5px;cursor:pointer;pointer-events:auto;font-size:14px;font-weight:600;line-height:1.25;transition:color .15s}.ttdk-checkbox-desc,.ttdk-checkbox-helper-text{color:var(--ttdk-ui-color,var(--ttdk-checkbox-text-subtitle));letter-spacing:.25px;cursor:default;pointer-events:auto;font-size:14px;font-weight:400;line-height:1.5;transition:color .15s}.ttdk-checkbox-error-msg{color:var(--ttdk-checkbox-text-error);cursor:default;pointer-events:auto;margin-top:2px;font-size:12px;font-weight:500;line-height:1.4}.ttdk-checkbox-wrapper[data-size=sm] .ttdk-checkbox-control,.ttdk-checkbox-root[data-size=sm] .ttdk-checkbox-control{width:16px;height:16px}.ttdk-checkbox-wrapper[data-size=sm] .ttdk-checkbox-icon,.ttdk-checkbox-root[data-size=sm] .ttdk-checkbox-icon{width:11px;height:11px}.ttdk-checkbox-wrapper[data-size=sm] .ttdk-checkbox-label,.ttdk-checkbox-root[data-size=sm] .ttdk-checkbox-label{font-size:13px;line-height:1.25}.ttdk-checkbox-wrapper[data-size=sm] .ttdk-checkbox-desc,.ttdk-checkbox-root[data-size=sm] .ttdk-checkbox-desc{font-size:12px;line-height:1.4}.ttdk-checkbox-wrapper[data-size=md] .ttdk-checkbox-control,.ttdk-checkbox-root[data-size=md] .ttdk-checkbox-control{width:18px;height:18px}.ttdk-checkbox-wrapper[data-size=md] .ttdk-checkbox-icon,.ttdk-checkbox-root[data-size=md] .ttdk-checkbox-icon{width:13px;height:13px}.ttdk-checkbox-wrapper[data-size=md] .ttdk-checkbox-label,.ttdk-checkbox-root[data-size=md] .ttdk-checkbox-label{letter-spacing:.5px;font-size:14px;font-weight:600;line-height:1.25}.ttdk-checkbox-wrapper[data-size=md] .ttdk-checkbox-desc,.ttdk-checkbox-root[data-size=md] .ttdk-checkbox-desc{letter-spacing:.25px;font-size:14px;font-weight:400;line-height:1.5}.ttdk-checkbox-wrapper[data-size=lg] .ttdk-checkbox-control,.ttdk-checkbox-root[data-size=lg] .ttdk-checkbox-control{width:22px;height:22px}.ttdk-checkbox-wrapper[data-size=lg][data-has-description=true] .ttdk-checkbox-control,.ttdk-checkbox-root[data-size=lg][data-has-description=true] .ttdk-checkbox-control{margin-top:2px}.ttdk-checkbox-wrapper[data-size=lg] .ttdk-checkbox-icon,.ttdk-checkbox-root[data-size=lg] .ttdk-checkbox-icon{width:15px;height:15px}.ttdk-checkbox-wrapper[data-size=lg] .ttdk-checkbox-label,.ttdk-checkbox-root[data-size=lg] .ttdk-checkbox-label{font-size:16px;line-height:1.3}.ttdk-checkbox-wrapper[data-size=lg] .ttdk-checkbox-desc,.ttdk-checkbox-root[data-size=lg] .ttdk-checkbox-desc{font-size:15px;line-height:1.5}.ttdk-checkbox-wrapper[data-rounded=none] .ttdk-checkbox-control,.ttdk-checkbox-root[data-rounded=none] .ttdk-checkbox-control{border-radius:var(--ttdk-checkbox-radius-none)}.ttdk-checkbox-wrapper[data-rounded=sm] .ttdk-checkbox-control,.ttdk-checkbox-root[data-rounded=sm] .ttdk-checkbox-control{border-radius:var(--ttdk-checkbox-radius-sm)}.ttdk-checkbox-wrapper[data-rounded=md] .ttdk-checkbox-control,.ttdk-checkbox-root[data-rounded=md] .ttdk-checkbox-control{border-radius:var(--ttdk-checkbox-radius-md)}.ttdk-checkbox-wrapper[data-rounded=lg] .ttdk-checkbox-control,.ttdk-checkbox-root[data-rounded=lg] .ttdk-checkbox-control{border-radius:var(--ttdk-checkbox-radius-lg)}.ttdk-checkbox-wrapper[data-rounded=full] .ttdk-checkbox-control,.ttdk-checkbox-root[data-rounded=full] .ttdk-checkbox-control{border-radius:var(--ttdk-checkbox-radius-full)}.ttdk-checkbox-icon{fill:none;stroke:currentColor;stroke-width:2.5px;stroke-linecap:round;stroke-linejoin:round;animation:.12s ease-out forwards ttdk-check-pop;display:block}[data-variant=warning] .ttdk-checkbox-icon,[data-color=warning] .ttdk-checkbox-icon{stroke:var(--ttdk-color-black)}[data-variant=warning] .ttdk-checkbox-control,[data-color=warning] .ttdk-checkbox-control{color:var(--ttdk-color-black)}@keyframes ttdk-check-pop{0%{opacity:0;transform:scale(.6)}to{opacity:1;transform:scale(1)}}