@ttdk-design-system/library-svelte 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 (270) hide show
  1. package/AI_GUIDE.md +6518 -0
  2. package/dist/core/index.d.ts +2 -0
  3. package/dist/core/index.js +2 -0
  4. package/dist/core/tailwind-preset.cjs +62 -0
  5. package/dist/core/tailwind-preset.d.cts +63 -0
  6. package/dist/core/tailwind-preset.d.ts +74 -0
  7. package/dist/core/tailwind-preset.js +79 -0
  8. package/dist/core/theme/tokens.css +663 -0
  9. package/dist/core/types.d.ts +152 -0
  10. package/dist/core/types.js +735 -0
  11. package/dist/index.d.ts +14 -0
  12. package/dist/index.js +15 -0
  13. package/dist/tailwind-preset.cjs +62 -0
  14. package/dist/tailwind-preset.d.cts +63 -0
  15. package/dist/tailwind-preset.d.ts +74 -0
  16. package/dist/tailwind-preset.js +79 -0
  17. package/dist/types.d.ts +1 -0
  18. package/dist/types.js +1 -0
  19. package/dist/web/accordion/AI_GUIDE.md +149 -0
  20. package/dist/web/accordion/accordion.css +1 -0
  21. package/dist/web/accordion/accordion.svelte +217 -0
  22. package/dist/web/accordion/accordion.svelte.d.ts +224 -0
  23. package/dist/web/accordion/index.d.ts +2 -0
  24. package/dist/web/accordion/index.js +2 -0
  25. package/dist/web/accordion/manifest.json +351 -0
  26. package/dist/web/alert/AI_GUIDE.md +139 -0
  27. package/dist/web/alert/alert.css +1 -0
  28. package/dist/web/alert/alert.svelte +175 -0
  29. package/dist/web/alert/alert.svelte.d.ts +165 -0
  30. package/dist/web/alert/index.d.ts +2 -0
  31. package/dist/web/alert/index.js +2 -0
  32. package/dist/web/alert/manifest.json +240 -0
  33. package/dist/web/avatar/AI_GUIDE.md +118 -0
  34. package/dist/web/avatar/avatar.css +1 -0
  35. package/dist/web/avatar/avatar.svelte +108 -0
  36. package/dist/web/avatar/avatar.svelte.d.ts +147 -0
  37. package/dist/web/avatar/index.d.ts +2 -0
  38. package/dist/web/avatar/index.js +2 -0
  39. package/dist/web/avatar/manifest.json +195 -0
  40. package/dist/web/badge/AI_GUIDE.md +94 -0
  41. package/dist/web/badge/badge.css +1 -0
  42. package/dist/web/badge/badge.svelte +50 -0
  43. package/dist/web/badge/badge.svelte.d.ts +111 -0
  44. package/dist/web/badge/index.d.ts +2 -0
  45. package/dist/web/badge/index.js +2 -0
  46. package/dist/web/badge/manifest.json +141 -0
  47. package/dist/web/banner/AI_GUIDE.md +130 -0
  48. package/dist/web/banner/banner.css +1 -0
  49. package/dist/web/banner/banner.svelte +180 -0
  50. package/dist/web/banner/banner.svelte.d.ts +172 -0
  51. package/dist/web/banner/index.d.ts +2 -0
  52. package/dist/web/banner/index.js +2 -0
  53. package/dist/web/banner/manifest.json +240 -0
  54. package/dist/web/breadcrumb/AI_GUIDE.md +120 -0
  55. package/dist/web/breadcrumb/breadcrumb.css +1 -0
  56. package/dist/web/breadcrumb/breadcrumb.svelte +168 -0
  57. package/dist/web/breadcrumb/breadcrumb.svelte.d.ts +141 -0
  58. package/dist/web/breadcrumb/index.d.ts +2 -0
  59. package/dist/web/breadcrumb/index.js +2 -0
  60. package/dist/web/breadcrumb/manifest.json +225 -0
  61. package/dist/web/button/AI_GUIDE.md +121 -0
  62. package/dist/web/button/button.css +1 -0
  63. package/dist/web/button/button.svelte +154 -0
  64. package/dist/web/button/button.svelte.d.ts +159 -0
  65. package/dist/web/button/index.d.ts +2 -0
  66. package/dist/web/button/index.js +2 -0
  67. package/dist/web/button/manifest.json +177 -0
  68. package/dist/web/calendar/AI_GUIDE.md +151 -0
  69. package/dist/web/calendar/calendar.css +1 -0
  70. package/dist/web/calendar/calendar.svelte +1091 -0
  71. package/dist/web/calendar/calendar.svelte.d.ts +268 -0
  72. package/dist/web/calendar/index.d.ts +2 -0
  73. package/dist/web/calendar/index.js +2 -0
  74. package/dist/web/calendar/manifest.json +470 -0
  75. package/dist/web/card/AI_GUIDE.md +133 -0
  76. package/dist/web/card/card.css +1 -0
  77. package/dist/web/card/card.svelte +217 -0
  78. package/dist/web/card/card.svelte.d.ts +242 -0
  79. package/dist/web/card/index.d.ts +2 -0
  80. package/dist/web/card/index.js +2 -0
  81. package/dist/web/card/manifest.json +357 -0
  82. package/dist/web/checkbox/AI_GUIDE.md +146 -0
  83. package/dist/web/checkbox/checkbox.css +1 -0
  84. package/dist/web/checkbox/checkbox.svelte +131 -0
  85. package/dist/web/checkbox/checkbox.svelte.d.ts +199 -0
  86. package/dist/web/checkbox/index.d.ts +2 -0
  87. package/dist/web/checkbox/index.js +2 -0
  88. package/dist/web/checkbox/manifest.json +294 -0
  89. package/dist/web/chip/AI_GUIDE.md +186 -0
  90. package/dist/web/chip/chip.css +1 -0
  91. package/dist/web/chip/chip.svelte +113 -0
  92. package/dist/web/chip/chip.svelte.d.ts +145 -0
  93. package/dist/web/chip/index.d.ts +2 -0
  94. package/dist/web/chip/index.js +2 -0
  95. package/dist/web/chip/manifest.json +186 -0
  96. package/dist/web/dropdown/AI_GUIDE.md +167 -0
  97. package/dist/web/dropdown/dropdown.css +1 -0
  98. package/dist/web/dropdown/dropdown.svelte +844 -0
  99. package/dist/web/dropdown/dropdown.svelte.d.ts +361 -0
  100. package/dist/web/dropdown/index.d.ts +2 -0
  101. package/dist/web/dropdown/index.js +2 -0
  102. package/dist/web/dropdown/manifest.json +576 -0
  103. package/dist/web/flex/AI_GUIDE.md +113 -0
  104. package/dist/web/flex/flex-item.svelte +37 -0
  105. package/dist/web/flex/flex-item.svelte.d.ts +96 -0
  106. package/dist/web/flex/flex.css +1 -0
  107. package/dist/web/flex/flex.svelte +39 -0
  108. package/dist/web/flex/flex.svelte.d.ts +104 -0
  109. package/dist/web/flex/index.d.ts +3 -0
  110. package/dist/web/flex/index.js +3 -0
  111. package/dist/web/flex/manifest.json +162 -0
  112. package/dist/web/form/index.d.ts +1 -0
  113. package/dist/web/form/index.js +2 -0
  114. package/dist/web/grid/AI_GUIDE.md +112 -0
  115. package/dist/web/grid/grid-item.svelte +41 -0
  116. package/dist/web/grid/grid-item.svelte.d.ts +112 -0
  117. package/dist/web/grid/grid.css +1 -0
  118. package/dist/web/grid/grid.svelte +37 -0
  119. package/dist/web/grid/grid.svelte.d.ts +96 -0
  120. package/dist/web/grid/index.d.ts +3 -0
  121. package/dist/web/grid/index.js +3 -0
  122. package/dist/web/grid/manifest.json +153 -0
  123. package/dist/web/index.d.ts +58 -0
  124. package/dist/web/index.js +57 -0
  125. package/dist/web/input/AI_GUIDE.md +159 -0
  126. package/dist/web/input/index.d.ts +2 -0
  127. package/dist/web/input/index.js +2 -0
  128. package/dist/web/input/input.css +1 -0
  129. package/dist/web/input/input.svelte +283 -0
  130. package/dist/web/input/input.svelte.d.ts +283 -0
  131. package/dist/web/input/manifest.json +465 -0
  132. package/dist/web/input-number/AI_GUIDE.md +164 -0
  133. package/dist/web/input-number/index.d.ts +2 -0
  134. package/dist/web/input-number/index.js +2 -0
  135. package/dist/web/input-number/input-number.css +1 -0
  136. package/dist/web/input-number/input-number.svelte +783 -0
  137. package/dist/web/input-number/input-number.svelte.d.ts +352 -0
  138. package/dist/web/input-number/manifest.json +575 -0
  139. package/dist/web/modal/AI_GUIDE.md +171 -0
  140. package/dist/web/modal/index.d.ts +2 -0
  141. package/dist/web/modal/index.js +2 -0
  142. package/dist/web/modal/manifest.json +375 -0
  143. package/dist/web/modal/modal.css +1 -0
  144. package/dist/web/modal/modal.svelte +333 -0
  145. package/dist/web/modal/modal.svelte.d.ts +231 -0
  146. package/dist/web/pagination/AI_GUIDE.md +148 -0
  147. package/dist/web/pagination/index.d.ts +19 -0
  148. package/dist/web/pagination/index.js +19 -0
  149. package/dist/web/pagination/manifest.json +432 -0
  150. package/dist/web/pagination/pagination-content.svelte +25 -0
  151. package/dist/web/pagination/pagination-content.svelte.d.ts +36 -0
  152. package/dist/web/pagination/pagination-ellipsis.svelte +38 -0
  153. package/dist/web/pagination/pagination-ellipsis.svelte.d.ts +35 -0
  154. package/dist/web/pagination/pagination-first.svelte +105 -0
  155. package/dist/web/pagination/pagination-first.svelte.d.ts +74 -0
  156. package/dist/web/pagination/pagination-item.svelte +25 -0
  157. package/dist/web/pagination/pagination-item.svelte.d.ts +36 -0
  158. package/dist/web/pagination/pagination-last.svelte +105 -0
  159. package/dist/web/pagination/pagination-last.svelte.d.ts +74 -0
  160. package/dist/web/pagination/pagination-link.svelte +67 -0
  161. package/dist/web/pagination/pagination-link.svelte.d.ts +69 -0
  162. package/dist/web/pagination/pagination-next.svelte +99 -0
  163. package/dist/web/pagination/pagination-next.svelte.d.ts +75 -0
  164. package/dist/web/pagination/pagination-previous.svelte +99 -0
  165. package/dist/web/pagination/pagination-previous.svelte.d.ts +75 -0
  166. package/dist/web/pagination/pagination.css +1 -0
  167. package/dist/web/pagination/pagination.svelte +471 -0
  168. package/dist/web/pagination/pagination.svelte.d.ts +256 -0
  169. package/dist/web/popover/AI_GUIDE.md +163 -0
  170. package/dist/web/popover/index.d.ts +3 -0
  171. package/dist/web/popover/index.js +3 -0
  172. package/dist/web/popover/manifest.json +396 -0
  173. package/dist/web/popover/popover.css +1 -0
  174. package/dist/web/popover/popover.svelte +497 -0
  175. package/dist/web/popover/popover.svelte.d.ts +116 -0
  176. package/dist/web/radio/AI_GUIDE.md +155 -0
  177. package/dist/web/radio/index.d.ts +2 -0
  178. package/dist/web/radio/index.js +2 -0
  179. package/dist/web/radio/manifest.json +294 -0
  180. package/dist/web/radio/radio.css +1 -0
  181. package/dist/web/radio/radio.svelte +123 -0
  182. package/dist/web/radio/radio.svelte.d.ts +192 -0
  183. package/dist/web/selectbox/AI_GUIDE.md +216 -0
  184. package/dist/web/selectbox/index.d.ts +2 -0
  185. package/dist/web/selectbox/index.js +2 -0
  186. package/dist/web/selectbox/manifest.json +477 -0
  187. package/dist/web/selectbox/selectbox.css +1 -0
  188. package/dist/web/selectbox/selectbox.svelte +704 -0
  189. package/dist/web/selectbox/selectbox.svelte.d.ts +296 -0
  190. package/dist/web/sonner/AI_GUIDE.md +98 -0
  191. package/dist/web/sonner/index.d.ts +46 -0
  192. package/dist/web/sonner/index.js +64 -0
  193. package/dist/web/sonner/manifest.json +132 -0
  194. package/dist/web/sonner/sonner.css +1 -0
  195. package/dist/web/sonner/sonner.svelte +85 -0
  196. package/dist/web/sonner/sonner.svelte.d.ts +105 -0
  197. package/dist/web/table/AI_GUIDE.md +145 -0
  198. package/dist/web/table/index.d.ts +21 -0
  199. package/dist/web/table/index.js +22 -0
  200. package/dist/web/table/manifest.json +168 -0
  201. package/dist/web/table/table-body.svelte +23 -0
  202. package/dist/web/table/table-body.svelte.d.ts +36 -0
  203. package/dist/web/table/table-caption.svelte +23 -0
  204. package/dist/web/table/table-caption.svelte.d.ts +36 -0
  205. package/dist/web/table/table-cell.svelte +35 -0
  206. package/dist/web/table/table-cell.svelte.d.ts +57 -0
  207. package/dist/web/table/table-empty.svelte +56 -0
  208. package/dist/web/table/table-empty.svelte.d.ts +65 -0
  209. package/dist/web/table/table-footer.svelte +23 -0
  210. package/dist/web/table/table-footer.svelte.d.ts +36 -0
  211. package/dist/web/table/table-head.svelte +39 -0
  212. package/dist/web/table/table-head.svelte.d.ts +58 -0
  213. package/dist/web/table/table-header.svelte +23 -0
  214. package/dist/web/table/table-header.svelte.d.ts +36 -0
  215. package/dist/web/table/table-row.svelte +33 -0
  216. package/dist/web/table/table-row.svelte.d.ts +52 -0
  217. package/dist/web/table/table.css +1 -0
  218. package/dist/web/table/table.svelte +178 -0
  219. package/dist/web/table/table.svelte.d.ts +120 -0
  220. package/dist/web/tabs/AI_GUIDE.md +150 -0
  221. package/dist/web/tabs/index.d.ts +2 -0
  222. package/dist/web/tabs/index.js +2 -0
  223. package/dist/web/tabs/manifest.json +315 -0
  224. package/dist/web/tabs/tabs.css +1 -0
  225. package/dist/web/tabs/tabs.svelte +138 -0
  226. package/dist/web/tabs/tabs.svelte.d.ts +204 -0
  227. package/dist/web/text/AI_GUIDE.md +129 -0
  228. package/dist/web/text/index.d.ts +2 -0
  229. package/dist/web/text/index.js +2 -0
  230. package/dist/web/text/manifest.json +195 -0
  231. package/dist/web/text/text.css +1 -0
  232. package/dist/web/text/text.svelte +515 -0
  233. package/dist/web/text/text.svelte.d.ts +168 -0
  234. package/dist/web/textarea/AI_GUIDE.md +141 -0
  235. package/dist/web/textarea/index.d.ts +2 -0
  236. package/dist/web/textarea/index.js +2 -0
  237. package/dist/web/textarea/manifest.json +438 -0
  238. package/dist/web/textarea/textarea.css +1 -0
  239. package/dist/web/textarea/textarea.svelte +224 -0
  240. package/dist/web/textarea/textarea.svelte.d.ts +274 -0
  241. package/dist/web/tooltip/AI_GUIDE.md +110 -0
  242. package/dist/web/tooltip/index.d.ts +2 -0
  243. package/dist/web/tooltip/index.js +2 -0
  244. package/dist/web/tooltip/manifest.json +222 -0
  245. package/dist/web/tooltip/tooltip.css +1 -0
  246. package/dist/web/tooltip/tooltip.svelte +292 -0
  247. package/dist/web/tooltip/tooltip.svelte.d.ts +140 -0
  248. package/dist/webview/bottomsheet/AI_GUIDE.md +141 -0
  249. package/dist/webview/bottomsheet/bottomsheet.css +1 -0
  250. package/dist/webview/bottomsheet/bottomsheet.svelte +462 -0
  251. package/dist/webview/bottomsheet/bottomsheet.svelte.d.ts +200 -0
  252. package/dist/webview/bottomsheet/index.d.ts +4 -0
  253. package/dist/webview/bottomsheet/index.js +3 -0
  254. package/dist/webview/bottomsheet/manifest.json +377 -0
  255. package/dist/webview/button/AI_GUIDE.md +79 -0
  256. package/dist/webview/button/button-ios.css +1 -0
  257. package/dist/webview/button/button-ios.svelte +58 -0
  258. package/dist/webview/button/button-ios.svelte.d.ts +114 -0
  259. package/dist/webview/button/button-material.css +1 -0
  260. package/dist/webview/button/button-material.svelte +58 -0
  261. package/dist/webview/button/button-material.svelte.d.ts +114 -0
  262. package/dist/webview/button/index.d.ts +6 -0
  263. package/dist/webview/button/index.js +4 -0
  264. package/dist/webview/button/manifest.json +148 -0
  265. package/dist/webview/index.d.ts +6 -0
  266. package/dist/webview/index.js +6 -0
  267. package/llms.txt +6518 -0
  268. package/package.json +709 -4
  269. package/ttdk-manifest.json +10188 -0
  270. package/README.md +0 -3
@@ -0,0 +1,296 @@
1
+ import { SvelteComponent } from "svelte";
2
+ export type SelectboxUiProps = UiProps;
3
+ export interface SelectboxOption {
4
+ /**
5
+ * Teks label tampilan pilihan dropdown.
6
+ */
7
+ label: string;
8
+ /**
9
+ * Nilai unik (value) dari opsi pilihan.
10
+ */
11
+ value: string | number;
12
+ /**
13
+ * Status apakah opsi ini dinonaktifkan dari pemilihan.
14
+ * @default false
15
+ */
16
+ disabled?: boolean;
17
+ }
18
+ export interface SelectboxProps {
19
+ /**
20
+ * Teks label judul field yang ditampilkan di atas selectbox (14px Semibold, #141313).
21
+ */
22
+ label?: string;
23
+ /**
24
+ * Style kustom untuk elemen label judul field (UiProps).
25
+ */
26
+ labelStyle?: UiProps;
27
+ /**
28
+ * Class CSS kustom untuk elemen label judul field.
29
+ */
30
+ labelClass?: string;
31
+ /**
32
+ * Style kustom untuk elemen trigger kontrol selectbox (UiProps).
33
+ */
34
+ controlStyle?: UiProps;
35
+ /**
36
+ * Class CSS kustom untuk elemen trigger kontrol selectbox.
37
+ */
38
+ controlClass?: string;
39
+ /**
40
+ * Style kustom untuk elemen menu dropdown popover (UiProps).
41
+ */
42
+ menuStyle?: UiProps;
43
+ /**
44
+ * Class CSS kustom untuk elemen menu dropdown popover.
45
+ */
46
+ menuClass?: string;
47
+ /**
48
+ * Alias untuk menuStyle (konsistensi dengan Dropdown listStyle).
49
+ */
50
+ listStyle?: UiProps;
51
+ /**
52
+ * Class CSS kustom untuk opsi list dropdown (atau alias menuClass).
53
+ */
54
+ listClass?: string;
55
+ /**
56
+ * Style kustom untuk elemen pesan error validasi (UiProps).
57
+ */
58
+ errorMessageStyle?: UiProps;
59
+ /**
60
+ * Class CSS kustom untuk elemen pesan error validasi.
61
+ */
62
+ errorMessageClass?: string;
63
+ /**
64
+ * Style kustom untuk elemen helper text (UiProps).
65
+ */
66
+ helperTextStyle?: UiProps;
67
+ /**
68
+ * Class CSS kustom untuk elemen helper text.
69
+ */
70
+ helperTextClass?: string;
71
+ /**
72
+ * Menandai field sebagai opsi opsional dengan menambahkan teks '(Opsional)' (12px Regular, #9698A2).
73
+ * @default false
74
+ */
75
+ optional?: boolean;
76
+ /**
77
+ * Kustomisasi teks keterangan opsional.
78
+ * @default '(Opsional)'
79
+ */
80
+ optionalText?: string;
81
+ /**
82
+ * Teks petunjuk saat belum ada opsi yang dipilih.
83
+ * @default 'Pilih dropdown menu'
84
+ */
85
+ placeholder?: string;
86
+ /**
87
+ * Nilai terpilih saat ini (single string/number atau array nilai untuk mode multiple).
88
+ */
89
+ value?: any;
90
+ /**
91
+ * Nilai awal tidak terkontrol (uncontrolled initial value).
92
+ */
93
+ defaultValue?: any;
94
+ /**
95
+ * Daftar pilihan opsi dropdown. Dapat berupa array of object `{ label, value }` atau array of string.
96
+ */
97
+ options?: Array<SelectboxOption | string>;
98
+ /**
99
+ * Mode pemilihan jamak (multi-select) dengan tampilan chips/tag dan daftar checkbox.
100
+ * @default false
101
+ */
102
+ multiple?: boolean;
103
+ /**
104
+ * Mengaktifkan kotak pencarian (search input) di dalam menu dropdown.
105
+ * @default false
106
+ */
107
+ searchable?: boolean;
108
+ /**
109
+ * Placeholder pada kotak pencarian di dalam dropdown.
110
+ * @default 'Cari'
111
+ */
112
+ searchPlaceholder?: string;
113
+ /**
114
+ * Teks tombol terapkan pada footer multi-select.
115
+ * @default 'Terapkan'
116
+ */
117
+ applyText?: string;
118
+ /**
119
+ * Teks tombol reset pada footer multi-select.
120
+ * @default 'Reset'
121
+ */
122
+ resetText?: string;
123
+ /**
124
+ * Nama form field HTML.
125
+ */
126
+ name?: string;
127
+ /**
128
+ * Identifier unik elemen selectbox.
129
+ */
130
+ id?: string;
131
+ /**
132
+ * Status apakah selectbox sedang dalam kondisi error / tidak valid.
133
+ * @default false
134
+ */
135
+ error?: boolean;
136
+ /**
137
+ * Pesan teks penjelasan kesalahan validasi di bawah field.
138
+ */
139
+ errorMessage?: string;
140
+ /**
141
+ * Teks petunjuk atau keterangan bantuan di bawah field (12px Regular, #3C4245).
142
+ */
143
+ helperText?: string;
144
+ /**
145
+ * Posisi teks helper
146
+ */
147
+ helperTextPosition?: "top" | "bottom";
148
+ /**
149
+ * Skala ukuran selectbox.
150
+ * - `'sm'`: 36px
151
+ * - `'md'`: 48px (standar desain)
152
+ * - `'lg'`: 56px
153
+ * @default 'md'
154
+ */
155
+ size?: "sm" | "md" | "lg";
156
+ /**
157
+ * Bentuk sudut kelengkungan selectbox.
158
+ * - `'none'`: 0px
159
+ * - `'sm'`: 4px
160
+ * - `'md'`: 8px (standar desain)
161
+ * - `'lg'`: 12px
162
+ * - `'full'`: 9999px (kapsul)
163
+ * @default 'md'
164
+ */
165
+ rounded?: "none" | "sm" | "md" | "lg" | "full";
166
+ /**
167
+ * Menjadikan lebar field selectbox memenuhi kontainer penuh (full-width 100%).
168
+ * @default false
169
+ */
170
+ block?: boolean;
171
+ /**
172
+ * Status apakah selectbox dinonaktifkan (disabled).
173
+ * @default false
174
+ */
175
+ disabled?: boolean;
176
+ /**
177
+ * Menandai field sebagai input wajib diisi (menampilkan tanda bintang merah *).
178
+ * @default false
179
+ */
180
+ required?: boolean;
181
+ /**
182
+ * Ref instance elemen control selectbox untuk akses DOM langsung.
183
+ */
184
+ inputRef?: any;
185
+ /**
186
+ * Menampilkan tombol × untuk menghapus pilihan yang sudah dipilih.
187
+ * @default false
188
+ */
189
+ clearable?: boolean;
190
+ /**
191
+ * Menampilkan spinner loading dan menonaktifkan interaksi selectbox.
192
+ * @default false
193
+ */
194
+ loading?: boolean;
195
+ /**
196
+ * Menjadikan selectbox hanya-baca (tidak bisa dibuka/diubah).
197
+ * @default false
198
+ */
199
+ readOnly?: boolean;
200
+ /**
201
+ * Inline CSS style object native.
202
+ */
203
+ style?: any;
204
+ /**
205
+ * Kustomisasi visual granular root / form-item (UiProps).
206
+ */
207
+ ui?: UiProps;
208
+ /**
209
+ * Callback event saat nilai pilihan berubah.
210
+ */
211
+ onChange?: (value: any) => void;
212
+ /**
213
+ * Callback event saat pengguna mengetik di kolom pencarian.
214
+ */
215
+ onSearch?: (query: string) => void;
216
+ /**
217
+ * Callback event saat menu dropdown terbuka.
218
+ */
219
+ onOpen?: () => void;
220
+ /**
221
+ * Class CSS kustom.
222
+ */
223
+ className?: string;
224
+ /**
225
+ * Menonaktifkan middleware `shift` pada floating-ui sehingga posisi list popover
226
+ * tidak bergeser secara horizontal mengikuti tepi layar.
227
+ * Berguna saat ingin list tetap berada di tengah atau posisi placement yang ditentukan.
228
+ * @default false
229
+ */
230
+ disableShift?: boolean;
231
+ /**
232
+ * Callback event saat menu dropdown ditutup.
233
+ */
234
+ onClose?: () => void;
235
+ }
236
+ import { UiProps } from "../../core/types";
237
+ declare const __propDef: {
238
+ props: {
239
+ value?: SelectboxProps["value"];
240
+ defaultValue?: SelectboxProps["defaultValue"];
241
+ multiple?: SelectboxProps["multiple"];
242
+ disableShift?: SelectboxProps["disableShift"];
243
+ menuStyle?: SelectboxProps["menuStyle"];
244
+ listStyle?: SelectboxProps["listStyle"];
245
+ ui?: SelectboxProps["ui"];
246
+ disabled?: SelectboxProps["disabled"];
247
+ onOpen?: SelectboxProps["onOpen"];
248
+ searchable?: SelectboxProps["searchable"];
249
+ onClose?: SelectboxProps["onClose"];
250
+ options?: SelectboxProps["options"];
251
+ onChange?: SelectboxProps["onChange"];
252
+ onSearch?: SelectboxProps["onSearch"];
253
+ readOnly?: SelectboxProps["readOnly"];
254
+ className?: SelectboxProps["className"];
255
+ error?: SelectboxProps["error"];
256
+ errorMessage?: SelectboxProps["errorMessage"];
257
+ size?: SelectboxProps["size"];
258
+ block?: SelectboxProps["block"];
259
+ label?: SelectboxProps["label"];
260
+ labelClass?: SelectboxProps["labelClass"];
261
+ id?: SelectboxProps["id"];
262
+ labelStyle?: SelectboxProps["labelStyle"];
263
+ required?: SelectboxProps["required"];
264
+ optional?: SelectboxProps["optional"];
265
+ optionalText?: SelectboxProps["optionalText"];
266
+ helperText?: SelectboxProps["helperText"];
267
+ helperTextPosition?: SelectboxProps["helperTextPosition"];
268
+ helperTextClass?: SelectboxProps["helperTextClass"];
269
+ helperTextStyle?: SelectboxProps["helperTextStyle"];
270
+ controlClass?: SelectboxProps["controlClass"];
271
+ rounded?: SelectboxProps["rounded"];
272
+ controlStyle?: SelectboxProps["controlStyle"];
273
+ loading?: SelectboxProps["loading"];
274
+ placeholder?: SelectboxProps["placeholder"];
275
+ clearable?: SelectboxProps["clearable"];
276
+ menuClass?: SelectboxProps["menuClass"];
277
+ searchPlaceholder?: SelectboxProps["searchPlaceholder"];
278
+ listClass?: SelectboxProps["listClass"];
279
+ resetText?: SelectboxProps["resetText"];
280
+ applyText?: SelectboxProps["applyText"];
281
+ errorMessageClass?: SelectboxProps["errorMessageClass"];
282
+ errorMessageStyle?: SelectboxProps["errorMessageStyle"];
283
+ };
284
+ events: {
285
+ [evt: string]: CustomEvent<any>;
286
+ };
287
+ slots: {};
288
+ exports?: {} | undefined;
289
+ bindings?: string | undefined;
290
+ };
291
+ type SelectboxProps_ = typeof __propDef.props;
292
+ export type SelectboxEvents = typeof __propDef.events;
293
+ export type SelectboxSlots = typeof __propDef.slots;
294
+ export default class Selectbox extends SvelteComponent<SelectboxProps_, SelectboxEvents, SelectboxSlots> {
295
+ }
296
+ export {};
@@ -0,0 +1,98 @@
1
+ # <Sonner /> — TTDK Component Reference
2
+
3
+ Komponen Sonner / Toaster untuk sistem notifikasi toast mengambang yang ringkas, kaya warna, dan responsif.
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/sonner/sonner.css";`
8
+
9
+ ## 2. Subpath Component Import
10
+ ```ts
11
+ // React
12
+ import Sonner from "@ttdk-design-system/library-react/web/sonner";
13
+
14
+ // Vue 3
15
+ import Sonner from "@ttdk-design-system/library-vue/web/sonner";
16
+
17
+ // Svelte
18
+ import Sonner from "@ttdk-design-system/library-svelte/web/sonner";
19
+ ```
20
+
21
+ ## 3. Props & API Reference
22
+
23
+ | Prop | Type | Default | Description |
24
+ | :--- | :--- | :--- | :--- |
25
+ | `position?` | `'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right'` | `bottom-right` | Posisi penempatan toast pada layar. - `'top-left'`, `'top-center'`, `'top-right'` - `'bottom-left'`, `'bottom-center'`, `'bottom-right'` |
26
+ | `richColors?` | `boolean` | `true` | Menampilkan warna semantik kaya (*rich colors*) untuk jenis status (sukses hijau, error merah, info biru, warning kuning). |
27
+ | `closeButton?` | `boolean` | `true` | Menampilkan tombol silang penutup (*close button*) pada setiap kartu toast. |
28
+ | `theme?` | `'light' | 'dark' | 'system'` | `light` | Menentukan tema visual kontainer toast (`'light'`, `'dark'`, atau `'system'`). |
29
+ | `expand?` | `boolean` | `false` | Membuka semua tumpukan toast secara melebar (*expanded*) secara default saat muncul. |
30
+ | `duration?` | `number` | `4000` | Durasi tampilan toast dalam milidetik sebelum otomatis menghilang. |
31
+ | `visibleToasts?` | `number` | `3` | Jumlah maksimum kartu toast yang terlihat bertumpuk secara bersamaan di layar. |
32
+ | `gap?` | `number` | `14` | Jarak vertikal antar kartu toast dalam piksel. |
33
+ | `offset?` | `number` | `24` | Jarak offset tepi layar dalam piksel. |
34
+ | `mobileOffset?` | `number` | `16` | Jarak offset pada perangkat seluler / mobile dalam piksel. |
35
+ | `dir?` | `'ltr' | 'rtl'` | `ltr` | Arah teks layout tata letak (`'ltr'` atau `'rtl'`). |
36
+ | `className?` | `string` | `-` | Kelas CSS kustom tambahan untuk wadah toaster. |
37
+
38
+ ## 4. Usage Examples
39
+
40
+ ### React Example
41
+ ```tsx
42
+ import Sonner from "@ttdk-design-system/library-react/web/sonner";
43
+ import "@ttdk-design-system/library-react/web/sonner/sonner.css";
44
+ import toast from "sonner-js";
45
+
46
+ export function Example() {
47
+ return (
48
+ <div>
49
+ <Sonner position="bottom-right" richColors />
50
+ <button onClick={() => toast.success("Data pasien berhasil disimpan!")}>
51
+ Tampilkan Toast Sukses
52
+ </button>
53
+ </div>
54
+ );
55
+ }
56
+ ```
57
+
58
+ ### Vue 3 Example
59
+ ```vue
60
+ <script setup lang="ts">
61
+ import Sonner from "@ttdk-design-system/library-vue/web/sonner";
62
+ import "@ttdk-design-system/library-vue/web/sonner/sonner.css";
63
+ import toast from "sonner-js";
64
+
65
+ const showToast = () => {
66
+ toast.success("Data pasien berhasil disimpan!");
67
+ };
68
+ </script>
69
+
70
+ <template>
71
+ <div>
72
+ <Sonner position="bottom-right" :rich-colors="true" />
73
+ <button @click="showToast">
74
+ Tampilkan Toast Sukses
75
+ </button>
76
+ </div>
77
+ </template>
78
+ ```
79
+
80
+ ### Svelte Example
81
+ ```svelte
82
+ <script lang="ts">
83
+ import Sonner from "@ttdk-design-system/library-svelte/web/sonner";
84
+ import "@ttdk-design-system/library-svelte/web/sonner/sonner.css";
85
+ import toast from "sonner-js";
86
+
87
+ const showToast = () => {
88
+ toast.success("Data pasien berhasil disimpan!");
89
+ };
90
+ </script>
91
+
92
+ <div>
93
+ <Sonner position="bottom-right" richColors={true} />
94
+ <button on:click={showToast}>
95
+ Tampilkan Toast Sukses
96
+ </button>
97
+ </div>
98
+ ```
@@ -0,0 +1,46 @@
1
+ import SonnerComponent from './sonner.svelte';
2
+ export interface ToastAction {
3
+ label: string;
4
+ onClick: (event: MouseEvent) => void;
5
+ cancel?: boolean;
6
+ }
7
+ export interface ToastOptions {
8
+ position?: 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';
9
+ closeButton?: boolean;
10
+ richColors?: boolean;
11
+ duration?: number;
12
+ invert?: boolean;
13
+ description?: string;
14
+ action?: ToastAction;
15
+ onDismiss?: (toast?: any) => void;
16
+ onAutoClose?: (toast?: any) => void;
17
+ [key: string]: any;
18
+ }
19
+ export interface ToastPromiseOptions<T = any> {
20
+ loading?: string;
21
+ success?: string | ((data: T) => string);
22
+ error?: string | ((err: any) => string);
23
+ description?: string | ((data: any) => string);
24
+ finally?: () => void | Promise<void>;
25
+ }
26
+ export interface ToastInterface {
27
+ (message: string, options?: ToastOptions): string | number;
28
+ /**
29
+ * Compatibility property for Vue template unref / Volar __VLS_withDotValue closure.
30
+ */
31
+ readonly value: ToastInterface;
32
+ message: (message: string, options?: ToastOptions) => string | number;
33
+ success: (message: string, options?: ToastOptions) => string | number;
34
+ error: (message: string, options?: ToastOptions) => string | number;
35
+ danger: (message: string, options?: ToastOptions) => string | number;
36
+ info: (message: string, options?: ToastOptions) => string | number;
37
+ warning: (message: string, options?: ToastOptions) => string | number;
38
+ loading: (message: string, options?: ToastOptions) => string | number;
39
+ dismiss: (id?: number | string, exitTime?: number) => void;
40
+ promise: <T = any>(promise: Promise<T> | (() => Promise<T>), data?: ToastPromiseOptions<T>) => void;
41
+ config: (userConfig: any) => void;
42
+ }
43
+ export declare const toast: ToastInterface;
44
+ export { SonnerComponent as Sonner, SonnerComponent as Toaster };
45
+ export default SonnerComponent;
46
+ export type { SonnerProps, SonnerPosition, SonnerTheme } from './sonner.svelte';
@@ -0,0 +1,64 @@
1
+ import sonnerJsToast from 'sonner-js';
2
+ import SonnerComponent from './sonner.svelte';
3
+ function getRawToast() {
4
+ const t = sonnerJsToast;
5
+ if (t && typeof t.default === 'function') {
6
+ return t.default;
7
+ }
8
+ if (typeof t === 'function') {
9
+ return t;
10
+ }
11
+ return t?.default || t;
12
+ }
13
+ const toastFunction = (message, options) => {
14
+ const raw = getRawToast();
15
+ return typeof raw === 'function' ? raw(message, options) : undefined;
16
+ };
17
+ export const toast = Object.assign(toastFunction, {
18
+ message: (message, options) => {
19
+ const raw = getRawToast();
20
+ return raw?.message ? raw.message(message, options) : raw?.(message, options);
21
+ },
22
+ success: (message, options) => getRawToast()?.success?.(message, options),
23
+ error: (message, options) => getRawToast()?.error?.(message, options),
24
+ danger: (message, options) => {
25
+ const raw = getRawToast();
26
+ return (raw?.danger || raw?.error)?.(message, options);
27
+ },
28
+ info: (message, options) => getRawToast()?.info?.(message, options),
29
+ warning: (message, options) => getRawToast()?.warning?.(message, options),
30
+ loading: (message, options) => getRawToast()?.loading?.(message, options),
31
+ dismiss: (id, exitTime) => getRawToast()?.dismiss?.(id, exitTime),
32
+ promise: (promise, data) => getRawToast()?.promise?.(promise, data),
33
+ config: (userConfig) => getRawToast()?.config?.(userConfig),
34
+ });
35
+ try {
36
+ Object.defineProperty(toast, 'value', {
37
+ get() {
38
+ return toast;
39
+ },
40
+ enumerable: true,
41
+ configurable: true,
42
+ });
43
+ }
44
+ catch (_) { }
45
+ if (typeof window !== 'undefined') {
46
+ try {
47
+ const raw = getRawToast();
48
+ if (raw && typeof raw.config === 'function') {
49
+ raw.config({
50
+ toastOptions: {
51
+ position: 'bottom-right',
52
+ closeButton: true,
53
+ richColors: true,
54
+ duration: 4000,
55
+ },
56
+ });
57
+ }
58
+ }
59
+ catch (e) {
60
+ // Abaikan jika dieksekusi di lingkungan SSR / non-DOM
61
+ }
62
+ }
63
+ export { SonnerComponent as Sonner, SonnerComponent as Toaster };
64
+ export default SonnerComponent;
@@ -0,0 +1,132 @@
1
+ {
2
+ "name": "@ttdk-design-system/sonner",
3
+ "component": "Sonner",
4
+ "folder": "sonner",
5
+ "description": "Komponen Sonner / Toaster untuk sistem notifikasi toast mengambang yang ringkas, kaya warna, dan responsif.",
6
+ "stylesheets": [
7
+ {
8
+ "theme": "common",
9
+ "file": "sonner.css",
10
+ "importPath": "web/sonner/sonner.css"
11
+ }
12
+ ],
13
+ "props": {
14
+ "position": {
15
+ "name": "position",
16
+ "type": "'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right'",
17
+ "optional": true,
18
+ "default": "bottom-right",
19
+ "description": "Posisi penempatan toast pada layar. - `'top-left'`, `'top-center'`, `'top-right'` - `'bottom-left'`, `'bottom-center'`, `'bottom-right'`",
20
+ "example": null,
21
+ "param": null
22
+ },
23
+ "richColors": {
24
+ "name": "richColors",
25
+ "type": "boolean",
26
+ "optional": true,
27
+ "default": "true",
28
+ "description": "Menampilkan warna semantik kaya (*rich colors*) untuk jenis status (sukses hijau, error merah, info biru, warning kuning).",
29
+ "example": null,
30
+ "param": null
31
+ },
32
+ "closeButton": {
33
+ "name": "closeButton",
34
+ "type": "boolean",
35
+ "optional": true,
36
+ "default": "true",
37
+ "description": "Menampilkan tombol silang penutup (*close button*) pada setiap kartu toast.",
38
+ "example": null,
39
+ "param": null
40
+ },
41
+ "theme": {
42
+ "name": "theme",
43
+ "type": "'light' | 'dark' | 'system'",
44
+ "optional": true,
45
+ "default": "light",
46
+ "description": "Menentukan tema visual kontainer toast (`'light'`, `'dark'`, atau `'system'`).",
47
+ "example": null,
48
+ "param": null
49
+ },
50
+ "expand": {
51
+ "name": "expand",
52
+ "type": "boolean",
53
+ "optional": true,
54
+ "default": "false",
55
+ "description": "Membuka semua tumpukan toast secara melebar (*expanded*) secara default saat muncul.",
56
+ "example": null,
57
+ "param": null
58
+ },
59
+ "duration": {
60
+ "name": "duration",
61
+ "type": "number",
62
+ "optional": true,
63
+ "default": "4000",
64
+ "description": "Durasi tampilan toast dalam milidetik sebelum otomatis menghilang.",
65
+ "example": null,
66
+ "param": null
67
+ },
68
+ "visibleToasts": {
69
+ "name": "visibleToasts",
70
+ "type": "number",
71
+ "optional": true,
72
+ "default": "3",
73
+ "description": "Jumlah maksimum kartu toast yang terlihat bertumpuk secara bersamaan di layar.",
74
+ "example": null,
75
+ "param": null
76
+ },
77
+ "gap": {
78
+ "name": "gap",
79
+ "type": "number",
80
+ "optional": true,
81
+ "default": "14",
82
+ "description": "Jarak vertikal antar kartu toast dalam piksel.",
83
+ "example": null,
84
+ "param": null
85
+ },
86
+ "offset": {
87
+ "name": "offset",
88
+ "type": "number",
89
+ "optional": true,
90
+ "default": "24",
91
+ "description": "Jarak offset tepi layar dalam piksel.",
92
+ "example": null,
93
+ "param": null
94
+ },
95
+ "mobileOffset": {
96
+ "name": "mobileOffset",
97
+ "type": "number",
98
+ "optional": true,
99
+ "default": "16",
100
+ "description": "Jarak offset pada perangkat seluler / mobile dalam piksel.",
101
+ "example": null,
102
+ "param": null
103
+ },
104
+ "dir": {
105
+ "name": "dir",
106
+ "type": "'ltr' | 'rtl'",
107
+ "optional": true,
108
+ "default": "ltr",
109
+ "description": "Arah teks layout tata letak (`'ltr'` atau `'rtl'`).",
110
+ "example": null,
111
+ "param": null
112
+ },
113
+ "className": {
114
+ "name": "className",
115
+ "type": "string",
116
+ "optional": true,
117
+ "default": null,
118
+ "description": "Kelas CSS kustom tambahan untuk wadah toaster.",
119
+ "example": null,
120
+ "param": null
121
+ }
122
+ },
123
+ "subInterfaces": {},
124
+ "supportedFrameworks": [
125
+ "react",
126
+ "vue",
127
+ "svelte"
128
+ ],
129
+ "themes": [
130
+ "tw"
131
+ ]
132
+ }
@@ -0,0 +1 @@
1
+ [data-sonner-toasters]{font-family:var(--ttdk-font-sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}[data-sonner-toaster]{--width:360px;--border-radius:10px;--gap:12px;--offset:24px;--mobile-offset:16px;z-index:999999}[data-sonner-toaster][data-sonner-theme=light],:root:not(.dark) [data-sonner-toaster]{--normal-bg:var(--ttdk-bg-card);--normal-border:var(--ttdk-stroke-subtle);--normal-text:var(--ttdk-text-icon-primary);--normal-text2:var(--ttdk-text-icon-secondary);--normal-cancel-bg:var(--ttdk-bg-secondary-disabled);--success-bg:var(--ttdk-bg-status-success-subtle);--success-border:var(--ttdk-stroke-status-success);--success-text:var(--ttdk-text-icon-status-success);--info-bg:var(--ttdk-bg-status-info-subtle);--info-border:var(--ttdk-stroke-status-info);--info-text:var(--ttdk-text-icon-status-info);--warning-bg:var(--ttdk-bg-status-warning-subtle);--warning-border:var(--ttdk-stroke-status-warning);--warning-text:var(--ttdk-text-icon-status-warning);--error-bg:var(--ttdk-bg-status-error-subtle);--error-border:var(--ttdk-stroke-status-error);--error-text:var(--ttdk-text-icon-status-error)}[data-sonner-toaster][data-sonner-theme=dark],.dark [data-sonner-toaster]{--normal-bg:var(--ttdk-bg-card);--normal-border:var(--ttdk-stroke-subtle);--normal-text:var(--ttdk-text-icon-primary);--normal-text2:var(--ttdk-text-icon-secondary);--normal-cancel-bg:var(--ttdk-bg-secondary-disabled);--success-bg:var(--ttdk-color-green-900);--success-border:var(--ttdk-color-green-700);--success-text:var(--ttdk-color-green-300);--info-bg:var(--ttdk-color-blue-900);--info-border:var(--ttdk-color-blue-700);--info-text:var(--ttdk-color-blue-300);--warning-bg:var(--ttdk-color-orange-900);--warning-border:var(--ttdk-color-orange-700);--warning-text:var(--ttdk-color-orange-300);--error-bg:var(--ttdk-color-red-900);--error-border:var(--ttdk-color-red-700);--error-text:var(--ttdk-color-red-300)}[data-sonner-toast]{border-radius:var(--border-radius);border:1px solid var(--normal-border);background-color:var(--normal-bg);color:var(--normal-text);box-shadow:var(--ttdk-shadow-lg);gap:10px;padding:14px 16px;font-size:13px;line-height:1.4;transition:transform .3s cubic-bezier(.16,1,.3,1),opacity .3s cubic-bezier(.16,1,.3,1),height .3s}.dark [data-sonner-toast]{box-shadow:var(--ttdk-shadow-lg)}[data-sonner-toast] [data-content]{flex-direction:column;gap:3px;display:flex}[data-sonner-toast] [data-title]{color:inherit;letter-spacing:-.01em;font-size:13px;font-weight:600}[data-sonner-toast] [data-description]{color:var(--normal-text2);font-size:12px;font-weight:400;line-height:1.4}[data-sonner-toast] [data-button]{background:var(--normal-text);height:28px;color:var(--normal-bg);cursor:pointer;border:none;border-radius:6px;justify-content:center;align-items:center;padding:0 10px;font-family:inherit;font-size:12px;font-weight:600;transition:opacity .15s,transform .1s;display:inline-flex}[data-sonner-toast] [data-button]:hover{opacity:.9}[data-sonner-toast] [data-button]:active{transform:scale(.97)}[data-sonner-toast] [data-button][data-cancel]{background:var(--normal-cancel-bg);color:var(--normal-text)}[data-sonner-toast] [data-close-button=true]{background:var(--normal-bg);border:1px solid var(--normal-border);width:20px;height:20px;color:var(--normal-text2);cursor:pointer;border-radius:50%;justify-content:center;align-items:center;transition:background-color .15s,color .15s;display:flex}[data-sonner-toast] [data-close-button=true]:hover{background:var(--normal-cancel-bg);color:var(--normal-text)}[data-sonner-toast][data-rich-colors][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-sonner-toast][data-rich-colors][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-sonner-toast][data-rich-colors][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-sonner-toast][data-rich-colors][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}