@herca/rn-kit 0.1.113 → 0.1.115

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 (506) hide show
  1. package/README.md +66 -0
  2. package/lib/module/Accordion/Accordion.js +4 -1
  3. package/lib/module/Accordion/Accordion.js.map +1 -1
  4. package/lib/module/Accordion/AccordionItem.js +3 -1
  5. package/lib/module/Accordion/AccordionItem.js.map +1 -1
  6. package/lib/module/Accordion/README.md +2 -0
  7. package/lib/module/Alert/Alert.js +3 -1
  8. package/lib/module/Alert/Alert.js.map +1 -1
  9. package/lib/module/Alert/README.md +1 -0
  10. package/lib/module/Avatar/Avatar.js +3 -1
  11. package/lib/module/Avatar/Avatar.js.map +1 -1
  12. package/lib/module/Avatar/AvatarGroup.js +3 -1
  13. package/lib/module/Avatar/AvatarGroup.js.map +1 -1
  14. package/lib/module/Avatar/README_AVATAR.md +1 -0
  15. package/lib/module/Avatar/README_AVATARGROUP.md +1 -0
  16. package/lib/module/Badge/Badge.js +4 -1
  17. package/lib/module/Badge/Badge.js.map +1 -1
  18. package/lib/module/Badge/README.md +1 -0
  19. package/lib/module/BadgeIcon/BadgeIcon.js +3 -1
  20. package/lib/module/BadgeIcon/BadgeIcon.js.map +1 -1
  21. package/lib/module/BadgeIcon/README.md +1 -0
  22. package/lib/module/BottomSheet/BottomSheet.js +17 -8
  23. package/lib/module/BottomSheet/BottomSheet.js.map +1 -1
  24. package/lib/module/BottomSheet/README.md +1 -0
  25. package/lib/module/Button/Button.js +3 -1
  26. package/lib/module/Button/Button.js.map +1 -1
  27. package/lib/module/Button/README.md +1 -0
  28. package/lib/module/Button/type.js.map +1 -1
  29. package/lib/module/Calendar/Calendar.js +9 -1
  30. package/lib/module/Calendar/Calendar.js.map +1 -1
  31. package/lib/module/Calendar/README.md +2 -0
  32. package/lib/module/CheckBox/CheckBox.js +8 -3
  33. package/lib/module/CheckBox/CheckBox.js.map +1 -1
  34. package/lib/module/CheckBox/CheckBoxList.js +7 -2
  35. package/lib/module/CheckBox/CheckBoxList.js.map +1 -1
  36. package/lib/module/CheckBox/README_CHECKBOX.md +1 -0
  37. package/lib/module/CheckBox/README_CHECKBOXLIST.md +1 -0
  38. package/lib/module/Chip/Chip.js +19 -6
  39. package/lib/module/Chip/Chip.js.map +1 -1
  40. package/lib/module/Chip/ChipItem.js +3 -1
  41. package/lib/module/Chip/ChipItem.js.map +1 -1
  42. package/lib/module/Chip/README.md +26 -2
  43. package/lib/module/Chip/README_CHIP_ITEM.md +1 -0
  44. package/lib/module/CounterButton/CounterButton.js +6 -1
  45. package/lib/module/CounterButton/CounterButton.js.map +1 -1
  46. package/lib/module/CounterButton/README.md +1 -0
  47. package/lib/module/DatePicker/DatePicker.js +13 -1
  48. package/lib/module/DatePicker/DatePicker.js.map +1 -1
  49. package/lib/module/DatePicker/MonthPicker.js +35 -2
  50. package/lib/module/DatePicker/MonthPicker.js.map +1 -1
  51. package/lib/module/DatePicker/README_DATEPICKER.md +1 -0
  52. package/lib/module/DatePicker/README_MONTHPICKER.md +2 -0
  53. package/lib/module/DatePicker/README_TIMEPICKER.md +1 -0
  54. package/lib/module/DatePicker/README_YEARPICKER.md +2 -0
  55. package/lib/module/DatePicker/TimePicker.js +8 -1
  56. package/lib/module/DatePicker/TimePicker.js.map +1 -1
  57. package/lib/module/DatePicker/YearPicker.js +50 -5
  58. package/lib/module/DatePicker/YearPicker.js.map +1 -1
  59. package/lib/module/Drawing/Drawing.js +3 -1
  60. package/lib/module/Drawing/Drawing.js.map +1 -1
  61. package/lib/module/Drawing/README.md +1 -0
  62. package/lib/module/DropDown/DropDown.js +6 -1
  63. package/lib/module/DropDown/DropDown.js.map +1 -1
  64. package/lib/module/DropDown/README.md +1 -0
  65. package/lib/module/FileView/PDF_VIEW_README.md +11 -0
  66. package/lib/module/FileView/PdfView.js +5 -1
  67. package/lib/module/FileView/PdfView.js.map +1 -1
  68. package/lib/module/Icon/Icon.js +14 -2
  69. package/lib/module/Icon/Icon.js.map +1 -1
  70. package/lib/module/Icon/README.md +1 -0
  71. package/lib/module/Input/Input.js +7 -0
  72. package/lib/module/Input/Input.js.map +1 -1
  73. package/lib/module/Input/InputDate.js +35 -8
  74. package/lib/module/Input/InputDate.js.map +1 -1
  75. package/lib/module/Input/InputFile.js +28 -11
  76. package/lib/module/Input/InputFile.js.map +1 -1
  77. package/lib/module/Input/InputMonth.js +126 -1
  78. package/lib/module/Input/InputMonth.js.map +1 -1
  79. package/lib/module/Input/InputOtp.js +6 -1
  80. package/lib/module/Input/InputOtp.js.map +1 -1
  81. package/lib/module/Input/InputPassword.js +5 -1
  82. package/lib/module/Input/InputPassword.js.map +1 -1
  83. package/lib/module/Input/InputSelect.js +21 -2
  84. package/lib/module/Input/InputSelect.js.map +1 -1
  85. package/lib/module/Input/InputYear.js +103 -0
  86. package/lib/module/Input/InputYear.js.map +1 -0
  87. package/lib/module/Input/README_INPUT.md +1 -0
  88. package/lib/module/Input/README_INPUT_DATE.md +18 -0
  89. package/lib/module/Input/README_INPUT_FILE.md +1 -0
  90. package/lib/module/Input/README_INPUT_MONTH.md +132 -0
  91. package/lib/module/Input/README_INPUT_OTP.md +1 -0
  92. package/lib/module/Input/README_INPUT_SELECT.md +1 -0
  93. package/lib/module/Input/README_INPUT_YEAR.md +115 -0
  94. package/lib/module/Input/Switch.js +6 -2
  95. package/lib/module/Input/Switch.js.map +1 -1
  96. package/lib/module/Input/TextArea.js +5 -0
  97. package/lib/module/Input/TextArea.js.map +1 -1
  98. package/lib/module/Input/partials/InputFile/CardTrigger.js +3 -1
  99. package/lib/module/Input/partials/InputFile/CardTrigger.js.map +1 -1
  100. package/lib/module/Input/partials/InputFile/CardTriggerSmall.js +5 -2
  101. package/lib/module/Input/partials/InputFile/CardTriggerSmall.js.map +1 -1
  102. package/lib/module/Input/partials/InputFile/ItemPreview.js +6 -1
  103. package/lib/module/Input/partials/InputFile/ItemPreview.js.map +1 -1
  104. package/lib/module/Input/partials/PickerField.js +114 -0
  105. package/lib/module/Input/partials/PickerField.js.map +1 -0
  106. package/lib/module/Label/Label.js +3 -1
  107. package/lib/module/Label/Label.js.map +1 -1
  108. package/lib/module/Label/README.md +1 -0
  109. package/lib/module/LabelForm/LabelForm.js +3 -1
  110. package/lib/module/LabelForm/LabelForm.js.map +1 -1
  111. package/lib/module/List/List.js +3 -1
  112. package/lib/module/List/List.js.map +1 -1
  113. package/lib/module/List/ListItem.js +3 -1
  114. package/lib/module/List/ListItem.js.map +1 -1
  115. package/lib/module/List/README.md +2 -0
  116. package/lib/module/Loading/Loading.js +3 -1
  117. package/lib/module/Loading/Loading.js.map +1 -1
  118. package/lib/module/Modal/Modal.js +8 -2
  119. package/lib/module/Modal/Modal.js.map +1 -1
  120. package/lib/module/Modal/README.md +1 -0
  121. package/lib/module/Provider/RequiredUpdateAppsProvider.js +10 -1
  122. package/lib/module/Provider/RequiredUpdateAppsProvider.js.map +1 -1
  123. package/lib/module/RadioButton/README.md +1 -0
  124. package/lib/module/RadioButton/RadioButton.js +7 -2
  125. package/lib/module/RadioButton/RadioButton.js.map +1 -1
  126. package/lib/module/Select/README.md +1 -0
  127. package/lib/module/Select/README_Select.md +1 -0
  128. package/lib/module/Select/Select.js +12 -3
  129. package/lib/module/Select/Select.js.map +1 -1
  130. package/lib/module/Skeleton/README.md +1 -0
  131. package/lib/module/Skeleton/Skeleton.js +3 -1
  132. package/lib/module/Skeleton/Skeleton.js.map +1 -1
  133. package/lib/module/Spinner/Spinner.js +3 -1
  134. package/lib/module/Spinner/Spinner.js.map +1 -1
  135. package/lib/module/Step/README.md +2 -0
  136. package/lib/module/Step/Step.js +3 -1
  137. package/lib/module/Step/Step.js.map +1 -1
  138. package/lib/module/Step/StepItem.js +4 -1
  139. package/lib/module/Step/StepItem.js.map +1 -1
  140. package/lib/module/Tab/README.md +1 -0
  141. package/lib/module/Tab/Tab.js +6 -1
  142. package/lib/module/Tab/Tab.js.map +1 -1
  143. package/lib/module/TextEditor/LinkSheet.js +84 -0
  144. package/lib/module/TextEditor/LinkSheet.js.map +1 -0
  145. package/lib/module/TextEditor/README.md +52 -2
  146. package/lib/module/TextEditor/TextEditor.js +77 -458
  147. package/lib/module/TextEditor/TextEditor.js.map +1 -1
  148. package/lib/module/TextEditor/Toolbar.js +71 -0
  149. package/lib/module/TextEditor/Toolbar.js.map +1 -0
  150. package/lib/module/TextEditor/editorDocument.js +235 -0
  151. package/lib/module/TextEditor/editorDocument.js.map +1 -0
  152. package/lib/module/TextEditor/formatState.js +186 -0
  153. package/lib/module/TextEditor/formatState.js.map +1 -0
  154. package/lib/module/TextEditor/toolbarButtons.js +81 -0
  155. package/lib/module/TextEditor/toolbarButtons.js.map +1 -0
  156. package/lib/module/TextEditor/types.js +2 -0
  157. package/lib/module/Timeline/README.md +2 -0
  158. package/lib/module/Timeline/Timeline.js +3 -1
  159. package/lib/module/Timeline/Timeline.js.map +1 -1
  160. package/lib/module/Timeline/TimelineItem.js +3 -1
  161. package/lib/module/Timeline/TimelineItem.js.map +1 -1
  162. package/lib/module/Toast/README.md +16 -0
  163. package/lib/module/Toast/Toast.js +6 -1
  164. package/lib/module/Toast/Toast.js.map +1 -1
  165. package/lib/module/Typography/README.md +1 -0
  166. package/lib/module/Typography/Typography.js +3 -1
  167. package/lib/module/Typography/Typography.js.map +1 -1
  168. package/lib/module/Ui/Card.js +4 -1
  169. package/lib/module/Ui/Card.js.map +1 -1
  170. package/lib/module/Ui/Center.js +3 -1
  171. package/lib/module/Ui/Center.js.map +1 -1
  172. package/lib/module/Ui/Col.js +3 -1
  173. package/lib/module/Ui/Col.js.map +1 -1
  174. package/lib/module/Ui/Container.js +3 -1
  175. package/lib/module/Ui/Container.js.map +1 -1
  176. package/lib/module/Ui/Devider.js +4 -1
  177. package/lib/module/Ui/Devider.js.map +1 -1
  178. package/lib/module/Ui/Footer.js +4 -2
  179. package/lib/module/Ui/Footer.js.map +1 -1
  180. package/lib/module/Ui/Gap.js +3 -1
  181. package/lib/module/Ui/Gap.js.map +1 -1
  182. package/lib/module/Ui/Grid.js +3 -1
  183. package/lib/module/Ui/Grid.js.map +1 -1
  184. package/lib/module/Ui/README_CARD.md +1 -0
  185. package/lib/module/Ui/README_CONTAINER.md +1 -0
  186. package/lib/module/Ui/README_DEVIDER.md +5 -0
  187. package/lib/module/Ui/README_FOOTER.md +9 -0
  188. package/lib/module/Ui/README_VIEWINSETS.md +1 -0
  189. package/lib/module/function/README_DATE_FORMATTER.md +35 -0
  190. package/lib/module/function/dateFormatter.js +29 -0
  191. package/lib/module/function/dateFormatter.js.map +1 -1
  192. package/lib/module/helpers/getTestID.js +15 -0
  193. package/lib/module/helpers/getTestID.js.map +1 -0
  194. package/lib/module/index.js +2 -0
  195. package/lib/module/index.js.map +1 -1
  196. package/lib/typescript/src/Accordion/Accordion.d.ts +1 -1
  197. package/lib/typescript/src/Accordion/Accordion.d.ts.map +1 -1
  198. package/lib/typescript/src/Accordion/AccordionItem.d.ts +1 -1
  199. package/lib/typescript/src/Accordion/AccordionItem.d.ts.map +1 -1
  200. package/lib/typescript/src/Accordion/type.d.ts +2 -0
  201. package/lib/typescript/src/Accordion/type.d.ts.map +1 -1
  202. package/lib/typescript/src/Alert/Alert.d.ts +1 -0
  203. package/lib/typescript/src/Alert/Alert.d.ts.map +1 -1
  204. package/lib/typescript/src/Avatar/Avatar.d.ts.map +1 -1
  205. package/lib/typescript/src/Avatar/AvatarGroup.d.ts.map +1 -1
  206. package/lib/typescript/src/Avatar/type.d.ts +2 -0
  207. package/lib/typescript/src/Avatar/type.d.ts.map +1 -1
  208. package/lib/typescript/src/Badge/Badge.d.ts +1 -0
  209. package/lib/typescript/src/Badge/Badge.d.ts.map +1 -1
  210. package/lib/typescript/src/BadgeIcon/BadgeIcon.d.ts +1 -0
  211. package/lib/typescript/src/BadgeIcon/BadgeIcon.d.ts.map +1 -1
  212. package/lib/typescript/src/BottomSheet/BottomSheet.d.ts +1 -1
  213. package/lib/typescript/src/BottomSheet/BottomSheet.d.ts.map +1 -1
  214. package/lib/typescript/src/BottomSheet/type.d.ts +1 -0
  215. package/lib/typescript/src/BottomSheet/type.d.ts.map +1 -1
  216. package/lib/typescript/src/Button/Button.d.ts.map +1 -1
  217. package/lib/typescript/src/Button/type.d.ts +1 -0
  218. package/lib/typescript/src/Button/type.d.ts.map +1 -1
  219. package/lib/typescript/src/Calendar/Calendar.d.ts +1 -1
  220. package/lib/typescript/src/Calendar/Calendar.d.ts.map +1 -1
  221. package/lib/typescript/src/Calendar/CalendarPropsType.d.ts +6 -0
  222. package/lib/typescript/src/Calendar/CalendarPropsType.d.ts.map +1 -1
  223. package/lib/typescript/src/CheckBox/CheckBox.d.ts +1 -0
  224. package/lib/typescript/src/CheckBox/CheckBox.d.ts.map +1 -1
  225. package/lib/typescript/src/CheckBox/CheckBoxList.d.ts +1 -0
  226. package/lib/typescript/src/CheckBox/CheckBoxList.d.ts.map +1 -1
  227. package/lib/typescript/src/Chip/Chip.d.ts.map +1 -1
  228. package/lib/typescript/src/Chip/ChipItem.d.ts +1 -1
  229. package/lib/typescript/src/Chip/ChipItem.d.ts.map +1 -1
  230. package/lib/typescript/src/Chip/type.d.ts +2 -0
  231. package/lib/typescript/src/Chip/type.d.ts.map +1 -1
  232. package/lib/typescript/src/CounterButton/CounterButton.d.ts +1 -1
  233. package/lib/typescript/src/CounterButton/CounterButton.d.ts.map +1 -1
  234. package/lib/typescript/src/CounterButton/type.d.ts +1 -0
  235. package/lib/typescript/src/CounterButton/type.d.ts.map +1 -1
  236. package/lib/typescript/src/DatePicker/DatePicker.d.ts +2 -1
  237. package/lib/typescript/src/DatePicker/DatePicker.d.ts.map +1 -1
  238. package/lib/typescript/src/DatePicker/MonthPicker.d.ts +11 -1
  239. package/lib/typescript/src/DatePicker/MonthPicker.d.ts.map +1 -1
  240. package/lib/typescript/src/DatePicker/TimePicker.d.ts +2 -1
  241. package/lib/typescript/src/DatePicker/TimePicker.d.ts.map +1 -1
  242. package/lib/typescript/src/DatePicker/YearPicker.d.ts +14 -1
  243. package/lib/typescript/src/DatePicker/YearPicker.d.ts.map +1 -1
  244. package/lib/typescript/src/Drawing/Drawing.d.ts +2 -1
  245. package/lib/typescript/src/Drawing/Drawing.d.ts.map +1 -1
  246. package/lib/typescript/src/DropDown/DropDown.d.ts +1 -1
  247. package/lib/typescript/src/DropDown/DropDown.d.ts.map +1 -1
  248. package/lib/typescript/src/DropDown/type.d.ts +1 -0
  249. package/lib/typescript/src/DropDown/type.d.ts.map +1 -1
  250. package/lib/typescript/src/FileView/PdfView.d.ts +2 -1
  251. package/lib/typescript/src/FileView/PdfView.d.ts.map +1 -1
  252. package/lib/typescript/src/Icon/Icon.d.ts.map +1 -1
  253. package/lib/typescript/src/Icon/type.d.ts +1 -0
  254. package/lib/typescript/src/Icon/type.d.ts.map +1 -1
  255. package/lib/typescript/src/Input/Input.d.ts.map +1 -1
  256. package/lib/typescript/src/Input/InputDate.d.ts +6 -2
  257. package/lib/typescript/src/Input/InputDate.d.ts.map +1 -1
  258. package/lib/typescript/src/Input/InputFile.d.ts +1 -1
  259. package/lib/typescript/src/Input/InputFile.d.ts.map +1 -1
  260. package/lib/typescript/src/Input/InputMonth.d.ts +29 -1
  261. package/lib/typescript/src/Input/InputMonth.d.ts.map +1 -1
  262. package/lib/typescript/src/Input/InputOtp.d.ts +1 -0
  263. package/lib/typescript/src/Input/InputOtp.d.ts.map +1 -1
  264. package/lib/typescript/src/Input/InputPassword.d.ts +2 -1
  265. package/lib/typescript/src/Input/InputPassword.d.ts.map +1 -1
  266. package/lib/typescript/src/Input/InputSelect.d.ts +4 -2
  267. package/lib/typescript/src/Input/InputSelect.d.ts.map +1 -1
  268. package/lib/typescript/src/Input/InputYear.d.ts +34 -0
  269. package/lib/typescript/src/Input/InputYear.d.ts.map +1 -0
  270. package/lib/typescript/src/Input/Switch.d.ts +2 -1
  271. package/lib/typescript/src/Input/Switch.d.ts.map +1 -1
  272. package/lib/typescript/src/Input/TextArea.d.ts +1 -1
  273. package/lib/typescript/src/Input/TextArea.d.ts.map +1 -1
  274. package/lib/typescript/src/Input/partials/InputFile/CardTrigger.d.ts +2 -1
  275. package/lib/typescript/src/Input/partials/InputFile/CardTrigger.d.ts.map +1 -1
  276. package/lib/typescript/src/Input/partials/InputFile/CardTriggerSmall.d.ts +2 -1
  277. package/lib/typescript/src/Input/partials/InputFile/CardTriggerSmall.d.ts.map +1 -1
  278. package/lib/typescript/src/Input/partials/InputFile/ItemPreview.d.ts +2 -1
  279. package/lib/typescript/src/Input/partials/InputFile/ItemPreview.d.ts.map +1 -1
  280. package/lib/typescript/src/Input/partials/PickerField.d.ts +25 -0
  281. package/lib/typescript/src/Input/partials/PickerField.d.ts.map +1 -0
  282. package/lib/typescript/src/Input/type.d.ts +13 -0
  283. package/lib/typescript/src/Input/type.d.ts.map +1 -1
  284. package/lib/typescript/src/Label/Label.d.ts +2 -1
  285. package/lib/typescript/src/Label/Label.d.ts.map +1 -1
  286. package/lib/typescript/src/LabelForm/LabelForm.d.ts +2 -1
  287. package/lib/typescript/src/LabelForm/LabelForm.d.ts.map +1 -1
  288. package/lib/typescript/src/List/List.d.ts +1 -1
  289. package/lib/typescript/src/List/List.d.ts.map +1 -1
  290. package/lib/typescript/src/List/ListItem.d.ts +1 -1
  291. package/lib/typescript/src/List/ListItem.d.ts.map +1 -1
  292. package/lib/typescript/src/List/type.d.ts +2 -0
  293. package/lib/typescript/src/List/type.d.ts.map +1 -1
  294. package/lib/typescript/src/Loading/Loading.d.ts +1 -0
  295. package/lib/typescript/src/Loading/Loading.d.ts.map +1 -1
  296. package/lib/typescript/src/Modal/Modal.d.ts +1 -0
  297. package/lib/typescript/src/Modal/Modal.d.ts.map +1 -1
  298. package/lib/typescript/src/Provider/RequiredUpdateAppsProvider.d.ts.map +1 -1
  299. package/lib/typescript/src/RadioButton/RadioButton.d.ts +1 -0
  300. package/lib/typescript/src/RadioButton/RadioButton.d.ts.map +1 -1
  301. package/lib/typescript/src/Select/Select.d.ts +1 -1
  302. package/lib/typescript/src/Select/Select.d.ts.map +1 -1
  303. package/lib/typescript/src/Select/type.d.ts +1 -0
  304. package/lib/typescript/src/Select/type.d.ts.map +1 -1
  305. package/lib/typescript/src/Skeleton/Skeleton.d.ts.map +1 -1
  306. package/lib/typescript/src/Skeleton/type.d.ts +1 -0
  307. package/lib/typescript/src/Skeleton/type.d.ts.map +1 -1
  308. package/lib/typescript/src/Spinner/Spinner.d.ts +7 -4
  309. package/lib/typescript/src/Spinner/Spinner.d.ts.map +1 -1
  310. package/lib/typescript/src/Step/Step.d.ts +1 -1
  311. package/lib/typescript/src/Step/Step.d.ts.map +1 -1
  312. package/lib/typescript/src/Step/StepItem.d.ts +1 -1
  313. package/lib/typescript/src/Step/StepItem.d.ts.map +1 -1
  314. package/lib/typescript/src/Step/type.d.ts +2 -0
  315. package/lib/typescript/src/Step/type.d.ts.map +1 -1
  316. package/lib/typescript/src/Tab/Tab.d.ts.map +1 -1
  317. package/lib/typescript/src/Tab/type.d.ts +1 -0
  318. package/lib/typescript/src/Tab/type.d.ts.map +1 -1
  319. package/lib/typescript/src/TextEditor/LinkSheet.d.ts +26 -0
  320. package/lib/typescript/src/TextEditor/LinkSheet.d.ts.map +1 -0
  321. package/lib/typescript/src/TextEditor/TextEditor.d.ts +2 -19
  322. package/lib/typescript/src/TextEditor/TextEditor.d.ts.map +1 -1
  323. package/lib/typescript/src/TextEditor/Toolbar.d.ts +16 -0
  324. package/lib/typescript/src/TextEditor/Toolbar.d.ts.map +1 -0
  325. package/lib/typescript/src/TextEditor/editorDocument.d.ts +20 -0
  326. package/lib/typescript/src/TextEditor/editorDocument.d.ts.map +1 -0
  327. package/lib/typescript/src/TextEditor/formatState.d.ts +34 -0
  328. package/lib/typescript/src/TextEditor/formatState.d.ts.map +1 -0
  329. package/lib/typescript/src/TextEditor/toolbarButtons.d.ts +5 -0
  330. package/lib/typescript/src/TextEditor/toolbarButtons.d.ts.map +1 -0
  331. package/lib/typescript/src/TextEditor/types.d.ts +42 -0
  332. package/lib/typescript/src/TextEditor/types.d.ts.map +1 -1
  333. package/lib/typescript/src/Timeline/Timeline.d.ts +2 -1
  334. package/lib/typescript/src/Timeline/Timeline.d.ts.map +1 -1
  335. package/lib/typescript/src/Timeline/TimelineItem.d.ts +2 -1
  336. package/lib/typescript/src/Timeline/TimelineItem.d.ts.map +1 -1
  337. package/lib/typescript/src/Toast/Toast.d.ts +2 -1
  338. package/lib/typescript/src/Toast/Toast.d.ts.map +1 -1
  339. package/lib/typescript/src/Typography/Typography.d.ts.map +1 -1
  340. package/lib/typescript/src/Typography/type.d.ts +1 -0
  341. package/lib/typescript/src/Typography/type.d.ts.map +1 -1
  342. package/lib/typescript/src/Ui/Card.d.ts +2 -1
  343. package/lib/typescript/src/Ui/Card.d.ts.map +1 -1
  344. package/lib/typescript/src/Ui/Center.d.ts +2 -1
  345. package/lib/typescript/src/Ui/Center.d.ts.map +1 -1
  346. package/lib/typescript/src/Ui/Col.d.ts +1 -0
  347. package/lib/typescript/src/Ui/Col.d.ts.map +1 -1
  348. package/lib/typescript/src/Ui/Container.d.ts +2 -1
  349. package/lib/typescript/src/Ui/Container.d.ts.map +1 -1
  350. package/lib/typescript/src/Ui/Devider.d.ts +3 -1
  351. package/lib/typescript/src/Ui/Devider.d.ts.map +1 -1
  352. package/lib/typescript/src/Ui/Footer.d.ts +1 -0
  353. package/lib/typescript/src/Ui/Footer.d.ts.map +1 -1
  354. package/lib/typescript/src/Ui/Gap.d.ts +2 -1
  355. package/lib/typescript/src/Ui/Gap.d.ts.map +1 -1
  356. package/lib/typescript/src/Ui/Grid.d.ts +1 -0
  357. package/lib/typescript/src/Ui/Grid.d.ts.map +1 -1
  358. package/lib/typescript/src/function/dateFormatter.d.ts +11 -0
  359. package/lib/typescript/src/function/dateFormatter.d.ts.map +1 -1
  360. package/lib/typescript/src/helpers/getTestID.d.ts +10 -0
  361. package/lib/typescript/src/helpers/getTestID.d.ts.map +1 -0
  362. package/lib/typescript/src/index.d.ts +6 -0
  363. package/lib/typescript/src/index.d.ts.map +1 -1
  364. package/package.json +16 -3
  365. package/src/Accordion/Accordion.tsx +6 -1
  366. package/src/Accordion/AccordionItem.tsx +2 -1
  367. package/src/Accordion/README.md +2 -0
  368. package/src/Accordion/type.tsx +2 -0
  369. package/src/Alert/Alert.tsx +3 -0
  370. package/src/Alert/README.md +1 -0
  371. package/src/Avatar/Avatar.tsx +2 -0
  372. package/src/Avatar/AvatarGroup.tsx +2 -1
  373. package/src/Avatar/README_AVATAR.md +1 -0
  374. package/src/Avatar/README_AVATARGROUP.md +1 -0
  375. package/src/Avatar/type.tsx +2 -0
  376. package/src/Badge/Badge.tsx +4 -0
  377. package/src/Badge/README.md +1 -0
  378. package/src/BadgeIcon/BadgeIcon.tsx +3 -0
  379. package/src/BadgeIcon/README.md +1 -0
  380. package/src/BottomSheet/BottomSheet.tsx +20 -13
  381. package/src/BottomSheet/README.md +1 -0
  382. package/src/BottomSheet/type.tsx +1 -0
  383. package/src/Button/Button.tsx +2 -0
  384. package/src/Button/README.md +1 -0
  385. package/src/Button/type.tsx +1 -0
  386. package/src/Calendar/Calendar.tsx +8 -1
  387. package/src/Calendar/CalendarPropsType.tsx +6 -0
  388. package/src/Calendar/README.md +2 -0
  389. package/src/CheckBox/CheckBox.tsx +13 -2
  390. package/src/CheckBox/CheckBoxList.tsx +7 -1
  391. package/src/CheckBox/README_CHECKBOX.md +1 -0
  392. package/src/CheckBox/README_CHECKBOXLIST.md +1 -0
  393. package/src/Chip/Chip.tsx +18 -5
  394. package/src/Chip/ChipItem.tsx +2 -0
  395. package/src/Chip/README.md +26 -2
  396. package/src/Chip/README_CHIP_ITEM.md +1 -0
  397. package/src/Chip/type.tsx +2 -0
  398. package/src/CounterButton/CounterButton.tsx +5 -0
  399. package/src/CounterButton/README.md +1 -0
  400. package/src/CounterButton/type.tsx +1 -0
  401. package/src/DatePicker/DatePicker.tsx +21 -5
  402. package/src/DatePicker/MonthPicker.tsx +40 -1
  403. package/src/DatePicker/README_DATEPICKER.md +1 -0
  404. package/src/DatePicker/README_MONTHPICKER.md +2 -0
  405. package/src/DatePicker/README_TIMEPICKER.md +1 -0
  406. package/src/DatePicker/README_YEARPICKER.md +2 -0
  407. package/src/DatePicker/TimePicker.tsx +8 -0
  408. package/src/DatePicker/YearPicker.tsx +59 -4
  409. package/src/Drawing/Drawing.tsx +3 -1
  410. package/src/Drawing/README.md +1 -0
  411. package/src/DropDown/DropDown.tsx +12 -1
  412. package/src/DropDown/README.md +1 -0
  413. package/src/DropDown/type.tsx +1 -0
  414. package/src/FileView/PDF_VIEW_README.md +11 -0
  415. package/src/FileView/PdfView.tsx +4 -3
  416. package/src/Icon/Icon.tsx +10 -2
  417. package/src/Icon/README.md +1 -0
  418. package/src/Icon/type.tsx +1 -0
  419. package/src/Input/Input.tsx +17 -2
  420. package/src/Input/InputDate.tsx +40 -15
  421. package/src/Input/InputFile.tsx +27 -14
  422. package/src/Input/InputMonth.tsx +170 -1
  423. package/src/Input/InputOtp.tsx +12 -2
  424. package/src/Input/InputPassword.tsx +6 -1
  425. package/src/Input/InputSelect.tsx +30 -13
  426. package/src/Input/InputYear.tsx +134 -0
  427. package/src/Input/README_INPUT.md +1 -0
  428. package/src/Input/README_INPUT_DATE.md +18 -0
  429. package/src/Input/README_INPUT_FILE.md +1 -0
  430. package/src/Input/README_INPUT_MONTH.md +132 -0
  431. package/src/Input/README_INPUT_OTP.md +1 -0
  432. package/src/Input/README_INPUT_SELECT.md +1 -0
  433. package/src/Input/README_INPUT_YEAR.md +115 -0
  434. package/src/Input/Switch.tsx +7 -1
  435. package/src/Input/TextArea.tsx +15 -2
  436. package/src/Input/partials/InputFile/CardTrigger.tsx +3 -0
  437. package/src/Input/partials/InputFile/CardTriggerSmall.tsx +4 -1
  438. package/src/Input/partials/InputFile/ItemPreview.tsx +12 -2
  439. package/src/Input/partials/PickerField.tsx +125 -0
  440. package/src/Input/type.tsx +14 -0
  441. package/src/Label/Label.tsx +3 -0
  442. package/src/Label/README.md +1 -0
  443. package/src/LabelForm/LabelForm.tsx +3 -1
  444. package/src/List/List.tsx +2 -2
  445. package/src/List/ListItem.tsx +2 -0
  446. package/src/List/README.md +2 -0
  447. package/src/List/type.tsx +2 -0
  448. package/src/Loading/Loading.tsx +3 -1
  449. package/src/Modal/Modal.tsx +15 -3
  450. package/src/Modal/README.md +1 -0
  451. package/src/Provider/RequiredUpdateAppsProvider.tsx +10 -1
  452. package/src/RadioButton/README.md +1 -0
  453. package/src/RadioButton/RadioButton.tsx +12 -2
  454. package/src/Select/README.md +1 -0
  455. package/src/Select/README_Select.md +1 -0
  456. package/src/Select/Select.tsx +13 -3
  457. package/src/Select/type.tsx +1 -0
  458. package/src/Skeleton/README.md +1 -0
  459. package/src/Skeleton/Skeleton.tsx +2 -0
  460. package/src/Skeleton/type.ts +1 -0
  461. package/src/Spinner/Spinner.tsx +15 -2
  462. package/src/Step/README.md +2 -0
  463. package/src/Step/Step.tsx +2 -2
  464. package/src/Step/StepItem.tsx +7 -2
  465. package/src/Step/type.tsx +2 -0
  466. package/src/Tab/README.md +1 -0
  467. package/src/Tab/Tab.tsx +12 -2
  468. package/src/Tab/type.tsx +1 -0
  469. package/src/TextEditor/LinkSheet.tsx +100 -0
  470. package/src/TextEditor/README.md +52 -2
  471. package/src/TextEditor/TextEditor.tsx +92 -500
  472. package/src/TextEditor/Toolbar.tsx +104 -0
  473. package/src/TextEditor/editorDocument.ts +246 -0
  474. package/src/TextEditor/formatState.ts +186 -0
  475. package/src/TextEditor/toolbarButtons.ts +41 -0
  476. package/src/TextEditor/types.tsx +63 -0
  477. package/src/Timeline/README.md +2 -0
  478. package/src/Timeline/Timeline.tsx +7 -2
  479. package/src/Timeline/TimelineItem.tsx +3 -1
  480. package/src/Toast/README.md +16 -0
  481. package/src/Toast/Toast.tsx +13 -2
  482. package/src/Typography/README.md +1 -0
  483. package/src/Typography/Typography.tsx +6 -1
  484. package/src/Typography/type.tsx +1 -0
  485. package/src/Ui/Card.tsx +4 -0
  486. package/src/Ui/Center.tsx +7 -2
  487. package/src/Ui/Col.tsx +7 -2
  488. package/src/Ui/Container.tsx +7 -2
  489. package/src/Ui/Devider.tsx +2 -2
  490. package/src/Ui/Footer.tsx +6 -3
  491. package/src/Ui/Gap.tsx +8 -2
  492. package/src/Ui/Grid.tsx +3 -2
  493. package/src/Ui/README_CARD.md +1 -0
  494. package/src/Ui/README_CONTAINER.md +1 -0
  495. package/src/Ui/README_DEVIDER.md +5 -0
  496. package/src/Ui/README_FOOTER.md +9 -0
  497. package/src/Ui/README_VIEWINSETS.md +1 -0
  498. package/src/function/README_DATE_FORMATTER.md +35 -0
  499. package/src/function/dateFormatter.ts +40 -0
  500. package/src/helpers/getTestID.ts +15 -0
  501. package/src/index.tsx +6 -0
  502. package/lib/module/Button/tests/Button.test.js +0 -70
  503. package/lib/module/Button/tests/Button.test.js.map +0 -1
  504. package/lib/typescript/src/Button/tests/Button.test.d.ts +0 -2
  505. package/lib/typescript/src/Button/tests/Button.test.d.ts.map +0 -1
  506. package/src/Button/tests/Button.test.tsx +0 -49
@@ -0,0 +1,125 @@
1
+ import { Pressable, StyleSheet, TouchableOpacity, View } from 'react-native';
2
+ import Color from '../../Color/Color';
3
+ import Icon from '../../Icon/Icon';
4
+ import Typography from '../../Typography/Typography';
5
+ import { getTestID } from '../../helpers/getTestID';
6
+ import { layouting } from '../../styles/layouting';
7
+ import { spacing } from '../../styles/spacing';
8
+
9
+ interface PickerFieldProps {
10
+ /** Omitted entirely when absent -- no empty element is left behind. */
11
+ label?: string;
12
+ placeholder: string;
13
+ placeholderEnd?: string;
14
+ mode?: 'single' | 'range';
15
+ /** Already formatted for display; the field does no formatting itself. */
16
+ display?: string | null;
17
+ displayEnd?: string | null;
18
+ hasClear?: boolean;
19
+ onPress: () => void;
20
+ onClear?: () => void;
21
+ testID?: string;
22
+ }
23
+
24
+ /**
25
+ * The read-only trigger a picker-backed field sits behind: a label, one or two
26
+ * pressable slots, and an optional clear button.
27
+ *
28
+ * Shared by InputMonth and InputYear so the two cannot drift apart visually,
29
+ * and so neither has to restate InputDate's markup. It holds no state and does
30
+ * no formatting -- callers pass strings that are ready to show.
31
+ */
32
+ export default function PickerField({
33
+ label,
34
+ placeholder,
35
+ placeholderEnd,
36
+ mode = 'single',
37
+ display,
38
+ displayEnd,
39
+ hasClear,
40
+ onPress,
41
+ onClear,
42
+ testID,
43
+ }: PickerFieldProps) {
44
+ return (
45
+ <View style={styles.gap4}>
46
+ {label ? (
47
+ <Typography
48
+ testID={getTestID(testID, 'label')}
49
+ variant="t2"
50
+ weight="semibold"
51
+ color={Color.gray[900]}
52
+ >
53
+ {label}
54
+ </Typography>
55
+ ) : null}
56
+
57
+ <View style={styles.wrapper}>
58
+ <Pressable
59
+ testID={getTestID(testID, 'trigger')}
60
+ style={[styles.pickerTrigger, !!display && styles.hasValue]}
61
+ onPress={onPress}
62
+ >
63
+ <Typography variant="t2" color={Color.gray[900]} weight="medium">
64
+ {display || placeholder}
65
+ </Typography>
66
+ <View style={[layouting.flex.rowCenter, spacing.gap[8]]}>
67
+ {hasClear && !!display && (
68
+ <TouchableOpacity
69
+ testID={getTestID(testID, 'clear')}
70
+ style={styles.clear}
71
+ onPress={onClear}
72
+ >
73
+ <Icon name="times-new" size={14} color="white" />
74
+ </TouchableOpacity>
75
+ )}
76
+ <Icon name="ArrowDown" size={14} color={Color.gray[700]} />
77
+ </View>
78
+ </Pressable>
79
+
80
+ {mode === 'range' && (
81
+ <Pressable
82
+ testID={getTestID(testID, 'trigger-end')}
83
+ style={[styles.pickerTrigger, !!displayEnd && styles.hasValue]}
84
+ onPress={onPress}
85
+ >
86
+ <Typography variant="t2" color={Color.gray[900]} weight="medium">
87
+ {displayEnd || placeholderEnd}
88
+ </Typography>
89
+ <Icon name="ArrowDown" size={14} color={Color.gray[700]} />
90
+ </Pressable>
91
+ )}
92
+ </View>
93
+ </View>
94
+ );
95
+ }
96
+
97
+ const styles = StyleSheet.create({
98
+ gap4: {
99
+ gap: 4,
100
+ },
101
+ pickerTrigger: {
102
+ paddingVertical: 10,
103
+ paddingHorizontal: 12,
104
+ borderRadius: 8,
105
+ flexDirection: 'row',
106
+ justifyContent: 'space-between',
107
+ alignItems: 'center',
108
+ borderWidth: 1,
109
+ borderColor: Color.gray[200],
110
+ flex: 1,
111
+ },
112
+ hasValue: {
113
+ borderColor: Color.primary[300],
114
+ },
115
+ wrapper: {
116
+ flexDirection: 'row',
117
+ gap: 8,
118
+ alignItems: 'center',
119
+ },
120
+ clear: {
121
+ backgroundColor: Color.gray[600],
122
+ borderRadius: 999,
123
+ padding: 3,
124
+ },
125
+ });
@@ -90,6 +90,7 @@ export type FileItem = (PickedFile | ImageAsset) & FileItemExtras;
90
90
  export type DocumentType = (typeof types)[keyof typeof types];
91
91
 
92
92
  export interface BaseInputFileProps {
93
+ testID?: string;
93
94
  title?: string;
94
95
  accept?: string[] | DocumentType[];
95
96
  multiple?: boolean;
@@ -126,3 +127,16 @@ export type SmallVariantProps = BaseInputFileProps & {
126
127
  };
127
128
 
128
129
  export type InputFileProps = DefaultVariantProps | SmallVariantProps;
130
+
131
+ /**
132
+ * What a picker-backed field reports back.
133
+ *
134
+ * `value` carries a single selection; `startValue`/`endValue` carry a range.
135
+ * Only one pair is ever populated, decided by the field's `mode`. Shared by
136
+ * InputMonth and InputYear so both read the same on the consumer side.
137
+ */
138
+ export interface PickerFieldValue {
139
+ value: number | null;
140
+ startValue: number | null;
141
+ endValue: number | null;
142
+ }
@@ -12,6 +12,7 @@ interface LabelProps {
12
12
  color?: string;
13
13
  icon?: IconNameProps;
14
14
  size?: 'medium' | 'small';
15
+ testID?: string;
15
16
  }
16
17
 
17
18
  type LabelColor = ColorVariantType;
@@ -73,6 +74,7 @@ export default function Label({
73
74
  icon,
74
75
  children,
75
76
  color = 'default',
77
+ testID,
76
78
  }: LabelProps) {
77
79
  const safeColor = validColors.includes(color as LabelColor)
78
80
  ? (color as LabelColor)
@@ -81,6 +83,7 @@ export default function Label({
81
83
 
82
84
  return (
83
85
  <View
86
+ testID={testID}
84
87
  style={[styles.container, { backgroundColor: colors.backgroundColor }]}
85
88
  >
86
89
  {children ? (
@@ -11,6 +11,7 @@
11
11
  | `color` | `'default' \| 'success' \| 'danger' \| 'primary' \| 'warning' \| 'info' \| 'purple' \| 'orange'` | `'default'` | Variasi warna latar dan teks. |
12
12
  | `icon` | `IconNameProps` | `undefined` | Menampilkan ikon di sebelah kiri teks. |
13
13
  | `size` | `'small' \| 'medium'` | `'medium'` | (Belum digunakan – untuk ekspansi ukuran ke depan.) |
14
+ | `testID` | `string` | - | ID untuk automation testing (Maestro/Detox/Appium). Diterapkan langsung ke elemen akar, tanpa suffix. |
14
15
 
15
16
  ---
16
17
 
@@ -6,15 +6,17 @@ interface Props {
6
6
  title: string;
7
7
  required?: boolean;
8
8
  color?: string;
9
+ testID?: string;
9
10
  }
10
11
 
11
12
  export default function LabelForm({
12
13
  title,
13
14
  required,
14
15
  color = Color.gray[900],
16
+ testID,
15
17
  }: Props) {
16
18
  return (
17
- <View>
19
+ <View testID={testID}>
18
20
  <Typography variant="t2" weight="semibold" color={color}>
19
21
  {title}{' '}
20
22
  {required && (
package/src/List/List.tsx CHANGED
@@ -4,13 +4,13 @@ import Color from '../Color/Color';
4
4
  import Theme from '../Theme/Theme';
5
5
  import type { ListItemProps, ListProps } from './type';
6
6
 
7
- export default function List({ children, style }: ListProps) {
7
+ export default function List({ children, style, testID }: ListProps) {
8
8
  const validChildren = React.Children.toArray(children).filter((child) =>
9
9
  React.isValidElement(child)
10
10
  );
11
11
 
12
12
  return (
13
- <View style={[styles.container, style]}>
13
+ <View testID={testID} style={[styles.container, style]}>
14
14
  {React.Children.map(validChildren, (child, index) => {
15
15
  const isLast = index === validChildren.length - 1;
16
16
  return React.isValidElement<ListItemProps>(child)
@@ -8,11 +8,13 @@ export default function ListItem({
8
8
  onPress,
9
9
  style,
10
10
  isLast = false,
11
+ testID,
11
12
  }: ListItemProps) {
12
13
  const Wrapper = onPress ? TouchableOpacity : View;
13
14
 
14
15
  return (
15
16
  <Wrapper
17
+ testID={testID}
16
18
  onPress={onPress}
17
19
  style={[styles.container, !isLast && styles.withBorder, style]}
18
20
  >
@@ -38,6 +38,7 @@ export default function SettingMenu() {
38
38
  | ---------- | ----------- | ----- | ------- | ------------------------------ |
39
39
  | `children` | `ReactNode` | ✅ | — | Satu atau beberapa `ListItem`. |
40
40
  | `style` | `ViewStyle` | ❌ | — | Gaya tambahan untuk container. |
41
+ | `testID` | `string` | ❌ | — | ID untuk automation testing (Maestro/Detox/Appium). Diterapkan langsung ke elemen akar, tanpa suffix. |
41
42
 
42
43
  ### ListItem
43
44
  | Prop | Type | Wajib | Default | Deskripsi |
@@ -47,3 +48,4 @@ export default function SettingMenu() {
47
48
  | `style` | `StyleProp<ViewStyle>` | ❌ | — | Gaya tambahan untuk baris. |
48
49
  | `isLast` | `boolean` | 🚫 | — | Diisi otomatis oleh `List` untuk menghapus border bawah pada baris akhir. |
49
50
  | `index` | `number` | 🚫 | — | Tidak digunakan—disediakan untuk extensibility. |
51
+ | `testID` | `string` | ❌ | — | ID untuk automation testing (Maestro/Detox/Appium). Diterapkan langsung ke elemen akar, tanpa suffix. |
package/src/List/type.tsx CHANGED
@@ -6,9 +6,11 @@ export interface ListItemProps {
6
6
  style?: StyleProp<ViewStyle>;
7
7
  isLast?: boolean;
8
8
  index?: number;
9
+ testID?: string;
9
10
  }
10
11
 
11
12
  export interface ListProps {
12
13
  children: React.ReactNode;
13
14
  style?: ViewStyle;
15
+ testID?: string;
14
16
  }
@@ -6,6 +6,7 @@ interface LoadingProps {
6
6
  size?: 'small' | 'large' | number;
7
7
  color?: string;
8
8
  variant?: 'circle' | 'square';
9
+ testID?: string;
9
10
  }
10
11
 
11
12
  const Loading: React.FC<LoadingProps> = ({
@@ -13,9 +14,10 @@ const Loading: React.FC<LoadingProps> = ({
13
14
  size = 'large',
14
15
  color = '#007AFF',
15
16
  variant = 'circle',
17
+ testID,
16
18
  }) => {
17
19
  return (
18
- <View style={styles.wrapper}>
20
+ <View testID={testID} style={styles.wrapper}>
19
21
  <View
20
22
  style={[
21
23
  styles.container,
@@ -1,4 +1,3 @@
1
- import { Color, Icon } from '@herca/rn-kit';
2
1
  import React, { useState, useEffect, useCallback } from 'react';
3
2
  import {
4
3
  View,
@@ -11,6 +10,9 @@ import {
11
10
  Platform,
12
11
  type ViewStyle,
13
12
  } from 'react-native';
13
+ import Color from '../Color/Color';
14
+ import Icon from '../Icon/Icon';
15
+ import { getTestID } from '../helpers/getTestID';
14
16
 
15
17
  interface ModalPopUpProps {
16
18
  isOpen: boolean;
@@ -24,6 +26,7 @@ interface ModalPopUpProps {
24
26
  height?: DimensionValue;
25
27
  containerStyle?: ViewStyle;
26
28
  modalStyle?: ViewStyle;
29
+ testID?: string;
27
30
  }
28
31
 
29
32
  const ModalPopUp: React.FC<ModalPopUpProps> = ({
@@ -37,6 +40,7 @@ const ModalPopUp: React.FC<ModalPopUpProps> = ({
37
40
  width = '90%',
38
41
  containerStyle,
39
42
  modalStyle,
43
+ testID,
40
44
  }) => {
41
45
  const [isVisible, setIsVisible] = useState(isOpen ?? false);
42
46
  const scaleAnim = useState(() => new Animated.Value(0))[0];
@@ -98,15 +102,23 @@ const ModalPopUp: React.FC<ModalPopUpProps> = ({
98
102
  <View style={[styles.modalContainer, containerStyle]}>
99
103
  {backdrop && (
100
104
  <TouchableOpacity
105
+ testID={getTestID(testID, 'backdrop')}
101
106
  style={[styles.backdrop, styles.backdropTouch]}
102
107
  activeOpacity={1}
103
108
  onPress={handleBackdropPress}
104
109
  />
105
110
  )}
106
- <Animated.View style={[styles.modalContent, modalContentStyle]}>
111
+ <Animated.View
112
+ testID={testID}
113
+ style={[styles.modalContent, modalContentStyle]}
114
+ >
107
115
  {closable && (
108
116
  <View style={styles.closeButtonContainer}>
109
- <TouchableOpacity onPress={userClose} style={styles.closeButton}>
117
+ <TouchableOpacity
118
+ testID={getTestID(testID, 'close')}
119
+ onPress={userClose}
120
+ style={styles.closeButton}
121
+ >
110
122
  <View style={styles.iconButtonClose}>
111
123
  <Icon name="Times" size={13} color={Color.gray[900]} />
112
124
  </View>
@@ -37,3 +37,4 @@ export default function ExampleModal() {
37
37
  | `height` | `DimensionValue` | `undefined` | Tinggi modal (opsional, gunakan scroll jika tidak cukup). |
38
38
  | `containerStyle` | `ViewStyle` | `undefined` | Gaya tambahan untuk wrapper container (pusat layar). |
39
39
  | `modalStyle` | `ViewStyle` | `undefined` | Gaya tambahan untuk modal box. |
40
+ | `testID` | `string` | `undefined` | ID untuk automation testing (Maestro/Detox/Appium). Diterapkan pada elemen konten modal (tanpa suffix); menurunkan `-backdrop` dan `-close`. |
@@ -1,6 +1,15 @@
1
1
  import { useEffect } from 'react';
2
2
  import { Image, Platform, StyleSheet, View } from 'react-native';
3
- import { Button, Card, Color, Modal, Typography } from '..';
3
+ // Imported from their own modules rather than the package barrel ('..'):
4
+ // index.tsx re-exports Provider, so going through the barrel here made
5
+ // index -> Provider -> index a cycle and dragged every native-backed export
6
+ // (document picker, blob util, pdf, webview) into anything that renders a
7
+ // Provider. Same modules, no cycle.
8
+ import Button from '../Button/Button';
9
+ import Card from '../Ui/Card';
10
+ import Color from '../Color/Color';
11
+ import Modal from '../Modal/Modal';
12
+ import Typography from '../Typography/Typography';
4
13
  import type { RequiredUpdateAppsProviderProps } from './type';
5
14
 
6
15
  export default function RequiredUpdateAppsProvider({
@@ -18,6 +18,7 @@ import RadioButton from './RadioButton';
18
18
  | `selectedValue` | `string \| null` | `null` | Nilai yang saat ini dipilih oleh pengguna. |
19
19
  | `onChange` | `(value: string) => void` | - | Fungsi callback saat item dipilih. |
20
20
  | `direction` | `'vertical' \| 'horizontal'` | `'vertical'`| Arah layout dari item radio: vertikal atau horizontal. |
21
+ | `testID` | `string` | - | ID untuk automation testing (Maestro/Detox/Appium). Menurunkan `-option-{value}` dan `-option-{value}-label` untuk tiap item. |
21
22
 
22
23
  ## 📄 Tipe `RadioButtonItem`
23
24
 
@@ -1,6 +1,8 @@
1
1
  import React, { useEffect, useState } from 'react';
2
2
  import { View, StyleSheet, Pressable } from 'react-native';
3
- import { Typography, Color } from '@herca/rn-kit';
3
+ import Typography from '../Typography/Typography';
4
+ import Color from '../Color/Color';
5
+ import { getTestID } from '../helpers/getTestID';
4
6
 
5
7
  interface RadioButtonItem {
6
8
  label: string;
@@ -13,6 +15,7 @@ interface RadioButtonProps {
13
15
  selectedValue: string | null;
14
16
  onChange?: (value: string) => void;
15
17
  direction?: 'vertical' | 'horizontal';
18
+ testID?: string;
16
19
  }
17
20
 
18
21
  const RadioButton: React.FC<RadioButtonProps> = ({
@@ -20,6 +23,7 @@ const RadioButton: React.FC<RadioButtonProps> = ({
20
23
  selectedValue,
21
24
  onChange,
22
25
  direction = 'vertical',
26
+ testID,
23
27
  }) => {
24
28
  const [internalValue, setInternalValue] = useState<string | null>(
25
29
  selectedValue
@@ -57,6 +61,7 @@ const RadioButton: React.FC<RadioButtonProps> = ({
57
61
  return (
58
62
  <View key={item.value} style={styles.item}>
59
63
  <Pressable
64
+ testID={getTestID(testID, `option-${item.value}`)}
60
65
  onPress={() => handleOnPress(item)}
61
66
  style={[styles.radioContainer, item.disabled && styles.disabled]}
62
67
  >
@@ -65,7 +70,12 @@ const RadioButton: React.FC<RadioButtonProps> = ({
65
70
  >
66
71
  {isChecked && <View style={styles.innerCircle} />}
67
72
  </View>
68
- <Typography variant="t2" weight="medium" color={Color.gray[800]}>
73
+ <Typography
74
+ testID={getTestID(testID, `option-${item.value}-label`)}
75
+ variant="t2"
76
+ weight="medium"
77
+ color={Color.gray[800]}
78
+ >
69
79
  {item.label}
70
80
  </Typography>
71
81
  </Pressable>
@@ -31,6 +31,7 @@ Komponen `Select` adalah komponen pemilihan data berbasis bottom sheet dengan du
31
31
  | `header` | ReactElement | – | Jika ingin chip mempunyai header. |
32
32
  | `footer` | ReactElement | – | Jika ingin chip mempunyai footer. |
33
33
  | `value` | ChipSelectedProps | – | Nilai pilihan yang dikontrol dari luar. Cocok untuk membuat komponen controlled. Akan mensinkronkan state internal selected dengan value setiap kali berubah. |
34
+ | `testID` | `string` | – | ID untuk automation testing (Maestro/Detox/Appium). Menurunkan `-sheet`, `-search`, `-submit`, dan `-option-{value}` (via `Chip`). |
34
35
 
35
36
  ## 📌 Contoh Penggunaan
36
37
 
@@ -34,6 +34,7 @@ Komponen `Select` adalah komponen pemilihan data berbasis bottom sheet dengan du
34
34
  | `refreshing` | `boolean` | `false` | Status untuk pull-to-refresh |
35
35
  | `onEndReached` | `() => void` | - | Dipanggil saat scroll mencapai akhir list |
36
36
  | `onSelectedChange` | `onSelectedChange?: (value: ChipOptionProps[]) => void;` | - | Dipanggil saat selected berubah |
37
+ | `testID` | `string` | – | ID untuk automation testing (Maestro/Detox/Appium). Menurunkan `-sheet`, `-search`, `-submit`, dan `-option-{value}` (via `Chip`). |
37
38
 
38
39
  ## 📌 Contoh Penggunaan
39
40
 
@@ -14,6 +14,7 @@ import Loading from '../Loading/Loading';
14
14
  import { useToast } from '../Toast/ToastContext';
15
15
  import { type SelectProps } from './type';
16
16
  import { useRef } from 'react';
17
+ import { getTestID } from '../helpers/getTestID';
17
18
  export default function Select({
18
19
  isOpen,
19
20
  data,
@@ -35,6 +36,7 @@ export default function Select({
35
36
  searchValue,
36
37
  value,
37
38
  onSelectedChange,
39
+ testID,
38
40
  }: SelectProps) {
39
41
  const [selected, setSelected] = useState<ChipSelectedProps>();
40
42
  const [searchQuery, setSearchQuery] = useState<string>(searchValue || '');
@@ -49,13 +51,17 @@ export default function Select({
49
51
  [onClose]
50
52
  );
51
53
 
52
- const handleOnPresSubmitSelect = (): boolean => {
54
+ const handleOnPresSubmitSelect = () => {
53
55
  if (required && (!selected || selected.length === 0)) {
54
56
  show('Please fill a item');
55
- return false;
57
+ return;
56
58
  }
59
+
57
60
  onSubmit?.(selected ? selected : []);
58
- return true;
61
+
62
+ // The single-select path closes itself right after onSubmit; this one used
63
+ // to just return a boolean that nothing read, so the sheet stayed open.
64
+ handleOnCloseBottom(false);
59
65
  };
60
66
 
61
67
  const searchTimeout = useRef<ReturnType<typeof setTimeout> | null>(null);
@@ -94,12 +100,14 @@ export default function Select({
94
100
  }, [searchValue]);
95
101
  return (
96
102
  <BottomSheet
103
+ testID={getTestID(testID, 'sheet')}
97
104
  onClose={(val: boolean) => handleOnCloseBottom(val)}
98
105
  isOpen={isOpen}
99
106
  height={height}
100
107
  footer={
101
108
  multiple ? (
102
109
  <Button
110
+ testID={getTestID(testID, 'submit')}
103
111
  title={submitBtnLabel ?? 'Lanjutkan'}
104
112
  color="primary"
105
113
  disabled={(!selected || selected.length === 0) && required}
@@ -115,6 +123,7 @@ export default function Select({
115
123
  accessible={false}
116
124
  >
117
125
  <Input
126
+ testID={getTestID(testID, 'search')}
118
127
  submitBehavior="submit"
119
128
  icon="Search"
120
129
  placeholder="Search"
@@ -128,6 +137,7 @@ export default function Select({
128
137
  ) : (
129
138
  <View style={styles.containerChip}>
130
139
  <Chip
140
+ testID={testID}
131
141
  options={data}
132
142
  direction="vertical"
133
143
  scrollable={true}
@@ -35,4 +35,5 @@ export interface SelectProps {
35
35
  header?: React.ComponentType<any> | React.ReactElement | null | undefined;
36
36
  searchValue?: string;
37
37
  onSelectedChange?: (value: ChipOptionProps[]) => void;
38
+ testID?: string;
38
39
  }
@@ -14,6 +14,7 @@ Komponen `Skeleton` adalah placeholder UI yang menampilkan efek shimmer animasi,
14
14
  | `backgroundColor` | `string` | `"#F0F0F0"` | Warna latar belakang dari blok skeleton. |
15
15
  | `shimmerColor` | `string` | `"rgba(255, 255, 255, 0.7)"` | Warna efek shimmer yang bergerak. |
16
16
  | `duration` | `number` | `1500` | Durasi animasi shimmer (dalam milidetik). |
17
+ | `testID` | `string` | - | ID untuk automation testing (Maestro/Detox/Appium). Diterapkan langsung ke elemen akar, tanpa suffix. |
17
18
 
18
19
  ---
19
20
 
@@ -17,6 +17,7 @@ const Skeleton: React.FC<SkeletonProps> = ({
17
17
  backgroundColor = '#F0F0F0',
18
18
  shimmerColor = 'rgba(255, 255, 255, 0.7)',
19
19
  duration = 1500,
20
+ testID,
20
21
  }) => {
21
22
  const shimmerAnimation = useRef(new Animated.Value(0)).current;
22
23
  const skeletonWidth = useRef(0);
@@ -59,6 +60,7 @@ const Skeleton: React.FC<SkeletonProps> = ({
59
60
 
60
61
  return (
61
62
  <View
63
+ testID={testID}
62
64
  onLayout={handleLayout}
63
65
  style={[
64
66
  styles.skeletonCard,
@@ -7,4 +7,5 @@ export interface SkeletonProps {
7
7
  backgroundColor?: string;
8
8
  shimmerColor?: string;
9
9
  duration?: number;
10
+ testID?: string;
10
11
  }
@@ -2,7 +2,17 @@ import { useRef, useEffect } from 'react';
2
2
  import { Animated, Easing, StyleSheet, View } from 'react-native';
3
3
  import Svg, { Defs, LinearGradient, Stop, Circle } from 'react-native-svg';
4
4
 
5
- export default function Spinner({ size = 48, color = '#FFFFFF' }) {
5
+ interface SpinnerProps {
6
+ size?: number;
7
+ color?: string;
8
+ testID?: string;
9
+ }
10
+
11
+ export default function Spinner({
12
+ size = 48,
13
+ color = '#FFFFFF',
14
+ testID,
15
+ }: SpinnerProps) {
6
16
  const rotateAnim = useRef(new Animated.Value(0)).current;
7
17
 
8
18
  useEffect(() => {
@@ -29,7 +39,10 @@ export default function Spinner({ size = 48, color = '#FFFFFF' }) {
29
39
  const darkerColor = '#999';
30
40
 
31
41
  return (
32
- <View style={[styles.container, { width: size, height: size }]}>
42
+ <View
43
+ testID={testID}
44
+ style={[styles.container, { width: size, height: size }]}
45
+ >
33
46
  <Animated.View
34
47
  style={{
35
48
  transform: [{ rotate: rotateInterpolate }],
@@ -40,6 +40,7 @@ export default function CheckoutWizard() {
40
40
  | `children` | `ReactElement<StepItemProps>` \| array | ✅ | — | Satu atau beberapa `StepItem`. |
41
41
  | `current` | `number` | ✅ | — | Indeks langkah aktif (dimulai dari `0`). |
42
42
  | `onChangeStep` | `(activeIndex: number) => void` | ✅ | — | Callback yang dipicu setiap kali nilai `current` berubah di dalam komponen. |
43
+ | `testID` | `string` | ❌ | — | ID untuk automation testing (Maestro/Detox/Appium). Diterapkan langsung ke elemen akar, tanpa suffix. |
43
44
 
44
45
 
45
46
  ### StepItem
@@ -55,6 +56,7 @@ Sebagai konten – ditampilkan bila index-nya sama dengan current.
55
56
  | `children` | `ReactNode` | ✅ | — | Konten yang muncul ketika langkah ini aktif. |
56
57
  | `color` | `'primary' \| 'success' \| 'warning' \| 'danger' \| 'purple'` | ❌ | `'primary'` | Warna lingkaran & garis pada header. |
57
58
  | `title` | `string` | ❌ | `''` | (Opsional) Judul untuk ditampilkan di header (bisa dikustom lagi). |
59
+ | `testID` | `string` | ❌ | — | ID untuk automation testing (Maestro/Detox/Appium). Diterapkan langsung ke elemen akar, tanpa suffix. |
58
60
 
59
61
  ## ⚙️ Cara Kerja
60
62
 
package/src/Step/Step.tsx CHANGED
@@ -5,7 +5,7 @@ import type { StepItemProps, StepProps } from './type';
5
5
 
6
6
  const { width: screenWidth } = Dimensions.get('window');
7
7
 
8
- const Step = ({ children, current = 0, onChangeStep }: StepProps) => {
8
+ const Step = ({ children, current = 0, onChangeStep, testID }: StepProps) => {
9
9
  const childrenArray = React.Children.toArray(children).filter(
10
10
  React.isValidElement
11
11
  ) as React.ReactElement<StepItemProps>[];
@@ -25,7 +25,7 @@ const Step = ({ children, current = 0, onChangeStep }: StepProps) => {
25
25
  }, [current, onChangeStep]);
26
26
 
27
27
  return (
28
- <View style={styles.container}>
28
+ <View testID={testID} style={styles.container}>
29
29
  <View style={[styles.headerContainer]}>
30
30
  <ScrollView
31
31
  ref={scrollRef}
@@ -18,10 +18,11 @@ const StepItem = ({
18
18
  isHeader,
19
19
  children,
20
20
  style,
21
+ testID,
21
22
  }: StepItemProps) => {
22
23
  if (isHeader) {
23
24
  return (
24
- <View style={[styles.headerItem, style]}>
25
+ <View testID={testID} style={[styles.headerItem, style]}>
25
26
  <View
26
27
  style={[
27
28
  styles.circle,
@@ -56,7 +57,11 @@ const StepItem = ({
56
57
  });
57
58
  }
58
59
 
59
- return <View style={styles.content}>{children}</View>;
60
+ return (
61
+ <View testID={testID} style={styles.content}>
62
+ {children}
63
+ </View>
64
+ );
60
65
  };
61
66
  const styles = StyleSheet.create({
62
67
  headerItem: {
package/src/Step/type.tsx CHANGED
@@ -10,9 +10,11 @@ export interface StepItemProps {
10
10
  children: React.ReactNode;
11
11
  style?: StyleProp<ViewStyle>;
12
12
  title?: string;
13
+ testID?: string;
13
14
  }
14
15
  export interface StepProps {
15
16
  children: ReactElement<StepItemProps> | ReactElement<StepItemProps>[];
16
17
  current: number;
17
18
  onChangeStep: (e: any) => void;
19
+ testID?: string;
18
20
  }
package/src/Tab/README.md CHANGED
@@ -95,6 +95,7 @@ Setiap tab dibungkus dalam `ScrollView` vertikal, sehingga bisa discroll ke bawa
95
95
  | `current?` | `number` | Indeks tab aktif (default: 0) |
96
96
  | `onChangeTab?` | `(index: number) => void` | Callback saat tab berpindah |
97
97
  | `renderHeader` | `React.ReactElement` | tambahan react element di atas tab |
98
+ | `testID` | `string` | ID untuk automation testing (Maestro/Detox/Appium). Menurunkan `-item-{index}` untuk tiap tab header dan `-panel-{index}` untuk tiap konten tab. |
98
99
 
99
100
  ### `TabItemProps`
100
101