@12-apps/ui 6.100.0 → 6.101.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 (367) hide show
  1. package/NATIVE.md +2 -1
  2. package/components-catalog.md +2 -1
  3. package/dist/_internal/components/data-display/Alert/Alert.content.js +2 -2
  4. package/dist/_internal/components/data-display/Alert/Alert.js +4 -4
  5. package/dist/_internal/components/data-display/Avatar/Avatar.js +2 -2
  6. package/dist/_internal/components/data-display/Badge/Badge.js +2 -2
  7. package/dist/_internal/components/data-display/CardKit/card-actions-context.js +5 -5
  8. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +6 -6
  9. package/dist/_internal/components/data-display/Carousel/Carousel.js +3 -3
  10. package/dist/_internal/components/data-display/Chart/Chart.js +4 -4
  11. package/dist/_internal/components/data-display/Chart/SpecChart.js +6 -6
  12. package/dist/_internal/components/data-display/Chart/chart-context.js +2 -2
  13. package/dist/_internal/components/data-display/Chart/chart-renderers.js +3 -3
  14. package/dist/_internal/components/data-display/DataGrid/DataGrid.js +3 -3
  15. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +45 -45
  16. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +60 -60
  17. package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +4 -4
  18. package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +4 -4
  19. package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +4 -4
  20. package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +4 -4
  21. package/dist/_internal/components/data-display/DataViews/base-list-card-layout.js +4 -4
  22. package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +3 -3
  23. package/dist/_internal/components/data-display/DataViews/base-list-card.js +5 -5
  24. package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +8 -8
  25. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +1 -1
  26. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +20 -20
  27. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +9 -9
  28. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +42 -42
  29. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +24 -24
  30. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +21 -21
  31. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +22 -22
  32. package/dist/_internal/components/data-display/DataViews/data-views-range-bounds.js +9 -9
  33. package/dist/_internal/components/data-display/DataViews/data-views-range-calendar.js +6 -6
  34. package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +11 -11
  35. package/dist/_internal/components/data-display/DataViews/data-views-scope-tabs.js +2 -2
  36. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +4 -4
  37. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +10 -10
  38. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +3 -3
  39. package/dist/_internal/components/data-display/DataViews/list-card-rails.js +3 -3
  40. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +2 -2
  41. package/dist/_internal/components/data-display/DayRuler/DayRuler.footer.js +3 -3
  42. package/dist/_internal/components/data-display/DayRuler/DayRuler.js +10 -10
  43. package/dist/_internal/components/data-display/DayRuler/DayRuler.keyboard.js +2 -2
  44. package/dist/_internal/components/data-display/DayRuler/DayRuler.labels.js +2 -2
  45. package/dist/_internal/components/data-display/DayRuler/DayRuler.parts.js +3 -3
  46. package/dist/_internal/components/data-display/DayRuler/useRulerDrag.js +2 -2
  47. package/dist/_internal/components/data-display/FleetMap/FleetBody.js +10 -10
  48. package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +9 -9
  49. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +12 -12
  50. package/dist/_internal/components/data-display/HoverCard/HoverCard.js +2 -2
  51. package/dist/_internal/components/data-display/Lightbox/Lightbox.js +7 -7
  52. package/dist/_internal/components/data-display/Lightbox/LightboxControls.js +2 -2
  53. package/dist/_internal/components/data-display/Lightbox/LightboxOverlay.js +3 -3
  54. package/dist/_internal/components/data-display/Lightbox/LightboxThumbnails.js +2 -2
  55. package/dist/_internal/components/data-display/MapPreview/MapLayers.js +3 -3
  56. package/dist/_internal/components/data-display/MapPreview/MapMarkers.js +2 -2
  57. package/dist/_internal/components/data-display/MapPreview/MapPreview.js +8 -8
  58. package/dist/_internal/components/data-display/Progress/Progress.js +2 -2
  59. package/dist/_internal/components/data-display/RegionMap/RegionMap.js +1 -1
  60. package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.js +8 -8
  61. package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.parts.js +3 -3
  62. package/dist/_internal/components/data-display/Sheet/Sheet.js +2 -2
  63. package/dist/_internal/components/data-display/Table/Table.js +3 -3
  64. package/dist/_internal/components/data-display/index.js +72 -72
  65. package/dist/_internal/components/feedback/Dialog/Dialog.js +3 -3
  66. package/dist/_internal/components/feedback/Modal/Modal.js +2 -2
  67. package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +5 -5
  68. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.frame.js +8 -8
  69. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.header.js +4 -4
  70. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.js +16 -16
  71. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.overview.js +6 -6
  72. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.parts.js +5 -5
  73. package/dist/_internal/components/feedback/TutorialOverlay/TutorialOverlay.js +2 -2
  74. package/dist/_internal/components/feedback/UsableModal/UsableModal.js +1 -1
  75. package/dist/_internal/components/feedback/UsableModal/UsableModal.sheet.js +2 -2
  76. package/dist/_internal/components/feedback/index.js +21 -21
  77. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.hooks.js +2 -2
  78. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +7 -7
  79. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +2 -2
  80. package/dist/_internal/components/form/Autocomplete/Autocomplete.js +1 -1
  81. package/dist/_internal/components/form/Calendar/Calendar.js +5 -5
  82. package/dist/_internal/components/form/Calendar/CalendarSelectorsMonth.js +3 -3
  83. package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +4 -4
  84. package/dist/_internal/components/form/CategorySelect/CategorySelect.js +7 -7
  85. package/dist/_internal/components/form/CodeEditor/CodeEditor.js +2 -2
  86. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +8 -8
  87. package/dist/_internal/components/form/InputOTP/InputOTP.base.js +1 -0
  88. package/dist/_internal/components/form/InputOTP/InputOTP.base.js.map +1 -0
  89. package/dist/_internal/components/form/InputOTP/InputOTP.core.js +16 -0
  90. package/dist/_internal/components/form/InputOTP/InputOTP.core.js.map +1 -0
  91. package/dist/_internal/components/form/InputOTP/InputOTP.hooks.js +2 -1
  92. package/dist/_internal/components/form/InputOTP/InputOTP.js +5 -3
  93. package/dist/_internal/components/form/InputOTP/InputOTP.metrics.js +12 -0
  94. package/dist/_internal/components/form/InputOTP/InputOTP.metrics.js.map +1 -0
  95. package/dist/_internal/components/form/InputOTP/InputOTP.styles.js +2 -1
  96. package/dist/_internal/components/form/index.js +25 -23
  97. package/dist/_internal/components/form/total-form/Fields/CategoryField.js +8 -8
  98. package/dist/_internal/components/form/total-form/Fields/index.js +9 -9
  99. package/dist/_internal/components/index.js +120 -118
  100. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +6 -6
  101. package/dist/_internal/components/navigation/SectionNav/SectionNav.bar.js +6 -6
  102. package/dist/_internal/components/navigation/SectionNav/SectionNav.js +9 -9
  103. package/dist/_internal/components/navigation/SectionNav/SectionNav.parts.js +3 -3
  104. package/dist/_internal/components/navigation/SectionNav/SectionNav.primary.js +4 -4
  105. package/dist/_internal/components/navigation/SectionNav/SectionNav.rail.js +5 -5
  106. package/dist/_internal/components/navigation/SectionNav/SectionNav.railCreate.js +4 -4
  107. package/dist/_internal/components/navigation/SectionNav/SectionNav.sheet.js +4 -4
  108. package/dist/_internal/components/navigation/index.js +15 -15
  109. package/dist/_internal/user-avatar/user-avatar.js +3 -3
  110. package/dist/charts.js +6 -6
  111. package/dist/{chunk-37MJZLQU.js → chunk-24OFA44S.js} +4 -4
  112. package/dist/{chunk-R775ISK6.js → chunk-2L6TANRY.js} +5 -5
  113. package/dist/{chunk-B4OZU7J4.js → chunk-423A7NUP.js} +7 -7
  114. package/dist/{chunk-LFECE4R7.js → chunk-4EDCF7TC.js} +2 -2
  115. package/dist/{chunk-HI7JPDD6.js → chunk-5357QUVE.js} +2 -2
  116. package/dist/{chunk-F7JRQ2EI.js → chunk-5YX2VQFP.js} +7 -7
  117. package/dist/{chunk-QZOQVJ5L.js → chunk-645GGNTW.js} +3 -3
  118. package/dist/{chunk-N5PVD4J5.js → chunk-6DO672AG.js} +7 -7
  119. package/dist/{chunk-PGJIWCQR.js → chunk-6EZQLNPK.js} +4 -4
  120. package/dist/{chunk-YQMJJ7AL.js → chunk-6G2RAZTS.js} +5 -5
  121. package/dist/{chunk-KNW63H63.js → chunk-6PQZIZMN.js} +5 -5
  122. package/dist/{chunk-FZZMNKVF.js → chunk-6TAPAIRR.js} +8 -8
  123. package/dist/{chunk-ERAMSYPR.js → chunk-7N4O632I.js} +2 -2
  124. package/dist/{chunk-XFOKLWJZ.js → chunk-7S5PXEO7.js} +2 -2
  125. package/dist/{chunk-UIJLDAV7.js → chunk-AA6YMOEK.js} +2 -2
  126. package/dist/{chunk-CRD2WCU7.js → chunk-AFWUQJ4P.js} +8 -8
  127. package/dist/{chunk-SNWCT6JN.js → chunk-AMIUZRDQ.js} +3 -3
  128. package/dist/{chunk-NQYC7V5N.js → chunk-BAYCMSMI.js} +5 -9
  129. package/dist/chunk-BAYCMSMI.js.map +1 -0
  130. package/dist/{chunk-3I7KE2N6.js → chunk-BNV7P52K.js} +2 -2
  131. package/dist/{chunk-64UNVW6D.js → chunk-BP3ZKIPE.js} +4 -4
  132. package/dist/{chunk-3V7OTBUZ.js → chunk-BQ2SFA27.js} +2 -2
  133. package/dist/{chunk-Q5SCBQLY.js → chunk-BXLC3TBQ.js} +8 -8
  134. package/dist/{chunk-Z5V5E3JW.js → chunk-COKPPU42.js} +11 -11
  135. package/dist/{chunk-QADTI63U.js → chunk-CZVAVX5L.js} +4 -4
  136. package/dist/{chunk-WDEVKND3.js → chunk-D2YJPZMU.js} +9 -9
  137. package/dist/{chunk-OA6T2ME3.js → chunk-DYHOBKPU.js} +5 -5
  138. package/dist/{chunk-6WAP7BJS.js → chunk-E6SPWZRN.js} +2 -2
  139. package/dist/{chunk-UTIYB6VE.js → chunk-E73PAU4U.js} +19 -19
  140. package/dist/{chunk-XR474YYX.js → chunk-EDVAFY76.js} +2 -2
  141. package/dist/{chunk-MEMVZW64.js → chunk-EPNZQWS4.js} +3 -3
  142. package/dist/{chunk-GZITNT7O.js → chunk-FGZIEZEP.js} +11 -11
  143. package/dist/{chunk-4X2TOMK6.js → chunk-FKUVFPQZ.js} +4 -4
  144. package/dist/{chunk-UN5WU2OX.js → chunk-GDWU7WF4.js} +4 -4
  145. package/dist/{chunk-643YFWNK.js → chunk-GPWDP5FF.js} +3 -3
  146. package/dist/{chunk-XA5ES25V.js → chunk-HKQWFICM.js} +2 -2
  147. package/dist/chunk-IH6DZXTG.js +22 -0
  148. package/dist/chunk-IH6DZXTG.js.map +1 -0
  149. package/dist/{chunk-255WTBZ5.js → chunk-IWSTMVCA.js} +4 -4
  150. package/dist/{chunk-TZC6KIK2.js → chunk-JG733RMP.js} +5 -5
  151. package/dist/{chunk-7MLT66DE.js → chunk-K33X3PDT.js} +2 -2
  152. package/dist/{chunk-K3PMMW23.js → chunk-K6VEN5VN.js} +4 -4
  153. package/dist/{chunk-HOWAMSUY.js → chunk-KAWVH3AA.js} +3 -3
  154. package/dist/{chunk-IJVBLU25.js → chunk-KJZ4PINO.js} +3 -3
  155. package/dist/{chunk-REHGWN5M.js → chunk-KXDLLS62.js} +4 -4
  156. package/dist/{chunk-YQ5GQ32T.js → chunk-KZP5YTE7.js} +2 -2
  157. package/dist/{chunk-3V3Z4EML.js → chunk-L4FWEI2P.js} +5 -5
  158. package/dist/{chunk-UKUGSU3Y.js → chunk-L4V7FZJI.js} +2 -2
  159. package/dist/{chunk-W56KN53D.js → chunk-L6IDPTNX.js} +6 -6
  160. package/dist/{chunk-24HHUCWB.js → chunk-LDCZPZPD.js} +2 -2
  161. package/dist/{chunk-KV7LTOWC.js → chunk-M225SD4H.js} +13 -13
  162. package/dist/{chunk-R6L376KR.js → chunk-M6R32IBO.js} +8 -13
  163. package/dist/chunk-M6R32IBO.js.map +1 -0
  164. package/dist/{chunk-FQMLTCXT.js → chunk-MAHY7PK3.js} +4 -4
  165. package/dist/{chunk-Z2J4MRTF.js → chunk-MKNW4FRR.js} +4 -4
  166. package/dist/{chunk-ILJ3FXIC.js → chunk-MM3QESLI.js} +2 -2
  167. package/dist/{chunk-FYJL432J.js → chunk-MQPUS773.js} +6 -6
  168. package/dist/{chunk-VRSW7PIO.js → chunk-NKBSWAP3.js} +4 -4
  169. package/dist/{chunk-ULC4SCFC.js → chunk-NLJ7LL6H.js} +4 -4
  170. package/dist/{chunk-RAQD5QCM.js → chunk-NQ6JP5CC.js} +6 -6
  171. package/dist/{chunk-IFOHCY4O.js → chunk-OF3KG5EV.js} +2 -2
  172. package/dist/{chunk-W676GY42.js → chunk-P772HCHI.js} +4 -4
  173. package/dist/{chunk-CWRQGA2T.js → chunk-POIENBXE.js} +7 -7
  174. package/dist/{chunk-FW5GTAUY.js → chunk-Q4AX4FOK.js} +11 -11
  175. package/dist/{chunk-XQAFSC66.js → chunk-Q4FNCT4C.js} +2 -2
  176. package/dist/{chunk-PIELY4BJ.js → chunk-Q5Z66LKI.js} +1 -1
  177. package/dist/{chunk-4Y3QLISA.js → chunk-Q7AONB4G.js} +4 -4
  178. package/dist/{chunk-EZBBLLEU.js → chunk-QQBYZ3B3.js} +4 -4
  179. package/dist/{chunk-FT3LJZWZ.js → chunk-RWUXMBSO.js} +4 -4
  180. package/dist/{chunk-KWBMM6MJ.js → chunk-RZKKWIGQ.js} +9 -9
  181. package/dist/{chunk-RVBLOR32.js → chunk-S7CXVIEF.js} +2 -2
  182. package/dist/{chunk-WLLUARTC.js → chunk-T2G4LDU5.js} +2 -2
  183. package/dist/{chunk-OFRQMFWD.js → chunk-T5D3DYVN.js} +2 -2
  184. package/dist/{chunk-O4UXH7BM.js → chunk-TP6KZ2YR.js} +7 -7
  185. package/dist/{chunk-HAWOS4SF.js → chunk-TPDN3B5T.js} +2 -2
  186. package/dist/{chunk-54DOLCJ3.js → chunk-TXIIJW6C.js} +5 -5
  187. package/dist/{chunk-HN36UVOE.js → chunk-U4Z6GZDW.js} +4 -4
  188. package/dist/{chunk-J2IQ6FJ5.js → chunk-UKLNLWTP.js} +3 -3
  189. package/dist/chunk-VAHJCRNW.js +17 -0
  190. package/dist/chunk-VAHJCRNW.js.map +1 -0
  191. package/dist/{chunk-MKHNLRVX.js → chunk-VPPD2AJN.js} +7 -7
  192. package/dist/{chunk-TIM4PXWN.js → chunk-VWRXSBT2.js} +2 -2
  193. package/dist/{chunk-KVP5A3YK.js → chunk-WDWZKTGA.js} +2 -2
  194. package/dist/{chunk-FYSS2PYA.js → chunk-WH5ZEBKS.js} +7 -7
  195. package/dist/{chunk-KAGXV3ID.js → chunk-WMMXOSZG.js} +7 -7
  196. package/dist/{chunk-4RSFYS2V.js → chunk-X6D5JEUV.js} +6 -6
  197. package/dist/{chunk-GFYDOH7D.js → chunk-XEPNAU3T.js} +2 -2
  198. package/dist/{chunk-VMACQT3T.js → chunk-XH7UDC5Y.js} +3 -3
  199. package/dist/{chunk-PDWQJFMK.js → chunk-XHMHHP7B.js} +10 -10
  200. package/dist/{chunk-SA3KLZDZ.js → chunk-XNAI7QGU.js} +5 -5
  201. package/dist/{chunk-7TENMQNQ.js → chunk-XZMSRHFD.js} +4 -4
  202. package/dist/{chunk-HBHBRRSW.js → chunk-YBAK2WN5.js} +7 -7
  203. package/dist/{chunk-QLKUWDMQ.js → chunk-YDJ5GAGL.js} +13 -13
  204. package/dist/{chunk-LOLYBFYY.js → chunk-ZCNR4DN5.js} +5 -5
  205. package/dist/data-display/Alert.js +4 -4
  206. package/dist/data-display/Avatar.js +2 -2
  207. package/dist/data-display/Badge.js +2 -2
  208. package/dist/data-display/CardKit.js +14 -14
  209. package/dist/data-display/Carousel.js +3 -3
  210. package/dist/data-display/Chart.js +6 -6
  211. package/dist/data-display/DataGrid.js +3 -3
  212. package/dist/data-display/DataViews.js +74 -74
  213. package/dist/data-display/DayRuler.js +12 -12
  214. package/dist/data-display/FleetMap.js +12 -12
  215. package/dist/data-display/HoverCard.js +2 -2
  216. package/dist/data-display/Lightbox.js +7 -7
  217. package/dist/data-display/MapPreview.js +8 -8
  218. package/dist/data-display/Progress.js +2 -2
  219. package/dist/data-display/RegionMap.js +4 -4
  220. package/dist/data-display/ScheduleGrid.js +10 -10
  221. package/dist/data-display/Sheet.js +2 -2
  222. package/dist/data-display/Table.js +3 -3
  223. package/dist/feedback/Dialog.js +3 -3
  224. package/dist/feedback/Modal.js +2 -2
  225. package/dist/feedback/NotificationStatusNotice.js +5 -5
  226. package/dist/feedback/SequenceResolver.js +16 -16
  227. package/dist/feedback/TutorialOverlay.js +2 -2
  228. package/dist/feedback/UsableModal.js +1 -1
  229. package/dist/form/AddressAutocomplete.js +7 -7
  230. package/dist/form/Autocomplete.js +1 -1
  231. package/dist/form/Calendar.js +5 -5
  232. package/dist/form/CategorySelect.js +7 -7
  233. package/dist/form/CodeEditor.js +2 -2
  234. package/dist/form/DateRangePicker.js +10 -10
  235. package/dist/form/InputOTP.js +5 -3
  236. package/dist/form/total-form.js +9 -9
  237. package/dist/native/form/InputOTP.js +192 -0
  238. package/dist/native/form/InputOTP.js.map +1 -0
  239. package/dist/navigation/AppHeader.js +6 -6
  240. package/dist/navigation/SectionNav.js +9 -9
  241. package/dist/types/components/form/InputOTP/InputOTP.base.d.ts +63 -0
  242. package/dist/types/components/form/InputOTP/InputOTP.base.d.ts.map +1 -0
  243. package/dist/types/components/form/InputOTP/InputOTP.core.d.ts +38 -0
  244. package/dist/types/components/form/InputOTP/InputOTP.core.d.ts.map +1 -0
  245. package/dist/types/components/form/InputOTP/InputOTP.d.ts +1 -2
  246. package/dist/types/components/form/InputOTP/InputOTP.d.ts.map +1 -1
  247. package/dist/types/components/form/InputOTP/InputOTP.hooks.d.ts.map +1 -1
  248. package/dist/types/components/form/InputOTP/InputOTP.metrics.d.ts +15 -0
  249. package/dist/types/components/form/InputOTP/InputOTP.metrics.d.ts.map +1 -0
  250. package/dist/types/components/form/InputOTP/InputOTP.styles.d.ts.map +1 -1
  251. package/dist/types/components/form/InputOTP/InputOTP.types.d.ts +3 -56
  252. package/dist/types/components/form/InputOTP/InputOTP.types.d.ts.map +1 -1
  253. package/dist/types-native/components/form/InputOTP/InputOTP.base.d.ts +63 -0
  254. package/dist/types-native/components/form/InputOTP/InputOTP.base.d.ts.map +1 -0
  255. package/dist/types-native/components/form/InputOTP/InputOTP.core.d.ts +38 -0
  256. package/dist/types-native/components/form/InputOTP/InputOTP.core.d.ts.map +1 -0
  257. package/dist/types-native/components/form/InputOTP/InputOTP.hooks.native.d.ts +28 -0
  258. package/dist/types-native/components/form/InputOTP/InputOTP.hooks.native.d.ts.map +1 -0
  259. package/dist/types-native/components/form/InputOTP/InputOTP.metrics.d.ts +15 -0
  260. package/dist/types-native/components/form/InputOTP/InputOTP.metrics.d.ts.map +1 -0
  261. package/dist/types-native/components/form/InputOTP/InputOTP.native.d.ts +14 -0
  262. package/dist/types-native/components/form/InputOTP/InputOTP.native.d.ts.map +1 -0
  263. package/dist/types-native/components/form/InputOTP/InputOTP.types.native.d.ts +14 -0
  264. package/dist/types-native/components/form/InputOTP/InputOTP.types.native.d.ts.map +1 -0
  265. package/dist/types-native/components/form/InputOTP/index.native.d.ts +3 -0
  266. package/dist/types-native/components/form/InputOTP/index.native.d.ts.map +1 -0
  267. package/dist/user-avatar.js +3 -3
  268. package/package.json +5 -1
  269. package/src/components/form/InputOTP/InputOTP.base.ts +76 -0
  270. package/src/components/form/InputOTP/InputOTP.core.ts +51 -0
  271. package/src/components/form/InputOTP/InputOTP.hooks.native.ts +84 -0
  272. package/src/components/form/InputOTP/InputOTP.hooks.ts +1 -46
  273. package/src/components/form/InputOTP/InputOTP.metrics.ts +19 -0
  274. package/src/components/form/InputOTP/InputOTP.native.tsx +154 -0
  275. package/src/components/form/InputOTP/InputOTP.styles.ts +4 -11
  276. package/src/components/form/InputOTP/InputOTP.types.native.ts +15 -0
  277. package/src/components/form/InputOTP/InputOTP.types.ts +3 -68
  278. package/src/components/form/InputOTP/NATIVE-NOTES.md +8 -0
  279. package/src/components/form/InputOTP/index.native.ts +2 -0
  280. package/dist/chunk-NQYC7V5N.js.map +0 -1
  281. package/dist/chunk-R6L376KR.js.map +0 -1
  282. /package/dist/{chunk-37MJZLQU.js.map → chunk-24OFA44S.js.map} +0 -0
  283. /package/dist/{chunk-R775ISK6.js.map → chunk-2L6TANRY.js.map} +0 -0
  284. /package/dist/{chunk-B4OZU7J4.js.map → chunk-423A7NUP.js.map} +0 -0
  285. /package/dist/{chunk-LFECE4R7.js.map → chunk-4EDCF7TC.js.map} +0 -0
  286. /package/dist/{chunk-HI7JPDD6.js.map → chunk-5357QUVE.js.map} +0 -0
  287. /package/dist/{chunk-F7JRQ2EI.js.map → chunk-5YX2VQFP.js.map} +0 -0
  288. /package/dist/{chunk-QZOQVJ5L.js.map → chunk-645GGNTW.js.map} +0 -0
  289. /package/dist/{chunk-N5PVD4J5.js.map → chunk-6DO672AG.js.map} +0 -0
  290. /package/dist/{chunk-PGJIWCQR.js.map → chunk-6EZQLNPK.js.map} +0 -0
  291. /package/dist/{chunk-YQMJJ7AL.js.map → chunk-6G2RAZTS.js.map} +0 -0
  292. /package/dist/{chunk-KNW63H63.js.map → chunk-6PQZIZMN.js.map} +0 -0
  293. /package/dist/{chunk-FZZMNKVF.js.map → chunk-6TAPAIRR.js.map} +0 -0
  294. /package/dist/{chunk-ERAMSYPR.js.map → chunk-7N4O632I.js.map} +0 -0
  295. /package/dist/{chunk-XFOKLWJZ.js.map → chunk-7S5PXEO7.js.map} +0 -0
  296. /package/dist/{chunk-UIJLDAV7.js.map → chunk-AA6YMOEK.js.map} +0 -0
  297. /package/dist/{chunk-CRD2WCU7.js.map → chunk-AFWUQJ4P.js.map} +0 -0
  298. /package/dist/{chunk-SNWCT6JN.js.map → chunk-AMIUZRDQ.js.map} +0 -0
  299. /package/dist/{chunk-3I7KE2N6.js.map → chunk-BNV7P52K.js.map} +0 -0
  300. /package/dist/{chunk-64UNVW6D.js.map → chunk-BP3ZKIPE.js.map} +0 -0
  301. /package/dist/{chunk-3V7OTBUZ.js.map → chunk-BQ2SFA27.js.map} +0 -0
  302. /package/dist/{chunk-Q5SCBQLY.js.map → chunk-BXLC3TBQ.js.map} +0 -0
  303. /package/dist/{chunk-Z5V5E3JW.js.map → chunk-COKPPU42.js.map} +0 -0
  304. /package/dist/{chunk-QADTI63U.js.map → chunk-CZVAVX5L.js.map} +0 -0
  305. /package/dist/{chunk-WDEVKND3.js.map → chunk-D2YJPZMU.js.map} +0 -0
  306. /package/dist/{chunk-OA6T2ME3.js.map → chunk-DYHOBKPU.js.map} +0 -0
  307. /package/dist/{chunk-6WAP7BJS.js.map → chunk-E6SPWZRN.js.map} +0 -0
  308. /package/dist/{chunk-UTIYB6VE.js.map → chunk-E73PAU4U.js.map} +0 -0
  309. /package/dist/{chunk-XR474YYX.js.map → chunk-EDVAFY76.js.map} +0 -0
  310. /package/dist/{chunk-MEMVZW64.js.map → chunk-EPNZQWS4.js.map} +0 -0
  311. /package/dist/{chunk-GZITNT7O.js.map → chunk-FGZIEZEP.js.map} +0 -0
  312. /package/dist/{chunk-4X2TOMK6.js.map → chunk-FKUVFPQZ.js.map} +0 -0
  313. /package/dist/{chunk-UN5WU2OX.js.map → chunk-GDWU7WF4.js.map} +0 -0
  314. /package/dist/{chunk-643YFWNK.js.map → chunk-GPWDP5FF.js.map} +0 -0
  315. /package/dist/{chunk-XA5ES25V.js.map → chunk-HKQWFICM.js.map} +0 -0
  316. /package/dist/{chunk-255WTBZ5.js.map → chunk-IWSTMVCA.js.map} +0 -0
  317. /package/dist/{chunk-TZC6KIK2.js.map → chunk-JG733RMP.js.map} +0 -0
  318. /package/dist/{chunk-7MLT66DE.js.map → chunk-K33X3PDT.js.map} +0 -0
  319. /package/dist/{chunk-K3PMMW23.js.map → chunk-K6VEN5VN.js.map} +0 -0
  320. /package/dist/{chunk-HOWAMSUY.js.map → chunk-KAWVH3AA.js.map} +0 -0
  321. /package/dist/{chunk-IJVBLU25.js.map → chunk-KJZ4PINO.js.map} +0 -0
  322. /package/dist/{chunk-REHGWN5M.js.map → chunk-KXDLLS62.js.map} +0 -0
  323. /package/dist/{chunk-YQ5GQ32T.js.map → chunk-KZP5YTE7.js.map} +0 -0
  324. /package/dist/{chunk-3V3Z4EML.js.map → chunk-L4FWEI2P.js.map} +0 -0
  325. /package/dist/{chunk-UKUGSU3Y.js.map → chunk-L4V7FZJI.js.map} +0 -0
  326. /package/dist/{chunk-W56KN53D.js.map → chunk-L6IDPTNX.js.map} +0 -0
  327. /package/dist/{chunk-24HHUCWB.js.map → chunk-LDCZPZPD.js.map} +0 -0
  328. /package/dist/{chunk-KV7LTOWC.js.map → chunk-M225SD4H.js.map} +0 -0
  329. /package/dist/{chunk-FQMLTCXT.js.map → chunk-MAHY7PK3.js.map} +0 -0
  330. /package/dist/{chunk-Z2J4MRTF.js.map → chunk-MKNW4FRR.js.map} +0 -0
  331. /package/dist/{chunk-ILJ3FXIC.js.map → chunk-MM3QESLI.js.map} +0 -0
  332. /package/dist/{chunk-FYJL432J.js.map → chunk-MQPUS773.js.map} +0 -0
  333. /package/dist/{chunk-VRSW7PIO.js.map → chunk-NKBSWAP3.js.map} +0 -0
  334. /package/dist/{chunk-ULC4SCFC.js.map → chunk-NLJ7LL6H.js.map} +0 -0
  335. /package/dist/{chunk-RAQD5QCM.js.map → chunk-NQ6JP5CC.js.map} +0 -0
  336. /package/dist/{chunk-IFOHCY4O.js.map → chunk-OF3KG5EV.js.map} +0 -0
  337. /package/dist/{chunk-W676GY42.js.map → chunk-P772HCHI.js.map} +0 -0
  338. /package/dist/{chunk-CWRQGA2T.js.map → chunk-POIENBXE.js.map} +0 -0
  339. /package/dist/{chunk-FW5GTAUY.js.map → chunk-Q4AX4FOK.js.map} +0 -0
  340. /package/dist/{chunk-XQAFSC66.js.map → chunk-Q4FNCT4C.js.map} +0 -0
  341. /package/dist/{chunk-PIELY4BJ.js.map → chunk-Q5Z66LKI.js.map} +0 -0
  342. /package/dist/{chunk-4Y3QLISA.js.map → chunk-Q7AONB4G.js.map} +0 -0
  343. /package/dist/{chunk-EZBBLLEU.js.map → chunk-QQBYZ3B3.js.map} +0 -0
  344. /package/dist/{chunk-FT3LJZWZ.js.map → chunk-RWUXMBSO.js.map} +0 -0
  345. /package/dist/{chunk-KWBMM6MJ.js.map → chunk-RZKKWIGQ.js.map} +0 -0
  346. /package/dist/{chunk-RVBLOR32.js.map → chunk-S7CXVIEF.js.map} +0 -0
  347. /package/dist/{chunk-WLLUARTC.js.map → chunk-T2G4LDU5.js.map} +0 -0
  348. /package/dist/{chunk-OFRQMFWD.js.map → chunk-T5D3DYVN.js.map} +0 -0
  349. /package/dist/{chunk-O4UXH7BM.js.map → chunk-TP6KZ2YR.js.map} +0 -0
  350. /package/dist/{chunk-HAWOS4SF.js.map → chunk-TPDN3B5T.js.map} +0 -0
  351. /package/dist/{chunk-54DOLCJ3.js.map → chunk-TXIIJW6C.js.map} +0 -0
  352. /package/dist/{chunk-HN36UVOE.js.map → chunk-U4Z6GZDW.js.map} +0 -0
  353. /package/dist/{chunk-J2IQ6FJ5.js.map → chunk-UKLNLWTP.js.map} +0 -0
  354. /package/dist/{chunk-MKHNLRVX.js.map → chunk-VPPD2AJN.js.map} +0 -0
  355. /package/dist/{chunk-TIM4PXWN.js.map → chunk-VWRXSBT2.js.map} +0 -0
  356. /package/dist/{chunk-KVP5A3YK.js.map → chunk-WDWZKTGA.js.map} +0 -0
  357. /package/dist/{chunk-FYSS2PYA.js.map → chunk-WH5ZEBKS.js.map} +0 -0
  358. /package/dist/{chunk-KAGXV3ID.js.map → chunk-WMMXOSZG.js.map} +0 -0
  359. /package/dist/{chunk-4RSFYS2V.js.map → chunk-X6D5JEUV.js.map} +0 -0
  360. /package/dist/{chunk-GFYDOH7D.js.map → chunk-XEPNAU3T.js.map} +0 -0
  361. /package/dist/{chunk-VMACQT3T.js.map → chunk-XH7UDC5Y.js.map} +0 -0
  362. /package/dist/{chunk-PDWQJFMK.js.map → chunk-XHMHHP7B.js.map} +0 -0
  363. /package/dist/{chunk-SA3KLZDZ.js.map → chunk-XNAI7QGU.js.map} +0 -0
  364. /package/dist/{chunk-7TENMQNQ.js.map → chunk-XZMSRHFD.js.map} +0 -0
  365. /package/dist/{chunk-HBHBRRSW.js.map → chunk-YBAK2WN5.js.map} +0 -0
  366. /package/dist/{chunk-QLKUWDMQ.js.map → chunk-YDJ5GAGL.js.map} +0 -0
  367. /package/dist/{chunk-LOLYBFYY.js.map → chunk-ZCNR4DN5.js.map} +0 -0
@@ -1,21 +1,21 @@
1
1
  import "../chunk-573PQ6C6.js";
2
2
  import {
3
3
  AddressAutocomplete
4
- } from "../chunk-R775ISK6.js";
4
+ } from "../chunk-2L6TANRY.js";
5
+ import "../chunk-FKUVFPQZ.js";
5
6
  import "../chunk-IU2WSJ4F.js";
6
- import "../chunk-4RSFYS2V.js";
7
- import "../chunk-4X2TOMK6.js";
7
+ import "../chunk-X6D5JEUV.js";
8
+ import "../chunk-EIOGJBJ5.js";
9
+ import "../chunk-P5JCOFK3.js";
10
+ import "../chunk-NYA26GV2.js";
11
+ import "../chunk-L7N4AFZD.js";
8
12
  import "../chunk-44FY2YZL.js";
9
13
  import "../chunk-6JKECOZ2.js";
10
14
  import "../chunk-6HLWZR3X.js";
11
15
  import "../chunk-QVYBRD6U.js";
12
16
  import "../chunk-NNKIM73H.js";
13
17
  import "../chunk-O7QPPJAK.js";
14
- import "../chunk-EIOGJBJ5.js";
15
- import "../chunk-P5JCOFK3.js";
16
- import "../chunk-NYA26GV2.js";
17
18
  import "../chunk-DDNUPFPE.js";
18
- import "../chunk-L7N4AFZD.js";
19
19
  import "../chunk-LL2BWQPM.js";
20
20
  import "../chunk-DVRNW33K.js";
21
21
  import "../chunk-RGVNXES5.js";
@@ -4,8 +4,8 @@ import {
4
4
  Autocomplete_default
5
5
  } from "../chunk-CFDWKQZT.js";
6
6
  import "../chunk-SY5FYBAF.js";
7
- import "../chunk-SAKSIN7E.js";
8
7
  import "../chunk-PELRSZFU.js";
8
+ import "../chunk-SAKSIN7E.js";
9
9
  import "../chunk-JXS56EW5.js";
10
10
  import "../chunk-RGVNXES5.js";
11
11
  import "../chunk-GDN2LUTZ.js";
@@ -1,20 +1,20 @@
1
1
  import "../chunk-BO6S47KI.js";
2
2
  import {
3
3
  Calendar
4
- } from "../chunk-YQMJJ7AL.js";
5
- import "../chunk-ZDLC4BN4.js";
4
+ } from "../chunk-6G2RAZTS.js";
6
5
  import "../chunk-ZZGG6AUD.js";
7
6
  import "../chunk-4I2SDWSF.js";
8
7
  import "../chunk-LZOCNAUA.js";
9
- import "../chunk-F7JRQ2EI.js";
10
- import "../chunk-J6LIZXSF.js";
8
+ import "../chunk-ZDLC4BN4.js";
9
+ import "../chunk-5YX2VQFP.js";
11
10
  import "../chunk-66TCKXOB.js";
12
- import "../chunk-WQEGPSGD.js";
13
11
  import "../chunk-WN6LR4HX.js";
14
12
  import "../chunk-UXYCBPCE.js";
15
13
  import "../chunk-X5GCAXZS.js";
16
14
  import "../chunk-3PWDVJWD.js";
15
+ import "../chunk-WQEGPSGD.js";
17
16
  import "../chunk-JV2JIUDT.js";
17
+ import "../chunk-J6LIZXSF.js";
18
18
  import "../chunk-QWOI5BZV.js";
19
19
  import "../chunk-LL2BWQPM.js";
20
20
  import "../chunk-VWKMN3ZZ.js";
@@ -1,19 +1,19 @@
1
1
  import "../chunk-N5ZWC6CB.js";
2
2
  import {
3
3
  CategorySelect
4
- } from "../chunk-MKHNLRVX.js";
5
- import "../chunk-FZZMNKVF.js";
6
- import "../chunk-WDSJ6SVY.js";
7
- import "../chunk-PGGYZU7Q.js";
4
+ } from "../chunk-VPPD2AJN.js";
8
5
  import "../chunk-QYY37ECA.js";
6
+ import "../chunk-6TAPAIRR.js";
9
7
  import "../chunk-5F7HYYGM.js";
10
- import "../chunk-S5VIN3EB.js";
11
8
  import "../chunk-Y46R26TE.js";
9
+ import "../chunk-WDSJ6SVY.js";
10
+ import "../chunk-GHP5JLL3.js";
11
+ import "../chunk-S5VIN3EB.js";
12
+ import "../chunk-PGGYZU7Q.js";
12
13
  import "../chunk-RZVUY2MO.js";
13
14
  import "../chunk-USJPZ5Q7.js";
14
- import "../chunk-XHHR6G35.js";
15
15
  import "../chunk-R2AZOWEZ.js";
16
- import "../chunk-GHP5JLL3.js";
16
+ import "../chunk-XHHR6G35.js";
17
17
  import "../chunk-VPGDYI63.js";
18
18
  import "../chunk-DMNZD3Q7.js";
19
19
  import {
@@ -1,13 +1,13 @@
1
1
  import "../chunk-IDMG332I.js";
2
2
  import {
3
3
  CodeEditor
4
- } from "../chunk-Z2J4MRTF.js";
4
+ } from "../chunk-MKNW4FRR.js";
5
+ import "../chunk-3TVUW7QE.js";
5
6
  import "../chunk-OXXIGHZK.js";
6
7
  import {
7
8
  configureCodeEditor
8
9
  } from "../chunk-EYDQV55H.js";
9
10
  import "../chunk-X3OWMTLO.js";
10
- import "../chunk-3TVUW7QE.js";
11
11
  import "../chunk-GDN2LUTZ.js";
12
12
  import "../chunk-7ZADLRLP.js";
13
13
  import "../chunk-3NGE6NE6.js";
@@ -1,7 +1,8 @@
1
1
  import "../chunk-BN6POCYF.js";
2
2
  import {
3
3
  DateRangePicker
4
- } from "../chunk-KNW63H63.js";
4
+ } from "../chunk-6PQZIZMN.js";
5
+ import "../chunk-EASEJDBQ.js";
5
6
  import {
6
7
  DEFAULT_QUICK_RANGES,
7
8
  DEFAULT_QUICK_RANGE_LABELS,
@@ -9,30 +10,29 @@ import {
9
10
  createQuickRanges
10
11
  } from "../chunk-R26WP22N.js";
11
12
  import "../chunk-K62L5JFC.js";
12
- import "../chunk-SIY64A6O.js";
13
- import "../chunk-QAF76E6U.js";
14
- import "../chunk-6KKQHJE7.js";
15
- import "../chunk-EASEJDBQ.js";
16
13
  import {
17
14
  resolveDayRange
18
15
  } from "../chunk-IXXB7CTR.js";
16
+ import "../chunk-SIY64A6O.js";
17
+ import "../chunk-QAF76E6U.js";
18
+ import "../chunk-6KKQHJE7.js";
19
19
  import "../chunk-VCYYL23C.js";
20
20
  import "../chunk-SUTOAW7I.js";
21
21
  import "../chunk-BO6S47KI.js";
22
- import "../chunk-YQMJJ7AL.js";
23
- import "../chunk-ZDLC4BN4.js";
22
+ import "../chunk-6G2RAZTS.js";
24
23
  import "../chunk-ZZGG6AUD.js";
25
24
  import "../chunk-4I2SDWSF.js";
26
25
  import "../chunk-LZOCNAUA.js";
27
- import "../chunk-F7JRQ2EI.js";
28
- import "../chunk-J6LIZXSF.js";
26
+ import "../chunk-ZDLC4BN4.js";
27
+ import "../chunk-5YX2VQFP.js";
29
28
  import "../chunk-66TCKXOB.js";
30
- import "../chunk-WQEGPSGD.js";
31
29
  import "../chunk-WN6LR4HX.js";
32
30
  import "../chunk-UXYCBPCE.js";
33
31
  import "../chunk-X5GCAXZS.js";
34
32
  import "../chunk-3PWDVJWD.js";
33
+ import "../chunk-WQEGPSGD.js";
35
34
  import "../chunk-JV2JIUDT.js";
35
+ import "../chunk-J6LIZXSF.js";
36
36
  import "../chunk-QWOI5BZV.js";
37
37
  import "../chunk-LL2BWQPM.js";
38
38
  import "../chunk-HDBP55R3.js";
@@ -1,9 +1,11 @@
1
1
  import "../chunk-3VMXOGGI.js";
2
2
  import {
3
3
  InputOTP
4
- } from "../chunk-QZOQVJ5L.js";
5
- import "../chunk-NQYC7V5N.js";
6
- import "../chunk-R6L376KR.js";
4
+ } from "../chunk-645GGNTW.js";
5
+ import "../chunk-BAYCMSMI.js";
6
+ import "../chunk-VAHJCRNW.js";
7
+ import "../chunk-M6R32IBO.js";
8
+ import "../chunk-IH6DZXTG.js";
7
9
  import "../chunk-HPK33ACY.js";
8
10
  import "../chunk-RGVNXES5.js";
9
11
  import "../chunk-GDN2LUTZ.js";
@@ -9,7 +9,7 @@ import {
9
9
  } from "../chunk-CPAJYJUD.js";
10
10
  import {
11
11
  Fields_exports
12
- } from "../chunk-HAWOS4SF.js";
12
+ } from "../chunk-TPDN3B5T.js";
13
13
  import "../chunk-RLTYBV4N.js";
14
14
  import {
15
15
  TextField
@@ -20,7 +20,7 @@ import {
20
20
  import "../chunk-QZRWOF4R.js";
21
21
  import {
22
22
  CategoryField
23
- } from "../chunk-ERAMSYPR.js";
23
+ } from "../chunk-7N4O632I.js";
24
24
  import {
25
25
  FormContext,
26
26
  useFormContext
@@ -42,19 +42,19 @@ import "../chunk-QYKDY4EI.js";
42
42
  import "../chunk-ZJY7OK6H.js";
43
43
  import "../chunk-ZLMKGVB2.js";
44
44
  import "../chunk-N5ZWC6CB.js";
45
- import "../chunk-MKHNLRVX.js";
46
- import "../chunk-FZZMNKVF.js";
47
- import "../chunk-WDSJ6SVY.js";
48
- import "../chunk-PGGYZU7Q.js";
45
+ import "../chunk-VPPD2AJN.js";
49
46
  import "../chunk-QYY37ECA.js";
47
+ import "../chunk-6TAPAIRR.js";
50
48
  import "../chunk-5F7HYYGM.js";
51
- import "../chunk-S5VIN3EB.js";
52
49
  import "../chunk-Y46R26TE.js";
50
+ import "../chunk-WDSJ6SVY.js";
51
+ import "../chunk-GHP5JLL3.js";
52
+ import "../chunk-S5VIN3EB.js";
53
+ import "../chunk-PGGYZU7Q.js";
53
54
  import "../chunk-RZVUY2MO.js";
54
55
  import "../chunk-USJPZ5Q7.js";
55
- import "../chunk-XHHR6G35.js";
56
56
  import "../chunk-R2AZOWEZ.js";
57
- import "../chunk-GHP5JLL3.js";
57
+ import "../chunk-XHHR6G35.js";
58
58
  import "../chunk-VPGDYI63.js";
59
59
  import "../chunk-DMNZD3Q7.js";
60
60
  import "../chunk-PN4HVM43.js";
@@ -0,0 +1,192 @@
1
+ import {
2
+ resolveFieldEdge
3
+ } from "../chunks/chunk-3JBZE4I6.js";
4
+ import {
5
+ webAria,
6
+ webDisabled
7
+ } from "../chunks/chunk-DN73KYIZ.js";
8
+ import {
9
+ useUiTheme
10
+ } from "../chunks/chunk-ZYSOBULX.js";
11
+ import {
12
+ fieldHeightPx
13
+ } from "../chunks/chunk-DNTO2D5M.js";
14
+
15
+ // src/components/form/InputOTP/InputOTP.native.tsx
16
+ import * as React from "react";
17
+ import { Platform, StyleSheet, TextInput, View } from "react-native";
18
+
19
+ // src/components/form/InputOTP/InputOTP.hooks.native.ts
20
+ import { useCallback, useEffect, useRef, useState } from "react";
21
+
22
+ // src/components/form/InputOTP/InputOTP.core.ts
23
+ var PATTERNS = {
24
+ numeric: /^\d*$/,
25
+ alphanumeric: /^[a-zA-Z0-9]*$/
26
+ };
27
+ var isAllowed = (variant, text) => (PATTERNS[variant] ?? /.*/).test(text);
28
+ var padTo = (digits, length) => Array.from({ length }, (_, i) => digits[i] ?? "");
29
+ function firstSlotFill(variant, index, inputValue, current) {
30
+ if (variant !== "numeric" || index !== 0 || inputValue.length < 2) return null;
31
+ const overtype = inputValue.length === 2 && current !== "" && inputValue.includes(current);
32
+ return overtype ? "overtype" : "code";
33
+ }
34
+ var codeOfFill = (inputValue, current, length) => inputValue.length > length && current !== "" && inputValue.startsWith(current) ? inputValue.slice(1) : inputValue;
35
+
36
+ // src/components/form/InputOTP/InputOTP.hooks.native.ts
37
+ var useNativeOtpDigits = ({ variant, length, value, onChange, onComplete }) => {
38
+ const [digits, setDigits] = useState(() => padTo([], length));
39
+ const boxRefs = useRef([]);
40
+ useEffect(() => {
41
+ setDigits(padTo(value.split("").slice(0, length), length));
42
+ }, [value, length]);
43
+ const focusBox = useCallback((index) => boxRefs.current[index]?.focus(), []);
44
+ const publish = useCallback(
45
+ (next) => {
46
+ onChange?.(next);
47
+ if (next.length === length) onComplete?.(next);
48
+ },
49
+ [length, onChange, onComplete]
50
+ );
51
+ const spread = useCallback(
52
+ (text) => {
53
+ const code = text.slice(0, length);
54
+ if (!code || !isAllowed(variant, code)) return;
55
+ setDigits(padTo(code.split(""), length));
56
+ publish(code);
57
+ focusBox(Math.min(code.length, length - 1));
58
+ },
59
+ [variant, length, publish, focusBox]
60
+ );
61
+ const handleChangeText = useCallback(
62
+ (index, text) => {
63
+ const fill = firstSlotFill(variant === "alphanumeric" ? "numeric" : variant, index, text, digits[0] ?? "");
64
+ if (fill) return fill === "code" ? spread(codeOfFill(text, digits[0] ?? "", length)) : void 0;
65
+ if (!isAllowed(variant, text)) return;
66
+ const next = [...digits];
67
+ next[index] = text.slice(-1);
68
+ setDigits(next);
69
+ publish(next.join(""));
70
+ if (text && index < length - 1) focusBox(index + 1);
71
+ },
72
+ [variant, digits, length, publish, focusBox, spread]
73
+ );
74
+ const handleKey = useCallback(
75
+ (index, key) => {
76
+ if (key === "Backspace" && !digits[index] && index > 0) focusBox(index - 1);
77
+ },
78
+ [digits, focusBox]
79
+ );
80
+ return { digits, boxRefs, handleChangeText, handleKey };
81
+ };
82
+
83
+ // src/components/form/InputOTP/InputOTP.metrics.ts
84
+ var OTP_FONT_PX = {
85
+ xs: 12,
86
+ sm: 14,
87
+ md: 16,
88
+ lg: 18,
89
+ xl: 20
90
+ };
91
+ var OTP_GAP_PX = 8;
92
+ var OTP_BORDER = { rest: 1, focused: 2 };
93
+
94
+ // src/components/form/InputOTP/InputOTP.native.tsx
95
+ import { jsx } from "react/jsx-runtime";
96
+ var PALETTE_KEYS = ["primary", "secondary", "success", "warning", "info", "danger", "neutral"];
97
+ function accentOf(theme, color) {
98
+ const key = PALETTE_KEYS.find((candidate) => candidate === color) ?? "primary";
99
+ return theme.palette[key].main;
100
+ }
101
+ function keypadProps(variant, index) {
102
+ if (variant !== "numeric") return { autoCapitalize: "none", autoCorrect: false, spellCheck: false };
103
+ const fill = index === 0 ? Platform.select({
104
+ ios: { textContentType: "oneTimeCode", autoComplete: "one-time-code" },
105
+ android: { autoComplete: "sms-otp" },
106
+ default: { autoComplete: "one-time-code" }
107
+ }) : {};
108
+ return { keyboardType: "number-pad", inputMode: "numeric", ...fill };
109
+ }
110
+ var boxMaxLength = (variant, index, length) => variant !== "masked" && index === 0 ? length + 1 : 1;
111
+ function boxStyle(theme, size, accent, state) {
112
+ const side = fieldHeightPx(theme.fieldHeight, size);
113
+ const edge = resolveFieldEdge(theme.palette.divider, theme.palette.background.paper);
114
+ const borderColor = state.error ? theme.palette.danger.main : state.disabled ? theme.palette.action.disabled : state.focused ? accent : edge;
115
+ return {
116
+ width: side,
117
+ height: side,
118
+ borderRadius: theme.radius.field,
119
+ borderWidth: state.focused ? OTP_BORDER.focused : OTP_BORDER.rest,
120
+ borderColor,
121
+ backgroundColor: theme.palette.background.paper,
122
+ color: state.disabled ? theme.palette.text.disabled : theme.palette.text.primary,
123
+ fontFamily: theme.typography.fontFamily,
124
+ fontSize: OTP_FONT_PX[size],
125
+ fontWeight: "600",
126
+ textAlign: "center",
127
+ padding: 0
128
+ };
129
+ }
130
+ var InputOTP = React.forwardRef((props, ref) => {
131
+ const {
132
+ variant = "numeric",
133
+ color = "primary",
134
+ size = "md",
135
+ length = 6,
136
+ value = "",
137
+ onChange,
138
+ onComplete,
139
+ autoFocus = false,
140
+ error = false,
141
+ disabled = false,
142
+ dataTestId,
143
+ style,
144
+ "aria-label": ariaLabel
145
+ } = props;
146
+ const theme = useUiTheme();
147
+ const accent = accentOf(theme, color);
148
+ const [focusedIndex, setFocusedIndex] = React.useState(null);
149
+ const { digits, boxRefs, handleChangeText, handleKey } = useNativeOtpDigits({
150
+ variant,
151
+ length,
152
+ value,
153
+ onChange,
154
+ onComplete
155
+ });
156
+ return /* @__PURE__ */ jsx(View, { ref, testID: dataTestId, role: "group", "aria-label": ariaLabel, style: [styles.row, style], children: digits.map((digit, index) => /* @__PURE__ */ jsx(
157
+ TextInput,
158
+ {
159
+ ref: (element) => {
160
+ boxRefs.current[index] = element;
161
+ },
162
+ testID: dataTestId ? `${dataTestId}-slot-${index}` : void 0,
163
+ value: variant === "masked" ? digit ? "\u2022" : "" : digit,
164
+ onChangeText: (text) => handleChangeText(index, text),
165
+ onKeyPress: (event) => handleKey(index, event.nativeEvent.key),
166
+ onFocus: () => setFocusedIndex(index),
167
+ onBlur: () => setFocusedIndex((current) => current === index ? null : current),
168
+ autoFocus: autoFocus && index === 0,
169
+ editable: !disabled,
170
+ "aria-disabled": disabled,
171
+ ...webAria({ "aria-invalid": error }),
172
+ maxLength: boxMaxLength(variant, index, length),
173
+ style: boxStyle(theme, size, accent, { focused: focusedIndex === index && !disabled, error, disabled }),
174
+ ...webDisabled(disabled),
175
+ ...keypadProps(variant, index)
176
+ },
177
+ index
178
+ )) });
179
+ });
180
+ InputOTP.displayName = "InputOTP";
181
+ var styles = StyleSheet.create({
182
+ row: {
183
+ flexDirection: "row",
184
+ justifyContent: "center",
185
+ alignItems: "center",
186
+ gap: OTP_GAP_PX
187
+ }
188
+ });
189
+ export {
190
+ InputOTP
191
+ };
192
+ //# sourceMappingURL=InputOTP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/form/InputOTP/InputOTP.native.tsx","../../../src/components/form/InputOTP/InputOTP.hooks.native.ts","../../../src/components/form/InputOTP/InputOTP.core.ts","../../../src/components/form/InputOTP/InputOTP.metrics.ts"],"sourcesContent":["import * as React from 'react';\nimport { Platform, StyleSheet, TextInput, View, type TextInputProps, type TextStyle } from 'react-native';\n\nimport { useNativeOtpDigits } from './InputOTP.hooks.native';\nimport { OTP_BORDER, OTP_FONT_PX, OTP_GAP_PX } from './InputOTP.metrics';\nimport type { InputOTPProps } from './InputOTP.types.native';\nimport { webAria, webDisabled } from '../../../platform/aria';\nimport { resolveFieldEdge } from '../../../tokens/field-edge.core';\nimport { fieldHeightPx } from '../../../tokens/field-height.core';\nimport type { UiPaletteKey, UiTheme } from '../../../tokens/theme';\nimport type { SizeValue } from '../../../tokens/vocabulary';\nimport { useUiTheme } from '../../../provider/use-ui-theme.native';\n\nconst PALETTE_KEYS: readonly UiPaletteKey[] = ['primary', 'secondary', 'success', 'warning', 'info', 'danger', 'neutral'];\n\n/** The palette slot a `color` names; anything else is `primary`, as on the web. */\nfunction accentOf(theme: UiTheme, color: string): string {\n const key = PALETTE_KEYS.find((candidate) => candidate === color) ?? 'primary';\n return theme.palette[key].main;\n}\n\n/**\n * The keypad and the one-time-code fill, the web's `keypadProps` in React\n * Native's words: digits only for `numeric`, and on the FIRST box the hint that\n * lets the phone offer the code from an SMS — `oneTimeCode` on iOS,\n * `sms-otp` on Android.\n */\nfunction keypadProps(variant: string, index: number): Partial<TextInputProps> {\n // A code is not prose: no capital on the first letter, no autocorrect.\n if (variant !== 'numeric') return { autoCapitalize: 'none', autoCorrect: false, spellCheck: false };\n const fill: Partial<TextInputProps> =\n index === 0\n ? Platform.select<Partial<TextInputProps>>({\n ios: { textContentType: 'oneTimeCode', autoComplete: 'one-time-code' },\n android: { autoComplete: 'sms-otp' },\n default: { autoComplete: 'one-time-code' },\n })\n : {};\n return { keyboardType: 'number-pad', inputMode: 'numeric', ...fill };\n}\n\n/** The first box takes a whole code in one change (see the web's `slotMaxLength`), except `masked`'s. */\nconst boxMaxLength = (variant: string, index: number, length: number): number =>\n variant !== 'masked' && index === 0 ? length + 1 : 1;\n\ninterface BoxState {\n focused: boolean;\n error: boolean;\n disabled: boolean;\n}\n\n/** One box's paint: the web slot's square, border and type, from the same numbers. */\nfunction boxStyle(theme: UiTheme, size: SizeValue, accent: string, state: BoxState): TextStyle {\n const side = fieldHeightPx(theme.fieldHeight, size);\n const edge = resolveFieldEdge(theme.palette.divider, theme.palette.background.paper);\n // Error and disabled outrank focus, as in MUI's outlined input (and the native `Input`).\n const borderColor = state.error\n ? theme.palette.danger.main\n : state.disabled\n ? theme.palette.action.disabled\n : state.focused\n ? accent\n : edge;\n return {\n width: side,\n height: side,\n borderRadius: theme.radius.field,\n borderWidth: state.focused ? OTP_BORDER.focused : OTP_BORDER.rest,\n borderColor,\n backgroundColor: theme.palette.background.paper,\n color: state.disabled ? theme.palette.text.disabled : theme.palette.text.primary,\n fontFamily: theme.typography.fontFamily,\n fontSize: OTP_FONT_PX[size],\n fontWeight: '600',\n textAlign: 'center',\n padding: 0,\n };\n}\n\n/**\n * The native `InputOTP`: one row of boxes, one character each, that moves\n * forward as it is typed, steps back on Backspace in an empty box, and spreads\n * a code the phone fills (or a paste) across every box from the first.\n *\n * The same props as the web one; the row is a `group` named by `aria-label`,\n * each box is `${dataTestId}-slot-${index}`. Gaps against the web:\n * `NATIVE-NOTES.md`.\n */\nexport const InputOTP = React.forwardRef<View, InputOTPProps>((props, ref) => {\n const {\n variant = 'numeric',\n color = 'primary',\n size = 'md',\n length = 6,\n value = '',\n onChange,\n onComplete,\n autoFocus = false,\n error = false,\n disabled = false,\n dataTestId,\n style,\n 'aria-label': ariaLabel,\n } = props;\n\n const theme = useUiTheme();\n const accent = accentOf(theme, color);\n const [focusedIndex, setFocusedIndex] = React.useState<number | null>(null);\n const { digits, boxRefs, handleChangeText, handleKey } = useNativeOtpDigits({\n variant,\n length,\n value,\n onChange,\n onComplete,\n });\n\n return (\n <View ref={ref} testID={dataTestId} role=\"group\" aria-label={ariaLabel} style={[styles.row, style]}>\n {digits.map((digit, index) => (\n <TextInput\n key={index}\n ref={(element) => {\n boxRefs.current[index] = element;\n }}\n testID={dataTestId ? `${dataTestId}-slot-${index}` : undefined}\n value={variant === 'masked' ? (digit ? '•' : '') : digit}\n onChangeText={(text) => handleChangeText(index, text)}\n onKeyPress={(event) => handleKey(index, event.nativeEvent.key)}\n onFocus={() => setFocusedIndex(index)}\n onBlur={() => setFocusedIndex((current) => (current === index ? null : current))}\n autoFocus={autoFocus && index === 0}\n editable={!disabled}\n aria-disabled={disabled}\n {...webAria({ 'aria-invalid': error })}\n maxLength={boxMaxLength(variant, index, length)}\n style={boxStyle(theme, size, accent, { focused: focusedIndex === index && !disabled, error, disabled })}\n {...webDisabled(disabled)}\n {...keypadProps(variant, index)}\n />\n ))}\n </View>\n );\n});\n\nInputOTP.displayName = 'InputOTP';\n\nconst styles = StyleSheet.create({\n row: {\n flexDirection: 'row',\n justifyContent: 'center',\n alignItems: 'center',\n gap: OTP_GAP_PX,\n },\n});\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { codeOfFill, firstSlotFill, isAllowed, padTo } from './InputOTP.core';\n\n/** What a box needs from the element behind it: to take the focus. */\ninterface Focusable {\n focus: () => void;\n}\n\ninterface NativeOtpInput {\n variant: string;\n length: number;\n value: string;\n onChange?: (value: string) => void;\n onComplete?: (value: string) => void;\n}\n\n/**\n * The native boxes' digits — the web hook's rules (`InputOTP.hooks.ts`) over\n * React Native's events: `onChangeText` carries the box's whole new text and\n * `onKeyPress` carries only the key's name, and there is no paste event at\n * all. A pasted or SMS-filled code arrives as a change of the FIRST box, whose\n * `maxLength` is the code's length plus one for exactly that reason, and is\n * spread across the boxes by the same `firstSlotFill` / `codeOfFill` the web\n * uses.\n */\nexport const useNativeOtpDigits = ({ variant, length, value, onChange, onComplete }: NativeOtpInput) => {\n const [digits, setDigits] = useState<string[]>(() => padTo([], length));\n const boxRefs = useRef<(Focusable | null)[]>([]);\n\n useEffect(() => {\n setDigits(padTo(value.split('').slice(0, length), length));\n }, [value, length]);\n\n const focusBox = useCallback((index: number) => boxRefs.current[index]?.focus(), []);\n\n const publish = useCallback(\n (next: string) => {\n onChange?.(next);\n if (next.length === length) onComplete?.(next);\n },\n [length, onChange, onComplete],\n );\n\n /** A whole code laid across the boxes from the first one. */\n const spread = useCallback(\n (text: string) => {\n const code = text.slice(0, length);\n if (!code || !isAllowed(variant, code)) return;\n setDigits(padTo(code.split(''), length));\n publish(code);\n focusBox(Math.min(code.length, length - 1));\n },\n [variant, length, publish, focusBox],\n );\n\n const handleChangeText = useCallback(\n (index: number, text: string) => {\n // The web's paste spreads a code for EVERY variant; React Native has no\n // paste event, so a code arrives as a change of the first box, read by\n // the numeric rule for `alphanumeric` too (`masked` shows a bullet, whose\n // text no longer holds the digit it hides: it keeps one character a box).\n const fill = firstSlotFill(variant === 'alphanumeric' ? 'numeric' : variant, index, text, digits[0] ?? '');\n if (fill) return fill === 'code' ? spread(codeOfFill(text, digits[0] ?? '', length)) : undefined;\n if (!isAllowed(variant, text)) return;\n const next = [...digits];\n next[index] = text.slice(-1);\n setDigits(next);\n publish(next.join(''));\n if (text && index < length - 1) focusBox(index + 1);\n },\n [variant, digits, length, publish, focusBox, spread],\n );\n\n /** Backspace in a box that is already empty steps back to the one before. */\n const handleKey = useCallback(\n (index: number, key: string) => {\n if (key === 'Backspace' && !digits[index] && index > 0) focusBox(index - 1);\n },\n [digits, focusBox],\n );\n\n return { digits, boxRefs, handleChangeText, handleKey };\n};\n","/**\n * The digits' arithmetic, shared by both renderers' hooks (`InputOTP.hooks.ts`\n * on the web, `InputOTP.hooks.native.ts` on React Native). Pure: no React, no\n * DOM, no react-native.\n */\n\n/**\n * What each variant accepts. `masked` constrains nothing — it only changes what\n * is drawn — so it has no pattern here.\n */\nexport const PATTERNS: Record<string, RegExp> = {\n numeric: /^\\d*$/,\n alphanumeric: /^[a-zA-Z0-9]*$/,\n};\n\n/** Whether `text` is something this variant will take. */\nexport const isAllowed = (variant: string, text: string) => (PATTERNS[variant] ?? /.*/).test(text);\n\n/** The digit array is always `length` long, blank-padded on the right. */\nexport const padTo = (digits: string[], length: number) =>\n Array.from({ length }, (_, i) => digits[i] ?? '');\n\n/**\n * What a change to the numeric FIRST slot is, now that its `maxLength` is the\n * code's length rather than 1 (FUT-4144).\n *\n * That slot carries `one-time-code`, and the phone's SMS fill (or a password\n * manager) writes the WHOLE code into it as one change, not a paste — kept to\n * one character, the code lost every digit but the last. So:\n *\n * - `overtype`: a keystroke into the already-filled slot (its old character\n * plus the new one). Ignored, exactly as `maxLength={1}` refused it before.\n * - `code`: anything else longer than one character, written in one go.\n * Spread across the slots like a paste.\n *\n * Every other slot and variant keeps `maxLength={1}` and never gets here.\n */\nexport function firstSlotFill(variant: string, index: number, inputValue: string, current: string) {\n if (variant !== 'numeric' || index !== 0 || inputValue.length < 2) return null;\n const overtype = inputValue.length === 2 && current !== '' && inputValue.includes(current);\n return overtype ? 'overtype' : 'code';\n}\n\n/**\n * The code inside a first-slot fill. A phone that INSERTS the SMS code at the\n * caret rather than replacing the slot leaves the digit already there in\n * front: `4` + `482913` arrives as `4482913`, which spread as-is would give\n * `448291`. Longer than the code and led by that digit: the digit is dropped.\n */\nexport const codeOfFill = (inputValue: string, current: string, length: number): string =>\n inputValue.length > length && current !== '' && inputValue.startsWith(current) ? inputValue.slice(1) : inputValue;\n","/**\n * The numbers both renderers read (see `NATIVE.md`, \"Numbers\").\n *\n * Each box's type size, in design px, per size step; its side is the theme's\n * field height for that step (a square), its weight 600.\n */\nexport const OTP_FONT_PX: Record<'xs' | 'sm' | 'md' | 'lg' | 'xl', number> = {\n xs: 12,\n sm: 14,\n md: 16,\n lg: 18,\n xl: 20,\n};\n\n/** The gap between two boxes: MUI's `gap: 1`, one 8px spacing unit. */\nexport const OTP_GAP_PX = 8;\n\n/** The border: 1px at rest, 2px focused (MUI's focused outline). */\nexport const OTP_BORDER = { rest: 1, focused: 2 } as const;\n"],"mappings":"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","names":[]}
@@ -1,7 +1,7 @@
1
1
  import "../chunk-5CUKSNWG.js";
2
2
  import {
3
3
  AppHeaderDetails
4
- } from "../chunk-VMACQT3T.js";
4
+ } from "../chunk-XH7UDC5Y.js";
5
5
  import {
6
6
  AppHeader,
7
7
  AppHeader_default
@@ -18,19 +18,19 @@ import {
18
18
  highlightOf,
19
19
  initialsOf
20
20
  } from "../chunk-IQU4HKND.js";
21
- import "../chunk-7TENMQNQ.js";
21
+ import "../chunk-XZMSRHFD.js";
22
+ import "../chunk-3ROCD7XF.js";
22
23
  import "../chunk-LYVTJLCF.js";
23
24
  import "../chunk-CRN4KKNI.js";
24
25
  import "../chunk-OHA2PAAA.js";
25
- import "../chunk-3ROCD7XF.js";
26
26
  import "../chunk-ABZJNKR6.js";
27
27
  import "../chunk-IM4DMKH4.js";
28
28
  import "../chunk-MDU5Q2HW.js";
29
- import "../chunk-KWBMM6MJ.js";
29
+ import "../chunk-RZKKWIGQ.js";
30
+ import "../chunk-GYXUCS37.js";
30
31
  import "../chunk-5UX5QAFJ.js";
31
- import "../chunk-Z2JH5KW5.js";
32
32
  import "../chunk-AL5E624U.js";
33
- import "../chunk-GYXUCS37.js";
33
+ import "../chunk-Z2JH5KW5.js";
34
34
  import "../chunk-LV7LSPBF.js";
35
35
  import "../chunk-YOXYSAUI.js";
36
36
  import "../chunk-PPEHBI5O.js";
@@ -1,27 +1,27 @@
1
1
  import "../chunk-R26KYJHK.js";
2
2
  import {
3
3
  SectionNav
4
- } from "../chunk-IJVBLU25.js";
4
+ } from "../chunk-KJZ4PINO.js";
5
5
  import {
6
6
  sectionNavBarInset
7
- } from "../chunk-ULC4SCFC.js";
8
- import "../chunk-7MLT66DE.js";
9
- import "../chunk-SNWCT6JN.js";
10
- import "../chunk-ILJ3FXIC.js";
7
+ } from "../chunk-NLJ7LL6H.js";
8
+ import "../chunk-K33X3PDT.js";
9
+ import "../chunk-AMIUZRDQ.js";
10
+ import "../chunk-MM3QESLI.js";
11
11
  import {
12
12
  RaisedActionButton
13
- } from "../chunk-UKUGSU3Y.js";
14
- import "../chunk-24HHUCWB.js";
13
+ } from "../chunk-L4V7FZJI.js";
14
+ import "../chunk-LDCZPZPD.js";
15
15
  import "../chunk-YCCWJ5XQ.js";
16
16
  import "../chunk-TMSWLFL4.js";
17
17
  import "../chunk-JJTJ7DCV.js";
18
18
  import "../chunk-PUFA7FQ7.js";
19
19
  import "../chunk-5AK2EZG5.js";
20
- import "../chunk-N5PVD4J5.js";
21
- import "../chunk-6C5D6O3D.js";
20
+ import "../chunk-6DO672AG.js";
22
21
  import "../chunk-ZNCYCE7L.js";
23
22
  import "../chunk-2L3VRVRE.js";
24
23
  import "../chunk-BJE3XHD4.js";
24
+ import "../chunk-6C5D6O3D.js";
25
25
  import "../chunk-3UIDKLML.js";
26
26
  import "../chunk-PYC4CWCQ.js";
27
27
  import "../chunk-VWKMN3ZZ.js";
@@ -0,0 +1,63 @@
1
+ import type { ColorValue, SizeValue } from '../../../tokens/vocabulary';
2
+ /**
3
+ * THE CONTRACT BOTH RENDERERS HONOUR (see `Button.base.ts`).
4
+ *
5
+ * No MUI and no react-native here: this file ships in both declaration
6
+ * outputs, and a native consumer has no `@mui/material` to resolve against.
7
+ */
8
+ export interface InputOTPBaseProps {
9
+ /**
10
+ * The variant of the OTP input
11
+ */
12
+ variant?: 'numeric' | 'alphanumeric' | 'masked';
13
+ /**
14
+ * The color theme of the OTP input
15
+ */
16
+ color?: ColorValue;
17
+ /**
18
+ * The size of the OTP input
19
+ */
20
+ size?: SizeValue;
21
+ /**
22
+ * Number of OTP digits
23
+ */
24
+ length?: number;
25
+ /**
26
+ * Current value
27
+ */
28
+ value?: string;
29
+ /**
30
+ * Called when value changes
31
+ */
32
+ onChange?: (value: string) => void;
33
+ /**
34
+ * Called when OTP is complete
35
+ */
36
+ onComplete?: (value: string) => void;
37
+ /**
38
+ * Whether the input should have glass morphism effect
39
+ */
40
+ glass?: boolean;
41
+ /**
42
+ * Whether the input should have gradient effects
43
+ */
44
+ gradient?: boolean;
45
+ /**
46
+ * Whether to auto-focus first input
47
+ */
48
+ autoFocus?: boolean;
49
+ /**
50
+ * Error state
51
+ */
52
+ error?: boolean;
53
+ /**
54
+ * Disabled state
55
+ */
56
+ disabled?: boolean;
57
+ /**
58
+ * Test ID for automated testing
59
+ * Container will have this ID, and individual slots will have {dataTestId}-slot-{index}
60
+ */
61
+ dataTestId?: string;
62
+ }
63
+ //# sourceMappingURL=InputOTP.base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputOTP.base.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/InputOTP/InputOTP.base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAExE;;;;;GAKG;AAEH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,cAAc,GAAG,QAAQ,CAAC;IAEhD;;OAEG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IAEnB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IAEjB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAEnC;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAErC;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * The digits' arithmetic, shared by both renderers' hooks (`InputOTP.hooks.ts`
3
+ * on the web, `InputOTP.hooks.native.ts` on React Native). Pure: no React, no
4
+ * DOM, no react-native.
5
+ */
6
+ /**
7
+ * What each variant accepts. `masked` constrains nothing — it only changes what
8
+ * is drawn — so it has no pattern here.
9
+ */
10
+ export declare const PATTERNS: Record<string, RegExp>;
11
+ /** Whether `text` is something this variant will take. */
12
+ export declare const isAllowed: (variant: string, text: string) => boolean;
13
+ /** The digit array is always `length` long, blank-padded on the right. */
14
+ export declare const padTo: (digits: string[], length: number) => string[];
15
+ /**
16
+ * What a change to the numeric FIRST slot is, now that its `maxLength` is the
17
+ * code's length rather than 1 (FUT-4144).
18
+ *
19
+ * That slot carries `one-time-code`, and the phone's SMS fill (or a password
20
+ * manager) writes the WHOLE code into it as one change, not a paste — kept to
21
+ * one character, the code lost every digit but the last. So:
22
+ *
23
+ * - `overtype`: a keystroke into the already-filled slot (its old character
24
+ * plus the new one). Ignored, exactly as `maxLength={1}` refused it before.
25
+ * - `code`: anything else longer than one character, written in one go.
26
+ * Spread across the slots like a paste.
27
+ *
28
+ * Every other slot and variant keeps `maxLength={1}` and never gets here.
29
+ */
30
+ export declare function firstSlotFill(variant: string, index: number, inputValue: string, current: string): "code" | "overtype" | null;
31
+ /**
32
+ * The code inside a first-slot fill. A phone that INSERTS the SMS code at the
33
+ * caret rather than replacing the slot leaves the digit already there in
34
+ * front: `4` + `482913` arrives as `4482913`, which spread as-is would give
35
+ * `448291`. Longer than the code and led by that digit: the digit is dropped.
36
+ */
37
+ export declare const codeOfFill: (inputValue: string, current: string, length: number) => string;
38
+ //# sourceMappingURL=InputOTP.core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputOTP.core.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/InputOTP/InputOTP.core.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAG3C,CAAC;AAEF,0DAA0D;AAC1D,eAAO,MAAM,SAAS,GAAI,SAAS,MAAM,EAAE,MAAM,MAAM,YAA2C,CAAC;AAEnG,0EAA0E;AAC1E,eAAO,MAAM,KAAK,GAAI,QAAQ,MAAM,EAAE,EAAE,QAAQ,MAAM,aACH,CAAC;AAEpD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,8BAIhG;AAED;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,YAAY,MAAM,EAAE,SAAS,MAAM,EAAE,QAAQ,MAAM,KAAG,MACkC,CAAC"}
@@ -1,4 +1,3 @@
1
1
  import React from 'react';
2
- import type { InputOTPProps } from './InputOTP.types';
3
- export declare const InputOTP: React.ForwardRefExoticComponent<InputOTPProps & React.RefAttributes<HTMLDivElement>>;
2
+ export declare const InputOTP: React.ForwardRefExoticComponent<import("./InputOTP.base").InputOTPBaseProps & React.RefAttributes<HTMLDivElement>>;
4
3
  //# sourceMappingURL=InputOTP.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"InputOTP.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/InputOTP/InputOTP.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAO1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAyDtD,eAAO,MAAM,QAAQ,sFAsDnB,CAAC"}
1
+ {"version":3,"file":"InputOTP.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/InputOTP/InputOTP.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAgE1C,eAAO,MAAM,QAAQ,oHAsDnB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"InputOTP.hooks.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/InputOTP/InputOTP.hooks.ts"],"names":[],"mappings":"AAiDA,UAAU,QAAQ;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,GAAI,kDAAkD,QAAQ;;;+BAqC3E,MAAM,cAAc,MAAM;2BAkB1B,MAAM,KAAK,KAAK,CAAC,aAAa;qBAelC,KAAK,CAAC,cAAc;CAQ3B,CAAC"}
1
+ {"version":3,"file":"InputOTP.hooks.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/InputOTP/InputOTP.hooks.ts"],"names":[],"mappings":"AAIA,UAAU,QAAQ;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,GAAI,kDAAkD,QAAQ;;;+BAqC3E,MAAM,cAAc,MAAM;2BAkB1B,MAAM,KAAK,KAAK,CAAC,aAAa;qBAelC,KAAK,CAAC,cAAc;CAQ3B,CAAC"}