@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,477 @@
1
+ {
2
+ "name": "@ttdk-design-system/selectbox",
3
+ "component": "Selectbox",
4
+ "folder": "selectbox",
5
+ "description": "Komponen Selectbox TTDK sesuai spesifikasi Desain: - Single Select dengan Checkmark indicator dan Active Teal border (#00A3A6) - Multi-Select dengan Checkbox list, Chip tags (Label ✕), dan Action footer (Reset & Terapkan) - Searchable filter bar dengan input Cari 🔍 - Visual States: Default, Active/Open, Filled, Error (#FF3A39), Disabled (#E4E5E7)",
6
+ "stylesheets": [
7
+ {
8
+ "theme": "common",
9
+ "file": "selectbox.css",
10
+ "importPath": "web/selectbox/selectbox.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 selectbox (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
+ "controlStyle": {
42
+ "name": "controlStyle",
43
+ "type": "UiProps",
44
+ "optional": true,
45
+ "default": null,
46
+ "description": "Style kustom untuk elemen trigger kontrol selectbox (UiProps).",
47
+ "example": null,
48
+ "param": null
49
+ },
50
+ "controlClass": {
51
+ "name": "controlClass",
52
+ "type": "string",
53
+ "optional": true,
54
+ "default": null,
55
+ "description": "Class CSS kustom untuk elemen trigger kontrol selectbox.",
56
+ "example": null,
57
+ "param": null
58
+ },
59
+ "menuStyle": {
60
+ "name": "menuStyle",
61
+ "type": "UiProps",
62
+ "optional": true,
63
+ "default": null,
64
+ "description": "Style kustom untuk elemen menu dropdown popover (UiProps).",
65
+ "example": null,
66
+ "param": null
67
+ },
68
+ "menuClass": {
69
+ "name": "menuClass",
70
+ "type": "string",
71
+ "optional": true,
72
+ "default": null,
73
+ "description": "Class CSS kustom untuk elemen menu dropdown popover.",
74
+ "example": null,
75
+ "param": null
76
+ },
77
+ "listStyle": {
78
+ "name": "listStyle",
79
+ "type": "UiProps",
80
+ "optional": true,
81
+ "default": null,
82
+ "description": "Alias untuk menuStyle (konsistensi dengan Dropdown listStyle).",
83
+ "example": null,
84
+ "param": null
85
+ },
86
+ "listClass": {
87
+ "name": "listClass",
88
+ "type": "string",
89
+ "optional": true,
90
+ "default": null,
91
+ "description": "Class CSS kustom untuk opsi list dropdown (atau alias menuClass).",
92
+ "example": null,
93
+ "param": null
94
+ },
95
+ "errorMessageStyle": {
96
+ "name": "errorMessageStyle",
97
+ "type": "UiProps",
98
+ "optional": true,
99
+ "default": null,
100
+ "description": "Style kustom untuk elemen pesan error validasi (UiProps).",
101
+ "example": null,
102
+ "param": null
103
+ },
104
+ "errorMessageClass": {
105
+ "name": "errorMessageClass",
106
+ "type": "string",
107
+ "optional": true,
108
+ "default": null,
109
+ "description": "Class CSS kustom untuk elemen pesan error validasi.",
110
+ "example": null,
111
+ "param": null
112
+ },
113
+ "helperTextStyle": {
114
+ "name": "helperTextStyle",
115
+ "type": "UiProps",
116
+ "optional": true,
117
+ "default": null,
118
+ "description": "Style kustom untuk elemen helper text (UiProps).",
119
+ "example": null,
120
+ "param": null
121
+ },
122
+ "helperTextClass": {
123
+ "name": "helperTextClass",
124
+ "type": "string",
125
+ "optional": true,
126
+ "default": null,
127
+ "description": "Class CSS kustom untuk elemen helper text.",
128
+ "example": null,
129
+ "param": null
130
+ },
131
+ "optional": {
132
+ "name": "optional",
133
+ "type": "boolean",
134
+ "optional": true,
135
+ "default": "false",
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": "Pilih dropdown menu",
154
+ "description": "Teks petunjuk saat belum ada opsi yang dipilih.",
155
+ "example": null,
156
+ "param": null
157
+ },
158
+ "value": {
159
+ "name": "value",
160
+ "type": "any",
161
+ "optional": true,
162
+ "default": null,
163
+ "description": "Nilai terpilih saat ini (single string/number atau array nilai untuk mode multiple).",
164
+ "example": null,
165
+ "param": null
166
+ },
167
+ "defaultValue": {
168
+ "name": "defaultValue",
169
+ "type": "any",
170
+ "optional": true,
171
+ "default": null,
172
+ "description": "Nilai awal tidak terkontrol (uncontrolled initial value).",
173
+ "example": null,
174
+ "param": null
175
+ },
176
+ "options": {
177
+ "name": "options",
178
+ "type": "Array<SelectboxOption | string>",
179
+ "optional": true,
180
+ "default": null,
181
+ "description": "Daftar pilihan opsi dropdown. Dapat berupa array of object `{ label, value }` atau array of string.",
182
+ "example": null,
183
+ "param": null
184
+ },
185
+ "multiple": {
186
+ "name": "multiple",
187
+ "type": "boolean",
188
+ "optional": true,
189
+ "default": "false",
190
+ "description": "Mode pemilihan jamak (multi-select) dengan tampilan chips/tag dan daftar checkbox.",
191
+ "example": null,
192
+ "param": null
193
+ },
194
+ "searchable": {
195
+ "name": "searchable",
196
+ "type": "boolean",
197
+ "optional": true,
198
+ "default": "false",
199
+ "description": "Mengaktifkan kotak pencarian (search input) di dalam menu dropdown.",
200
+ "example": null,
201
+ "param": null
202
+ },
203
+ "searchPlaceholder": {
204
+ "name": "searchPlaceholder",
205
+ "type": "string",
206
+ "optional": true,
207
+ "default": "Cari",
208
+ "description": "Placeholder pada kotak pencarian di dalam dropdown.",
209
+ "example": null,
210
+ "param": null
211
+ },
212
+ "applyText": {
213
+ "name": "applyText",
214
+ "type": "string",
215
+ "optional": true,
216
+ "default": "Terapkan",
217
+ "description": "Teks tombol terapkan pada footer multi-select.",
218
+ "example": null,
219
+ "param": null
220
+ },
221
+ "resetText": {
222
+ "name": "resetText",
223
+ "type": "string",
224
+ "optional": true,
225
+ "default": "Reset",
226
+ "description": "Teks tombol reset pada footer multi-select.",
227
+ "example": null,
228
+ "param": null
229
+ },
230
+ "name": {
231
+ "name": "name",
232
+ "type": "string",
233
+ "optional": true,
234
+ "default": null,
235
+ "description": "Nama form field HTML.",
236
+ "example": null,
237
+ "param": null
238
+ },
239
+ "id": {
240
+ "name": "id",
241
+ "type": "string",
242
+ "optional": true,
243
+ "default": null,
244
+ "description": "Identifier unik elemen selectbox.",
245
+ "example": null,
246
+ "param": null
247
+ },
248
+ "error": {
249
+ "name": "error",
250
+ "type": "boolean",
251
+ "optional": true,
252
+ "default": "false",
253
+ "description": "Status apakah selectbox sedang dalam kondisi error / tidak valid.",
254
+ "example": null,
255
+ "param": null
256
+ },
257
+ "errorMessage": {
258
+ "name": "errorMessage",
259
+ "type": "string",
260
+ "optional": true,
261
+ "default": null,
262
+ "description": "Pesan teks penjelasan kesalahan validasi di bawah field.",
263
+ "example": null,
264
+ "param": null
265
+ },
266
+ "helperText": {
267
+ "name": "helperText",
268
+ "type": "string",
269
+ "optional": true,
270
+ "default": null,
271
+ "description": "Teks petunjuk atau keterangan bantuan di bawah field (12px Regular, #3C4245).",
272
+ "example": null,
273
+ "param": null
274
+ },
275
+ "helperTextPosition": {
276
+ "name": "helperTextPosition",
277
+ "type": "'top' | 'bottom'",
278
+ "optional": true,
279
+ "default": null,
280
+ "description": "Posisi teks helper",
281
+ "example": null,
282
+ "param": null
283
+ },
284
+ "size": {
285
+ "name": "size",
286
+ "type": "'sm' | 'md' | 'lg'",
287
+ "optional": true,
288
+ "default": "md",
289
+ "description": "Skala ukuran selectbox. - `'sm'`: 36px - `'md'`: 48px (standar desain) - `'lg'`: 56px",
290
+ "example": null,
291
+ "param": null
292
+ },
293
+ "rounded": {
294
+ "name": "rounded",
295
+ "type": "'none' | 'sm' | 'md' | 'lg' | 'full'",
296
+ "optional": true,
297
+ "default": "md",
298
+ "description": "Bentuk sudut kelengkungan selectbox. - `'none'`: 0px - `'sm'`: 4px - `'md'`: 8px (standar desain) - `'lg'`: 12px - `'full'`: 9999px (kapsul)",
299
+ "example": null,
300
+ "param": null
301
+ },
302
+ "block": {
303
+ "name": "block",
304
+ "type": "boolean",
305
+ "optional": true,
306
+ "default": "false",
307
+ "description": "Menjadikan lebar field selectbox memenuhi kontainer penuh (full-width 100%).",
308
+ "example": null,
309
+ "param": null
310
+ },
311
+ "disabled": {
312
+ "name": "disabled",
313
+ "type": "boolean",
314
+ "optional": true,
315
+ "default": "false",
316
+ "description": "Status apakah selectbox dinonaktifkan (disabled).",
317
+ "example": null,
318
+ "param": null
319
+ },
320
+ "required": {
321
+ "name": "required",
322
+ "type": "boolean",
323
+ "optional": true,
324
+ "default": "false",
325
+ "description": "Menandai field sebagai input wajib diisi (menampilkan tanda bintang merah *).",
326
+ "example": null,
327
+ "param": null
328
+ },
329
+ "inputRef": {
330
+ "name": "inputRef",
331
+ "type": "any",
332
+ "optional": true,
333
+ "default": null,
334
+ "description": "Ref instance elemen control selectbox untuk akses DOM langsung.",
335
+ "example": null,
336
+ "param": null
337
+ },
338
+ "clearable": {
339
+ "name": "clearable",
340
+ "type": "boolean",
341
+ "optional": true,
342
+ "default": "false",
343
+ "description": "Menampilkan tombol × untuk menghapus pilihan yang sudah dipilih.",
344
+ "example": null,
345
+ "param": null
346
+ },
347
+ "loading": {
348
+ "name": "loading",
349
+ "type": "boolean",
350
+ "optional": true,
351
+ "default": "false",
352
+ "description": "Menampilkan spinner loading dan menonaktifkan interaksi selectbox.",
353
+ "example": null,
354
+ "param": null
355
+ },
356
+ "readOnly": {
357
+ "name": "readOnly",
358
+ "type": "boolean",
359
+ "optional": true,
360
+ "default": "false",
361
+ "description": "Menjadikan selectbox hanya-baca (tidak bisa dibuka/diubah).",
362
+ "example": null,
363
+ "param": null
364
+ },
365
+ "style": {
366
+ "name": "style",
367
+ "type": "any",
368
+ "optional": true,
369
+ "default": null,
370
+ "description": "Inline CSS style object native.",
371
+ "example": null,
372
+ "param": null
373
+ },
374
+ "ui": {
375
+ "name": "ui",
376
+ "type": "UiProps",
377
+ "optional": true,
378
+ "default": null,
379
+ "description": "Kustomisasi visual granular root / form-item (UiProps).",
380
+ "example": null,
381
+ "param": null
382
+ },
383
+ "onChange": {
384
+ "name": "onChange",
385
+ "type": "(value: any) => void",
386
+ "optional": true,
387
+ "default": null,
388
+ "description": "Callback event saat nilai pilihan berubah.",
389
+ "example": null,
390
+ "param": null
391
+ },
392
+ "onSearch": {
393
+ "name": "onSearch",
394
+ "type": "(query: string) => void",
395
+ "optional": true,
396
+ "default": null,
397
+ "description": "Callback event saat pengguna mengetik di kolom pencarian.",
398
+ "example": null,
399
+ "param": null
400
+ },
401
+ "onOpen": {
402
+ "name": "onOpen",
403
+ "type": "() => void",
404
+ "optional": true,
405
+ "default": null,
406
+ "description": "Callback event saat menu dropdown terbuka.",
407
+ "example": null,
408
+ "param": null
409
+ },
410
+ "className": {
411
+ "name": "className",
412
+ "type": "string",
413
+ "optional": true,
414
+ "default": null,
415
+ "description": "Class CSS kustom.",
416
+ "example": null,
417
+ "param": null
418
+ },
419
+ "disableShift": {
420
+ "name": "disableShift",
421
+ "type": "boolean",
422
+ "optional": true,
423
+ "default": "false",
424
+ "description": "Menonaktifkan middleware `shift` pada floating-ui sehingga posisi list popover tidak bergeser secara horizontal mengikuti tepi layar. Berguna saat ingin list tetap berada di tengah atau posisi placement yang ditentukan.",
425
+ "example": null,
426
+ "param": null
427
+ },
428
+ "onClose": {
429
+ "name": "onClose",
430
+ "type": "() => void",
431
+ "optional": true,
432
+ "default": null,
433
+ "description": "Callback event saat menu dropdown ditutup.",
434
+ "example": null,
435
+ "param": null
436
+ }
437
+ },
438
+ "subInterfaces": {
439
+ "SelectboxOption": {
440
+ "label": {
441
+ "name": "label",
442
+ "type": "string",
443
+ "optional": false,
444
+ "default": null,
445
+ "description": "Teks label tampilan pilihan dropdown.",
446
+ "example": null,
447
+ "param": null
448
+ },
449
+ "value": {
450
+ "name": "value",
451
+ "type": "string | number",
452
+ "optional": false,
453
+ "default": null,
454
+ "description": "Nilai unik (value) dari opsi pilihan.",
455
+ "example": null,
456
+ "param": null
457
+ },
458
+ "disabled": {
459
+ "name": "disabled",
460
+ "type": "boolean",
461
+ "optional": true,
462
+ "default": "false",
463
+ "description": "Status apakah opsi ini dinonaktifkan dari pemilihan.",
464
+ "example": null,
465
+ "param": null
466
+ }
467
+ }
468
+ },
469
+ "supportedFrameworks": [
470
+ "react",
471
+ "vue",
472
+ "svelte"
473
+ ],
474
+ "themes": [
475
+ "tw"
476
+ ]
477
+ }
@@ -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;position:relative}.ttdk-form-item:has([data-open=true]),.ttdk-form-item:has(.ttdk-selectbox-dropdown){z-index:50}.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);color:var(--ttdk-text-icon-disabled)}.dark .ttdk-form-optional{color:var(--ttdk-text-icon-disabled)}.ttdk-selectbox-control{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;cursor:pointer;user-select:none;width:100%;height:auto;min-height:48px;font-family:var(--ttdk-font-sans);justify-content:space-between;align-items:center;gap:var(--ttdk-spacing-xs);color:var(--ttdk-ui-color,var(--ttdk-text-icon-primary));outline:none;padding:6px 12px;transition:border-color .15s,box-shadow .15s,background-color .15s;display:flex;position:relative}.dark .ttdk-selectbox-control{background:var(--ttdk-bg-base-primary);border-color:var(--ttdk-stroke-subtle);color:var(--ttdk-ui-color,var(--ttdk-text-icon-primary))}.ttdk-selectbox-control[data-size=sm]{height:auto;min-height:36px;font-size:var(--ttdk-font-size-12);padding:3px 10px}.ttdk-selectbox-control[data-size=md]{height:auto;min-height:48px;font-size:var(--ttdk-font-size-14);padding:6px 12px}.ttdk-selectbox-control[data-size=lg]{height:auto;min-height:56px;font-size:var(--ttdk-font-size-16);padding:8px 14px}.ttdk-selectbox-control[data-rounded=none]{border-radius:var(--ttdk-radius-input-none)}.ttdk-selectbox-control[data-rounded=xs]{border-radius:var(--ttdk-radius-input-xs)}.ttdk-selectbox-control[data-rounded=sm]{border-radius:var(--ttdk-radius-input-sm)}.ttdk-selectbox-control[data-rounded=md]{border-radius:var(--ttdk-radius-input-md)}.ttdk-selectbox-control[data-rounded=lg]{border-radius:var(--ttdk-radius-input-lg)}.ttdk-selectbox-control[data-rounded=xl]{border-radius:var(--ttdk-radius-input-xl)}.ttdk-selectbox-control[data-rounded=full]{border-radius:var(--ttdk-radius-input-full)}.ttdk-selectbox-control:focus-visible,.ttdk-selectbox-control[data-open=true]{border-color:var(--ttdk-stroke-border-focus);box-shadow:0 0 0 3px color-mix(in srgb, var(--ttdk-stroke-border-focus) 15%, transparent)}.dark .ttdk-selectbox-control:focus-visible,.dark .ttdk-selectbox-control[data-open=true]{border-color:var(--ttdk-stroke-border-focus);box-shadow:0 0 0 3px color-mix(in srgb, var(--ttdk-stroke-border-focus) 25%, transparent)}.ttdk-selectbox-control[data-filled=true]:not([data-open=true]):not([data-error=true]),.dark .ttdk-selectbox-control[data-filled=true]:not([data-open=true]):not([data-error=true]){border-color:var(--ttdk-stroke-strong)}.ttdk-selectbox-control[data-error=true]{border-color:var(--ttdk-stroke-status-error)!important}.ttdk-selectbox-control[data-error=true]:focus-visible,.ttdk-selectbox-control[data-error=true][data-open=true]{box-shadow:0 0 0 3px color-mix(in srgb, var(--ttdk-stroke-status-error) 15%, transparent)}.dark .ttdk-selectbox-control[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-selectbox-control[data-disabled=true]{background:var(--ttdk-bg-secondary-disabled)!important;border-color:var(--ttdk-stroke-subtle)!important;color:var(--ttdk-text-icon-disabled)!important;cursor:not-allowed!important;box-shadow:none!important}.dark .ttdk-selectbox-control[data-disabled=true]{background:var(--ttdk-bg-secondary-disabled)!important;border-color:var(--ttdk-stroke-subtle)!important;color:var(--ttdk-text-icon-disabled)!important}.ttdk-selectbox-display{flex-wrap:wrap;flex:1;align-items:center;gap:6px;min-width:0;padding:2px 0;display:flex}.ttdk-selectbox-value{color:inherit;font-size:var(--ttdk-font-size-14);line-height:var(--ttdk-font-size-20);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.dark .ttdk-selectbox-value{color:inherit}.ttdk-selectbox-placeholder{color:var(--ttdk-text-icon-disabled);font-size:var(--ttdk-font-size-14);line-height:var(--ttdk-font-size-20);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.dark .ttdk-selectbox-placeholder{color:var(--ttdk-text-icon-disabled)}.ttdk-selectbox-chips{flex-wrap:wrap;align-items:center;gap:6px;width:100%;display:flex}.ttdk-select-chip{align-items:center;gap:var(--ttdk-spacing-xxs);padding:2px var(--ttdk-spacing-xs);background:var(--ttdk-bg-secondary-disabled);border:var(--ttdk-stroke-width-thin) solid var(--ttdk-stroke-subtle);border-radius:var(--ttdk-radius-input-full);font-family:var(--ttdk-font-sans);font-size:var(--ttdk-font-size-12);font-weight:var(--ttdk-font-weight-medium);color:var(--ttdk-text-icon-primary);box-sizing:border-box;line-height:16px;display:inline-flex}.ttdk-select-chip-text{white-space:nowrap;text-overflow:ellipsis;max-width:200px;overflow:hidden}.dark .ttdk-select-chip{background:var(--ttdk-bg-secondary-disabled);border-color:var(--ttdk-stroke-subtle);color:var(--ttdk-text-icon-primary)}.ttdk-select-chip-remove{width:var(--ttdk-font-size-16);height:var(--ttdk-font-size-16);color:var(--ttdk-text-icon-secondary);cursor:pointer;background:0 0;border:none;border-radius:50%;outline:none;flex-shrink:0;justify-content:center;align-items:center;margin:0 -2px 0 2px;padding:0;transition:all .15s;display:inline-flex}.ttdk-select-chip-remove:hover{background:color-mix(in srgb, var(--ttdk-stroke-status-error) 12%, transparent);color:var(--ttdk-stroke-status-error)}.dark .ttdk-select-chip-remove{color:var(--ttdk-text-icon-secondary)}.dark .ttdk-select-chip-remove:hover{background:color-mix(in srgb, var(--ttdk-stroke-status-error) 20%, transparent);color:var(--ttdk-stroke-status-error)}.ttdk-selectbox-clear{width:var(--ttdk-font-size-20);height:var(--ttdk-font-size-20);background:var(--ttdk-bg-secondary-disabled);border:var(--ttdk-stroke-width-thin) solid var(--ttdk-stroke-subtle);color:var(--ttdk-text-icon-secondary);cursor:pointer;border-radius:50%;outline:none;flex-shrink:0;justify-content:center;align-items:center;margin:0;padding:0;transition:all .15s;display:inline-flex}.ttdk-selectbox-clear:hover{background:var(--ttdk-stroke-subtle);border-color:var(--ttdk-stroke-strong);color:var(--ttdk-text-icon-primary);transform:scale(1.05)}.ttdk-selectbox-clear:active{background:var(--ttdk-stroke-strong);transform:scale(.95)}.ttdk-selectbox-clear:focus-visible{box-shadow:0 0 0 2px color-mix(in srgb, var(--ttdk-stroke-border-focus) 40%, transparent)}.dark .ttdk-selectbox-clear{background:var(--ttdk-bg-secondary-disabled);border-color:var(--ttdk-stroke-subtle);color:var(--ttdk-text-icon-secondary)}.dark .ttdk-selectbox-clear:hover{background:var(--ttdk-stroke-subtle);border-color:var(--ttdk-stroke-strong);color:var(--ttdk-text-icon-primary)}.dark .ttdk-selectbox-clear:active{background:var(--ttdk-stroke-strong)}.ttdk-selectbox-arrow{color:var(--ttdk-text-icon-disabled);flex-shrink:0;justify-content:center;align-items:center;transition:transform .2s,color .15s;display:inline-flex}.dark .ttdk-selectbox-arrow{color:var(--ttdk-text-icon-disabled)}.ttdk-selectbox-arrow[data-open=true]{color:var(--ttdk-stroke-border-focus);transform:rotate(180deg)}.ttdk-selectbox-dropdown{background:var(--ttdk-bg-base-primary);border:var(--ttdk-stroke-width-thin) solid var(--ttdk-stroke-subtle);border-radius:var(--ttdk-radius-input-lg);width:max-content;min-width:100%;box-shadow:var(--ttdk-shadow-lg);box-sizing:border-box;font-family:var(--ttdk-font-sans);color:var(--ttdk-text-icon-primary);z-index:100;flex-direction:column;animation:.15s ease-out ttdk-dropdown-in;display:flex;position:absolute;top:0;left:0;overflow:hidden}.ttdk-selectbox-dropdown[data-placement^=top]{transform-origin:bottom}.ttdk-selectbox-dropdown[data-placement^=bottom]{transform-origin:top}.dark .ttdk-selectbox-dropdown{background:var(--ttdk-bg-base-primary);border-color:var(--ttdk-stroke-subtle);box-shadow:var(--ttdk-shadow-lg);color:var(--ttdk-text-icon-primary)}@keyframes ttdk-dropdown-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.ttdk-selectbox-search{border-bottom:var(--ttdk-stroke-width-thin) solid var(--ttdk-stroke-subtle);background:var(--ttdk-bg-base-primary);align-items:center;gap:var(--ttdk-spacing-xs);flex-shrink:0;padding:10px 12px;display:flex}.dark .ttdk-selectbox-search{background:var(--ttdk-bg-base-primary);border-bottom-color:var(--ttdk-stroke-subtle)}.ttdk-selectbox-search-input{font-size:var(--ttdk-font-size-14);color:var(--ttdk-text-icon-primary);font-family:var(--ttdk-font-sans);background:0 0;border:none;outline:none;flex:1}.dark .ttdk-selectbox-search-input{color:var(--ttdk-text-icon-primary)}.ttdk-selectbox-search-input::placeholder,.dark .ttdk-selectbox-search-input::placeholder{color:var(--ttdk-text-icon-disabled)}.ttdk-selectbox-search-icon{color:var(--ttdk-text-icon-disabled);align-items:center;display:inline-flex}.dark .ttdk-selectbox-search-icon{color:var(--ttdk-text-icon-disabled)}.ttdk-selectbox-options-list{min-height:0;padding:var(--ttdk-spacing-xxs);scrollbar-width:thin;flex:auto;overflow-y:auto}.ttdk-selectbox-options-list::-webkit-scrollbar{width:var(--ttdk-spacing-xxs)}.ttdk-selectbox-options-list::-webkit-scrollbar-thumb{background:var(--ttdk-stroke-subtle);border-radius:var(--ttdk-radius-input-sm)}.dark .ttdk-selectbox-options-list::-webkit-scrollbar-thumb{background:var(--ttdk-stroke-subtle)}.ttdk-selectbox-option{border-radius:var(--ttdk-radius-input-md);font-size:var(--ttdk-font-size-14);font-family:var(--ttdk-font-sans);color:inherit;cursor:pointer;user-select:none;justify-content:space-between;align-items:center;gap:10px;padding:9px 12px;transition:background-color .12s,color .12s;display:flex}.dark .ttdk-selectbox-option{color:inherit}.ttdk-selectbox-option:hover{background:var(--ttdk-brand-subtle);color:var(--ttdk-brand-default)}.dark .ttdk-selectbox-option:hover{background:color-mix(in srgb, var(--ttdk-brand-default) 15%, transparent);color:var(--ttdk-stroke-border-focus)}.ttdk-selectbox-option[data-selected=true]{color:var(--ttdk-brand-default);font-weight:var(--ttdk-font-weight-semibold)}.dark .ttdk-selectbox-option[data-selected=true]{color:var(--ttdk-stroke-border-focus)}.ttdk-selectbox-option-label{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.ttdk-selectbox-check-icon{color:currentColor;flex-shrink:0;align-items:center;display:inline-flex}.dark .ttdk-selectbox-check-icon{color:currentColor}.ttdk-selectbox-checkbox{width:var(--ttdk-font-size-16);height:var(--ttdk-font-size-16);border:var(--ttdk-stroke-width-thin) solid var(--ttdk-stroke-subtle);border-radius:var(--ttdk-radius-input-sm);background:var(--ttdk-bg-base-primary);flex-shrink:0;justify-content:center;align-items:center;transition:all .15s;display:inline-flex}.dark .ttdk-selectbox-checkbox{background:var(--ttdk-bg-base-primary);border-color:var(--ttdk-stroke-subtle)}.ttdk-selectbox-checkbox[data-checked=true]{background:var(--ttdk-brand-default);border-color:var(--ttdk-brand-default);color:var(--ttdk-text-icon-stay-white)}.ttdk-selectbox-empty{text-align:center;font-size:var(--ttdk-font-size-14);color:var(--ttdk-text-icon-disabled);padding:16px 12px}.dark .ttdk-selectbox-empty{color:var(--ttdk-text-icon-disabled)}.ttdk-selectbox-actions{border-top:var(--ttdk-stroke-width-thin) solid var(--ttdk-stroke-subtle);background:var(--ttdk-bg-secondary-disabled);justify-content:space-between;align-items:center;gap:var(--ttdk-spacing-xs);flex-shrink:0;padding:8px 12px;display:flex}.dark .ttdk-selectbox-actions{background:var(--ttdk-bg-secondary-disabled);border-top-color:var(--ttdk-stroke-subtle)}.ttdk-selectbox-btn-reset{color:var(--ttdk-brand-default);font-size:var(--ttdk-font-size-12);font-weight:var(--ttdk-font-weight-semibold);font-family:var(--ttdk-font-sans);cursor:pointer;border-radius:var(--ttdk-radius-input-sm);background:0 0;border:none;align-items:center;gap:6px;padding:6px 8px;transition:color .15s,background-color .15s;display:inline-flex}.ttdk-selectbox-btn-reset:hover{background:color-mix(in srgb, var(--ttdk-brand-default) 8%, transparent);color:var(--ttdk-brand-strong)}.dark .ttdk-selectbox-btn-reset{color:var(--ttdk-stroke-border-focus)}.dark .ttdk-selectbox-btn-reset:hover{background:color-mix(in srgb, var(--ttdk-brand-default) 15%, transparent);color:var(--ttdk-stroke-border-focus)}.ttdk-selectbox-btn-apply{background:var(--ttdk-brand-default);color:var(--ttdk-text-icon-stay-white);font-size:var(--ttdk-font-size-12);font-weight:var(--ttdk-font-weight-semibold);font-family:var(--ttdk-font-sans);cursor:pointer;border-radius:var(--ttdk-radius-input-md);border:none;align-items:center;gap:6px;padding:6px 16px;transition:background-color .15s,transform .1s;display:inline-flex}.ttdk-selectbox-btn-apply:hover{background:var(--ttdk-brand-strong)}.ttdk-selectbox-btn-apply:active{transform:scale(.98)}.ttdk-form-helper{font-size:var(--ttdk-font-size-12);line-height:var(--ttdk-font-size-18);color:var(--ttdk-text-icon-secondary);font-family:var(--ttdk-font-sans)}.dark .ttdk-form-helper{color:var(--ttdk-text-icon-secondary)}.ttdk-form-error{font-size:var(--ttdk-font-size-12);line-height:var(--ttdk-font-size-18);color:var(--ttdk-text-icon-status-error);font-weight:var(--ttdk-font-weight-medium);font-family:var(--ttdk-font-sans)}.dark .ttdk-form-error{color:var(--ttdk-text-icon-status-error)}.ttdk-select-chip-remove-icon,.ttdk-selectbox-clear-icon,.ttdk-selectbox-spinner-icon,.ttdk-selectbox-arrow-icon,.ttdk-selectbox-search-svg,.ttdk-selectbox-checkbox-icon,.ttdk-selectbox-check-svg,.ttdk-selectbox-btn-reset-icon,.ttdk-selectbox-btn-apply-icon{stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}.ttdk-select-chip-remove-icon{width:var(--ttdk-font-size-12);height:var(--ttdk-font-size-12);stroke-width:var(--ttdk-stroke-width-med)}.ttdk-selectbox-clear-icon{width:var(--ttdk-font-size-14);height:var(--ttdk-font-size-14);stroke-width:var(--ttdk-stroke-width-med)}.ttdk-selectbox-spinner{color:var(--ttdk-text-icon-disabled);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.ttdk-selectbox-spinner-icon{stroke-width:2.2px;width:20px;height:20px;animation:1.2s steps(12,end) infinite ttdk-spin}.ttdk-selectbox-control[data-size=sm] .ttdk-selectbox-spinner,.ttdk-selectbox-control[data-size=sm] .ttdk-selectbox-spinner-icon{width:16px;height:16px}.ttdk-selectbox-control[data-size=md] .ttdk-selectbox-spinner,.ttdk-selectbox-control[data-size=md] .ttdk-selectbox-spinner-icon{width:20px;height:20px}.ttdk-selectbox-control[data-size=lg] .ttdk-selectbox-spinner,.ttdk-selectbox-control[data-size=lg] .ttdk-selectbox-spinner-icon{width:24px;height:24px}.ttdk-selectbox-arrow-icon{width:var(--ttdk-font-size-18);height:var(--ttdk-font-size-18);stroke-width:var(--ttdk-stroke-width-med)}.ttdk-selectbox-search-svg{width:var(--ttdk-font-size-16);height:var(--ttdk-font-size-16);stroke-width:var(--ttdk-stroke-width-med)}.ttdk-selectbox-checkbox-icon{width:var(--ttdk-font-size-12);height:var(--ttdk-font-size-12);stroke-width:var(--ttdk-stroke-width-med)}.ttdk-selectbox-check-svg{width:var(--ttdk-font-size-16);height:var(--ttdk-font-size-16);stroke-width:var(--ttdk-stroke-width-med)}.ttdk-selectbox-btn-reset-icon,.ttdk-selectbox-btn-apply-icon{width:var(--ttdk-font-size-14);height:var(--ttdk-font-size-14);stroke-width:var(--ttdk-stroke-width-med)}@keyframes ttdk-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}