@12-apps/ui 6.73.1 → 6.74.1

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 (392) hide show
  1. package/NATIVE.md +1 -1
  2. package/dist/_internal/components/data-display/AsyncStateContainer/AsyncStateContainer.js +6 -6
  3. package/dist/_internal/components/data-display/Avatar/Avatar.js +4 -4
  4. package/dist/_internal/components/data-display/Avatar/Avatar.view.js +2 -2
  5. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +8 -5
  6. package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +8 -5
  7. package/dist/_internal/components/data-display/Carousel/Carousel.js +2 -2
  8. package/dist/_internal/components/data-display/Chart/Chart.js +3 -3
  9. package/dist/_internal/components/data-display/Chart/SpecChart.js +6 -6
  10. package/dist/_internal/components/data-display/Chart/chart-renderers.js +2 -2
  11. package/dist/_internal/components/data-display/Chart/chart-spec.js +2 -2
  12. package/dist/_internal/components/data-display/DataGrid/DataGrid.js +2 -2
  13. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +38 -38
  14. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +60 -57
  15. package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +3 -3
  16. package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +10 -7
  17. package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +7 -5
  18. package/dist/_internal/components/data-display/DataViews/base-card.js +3 -3
  19. package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +3 -3
  20. package/dist/_internal/components/data-display/DataViews/base-list-card-layout.js +3 -3
  21. package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +2 -2
  22. package/dist/_internal/components/data-display/DataViews/base-list-card.js +7 -7
  23. package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +9 -9
  24. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +12 -12
  25. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +6 -6
  26. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +33 -33
  27. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +16 -16
  28. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +13 -13
  29. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +14 -14
  30. package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +2 -2
  31. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +5 -5
  32. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +15 -12
  33. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +4 -4
  34. package/dist/_internal/components/data-display/DataViews/list-card-rails.js +2 -2
  35. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +4 -4
  36. package/dist/_internal/components/data-display/EmptyState/EmptyState.js +2 -2
  37. package/dist/_internal/components/data-display/FleetMap/FleetBody.js +10 -10
  38. package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +6 -6
  39. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +14 -14
  40. package/dist/_internal/components/data-display/FleetMap/FleetRoster.js +3 -3
  41. package/dist/_internal/components/data-display/HoverCard/HoverCard.js +2 -2
  42. package/dist/_internal/components/data-display/InteractiveTooltip/InteractiveTooltip.js +2 -2
  43. package/dist/_internal/components/data-display/LazyImage/LazyImage.js +3 -3
  44. package/dist/_internal/components/data-display/Lightbox/Lightbox.js +6 -6
  45. package/dist/_internal/components/data-display/LoadingState/LoadingState.js +3 -3
  46. package/dist/_internal/components/data-display/MapPreview/MapLayers.js +3 -3
  47. package/dist/_internal/components/data-display/MapPreview/MapPreview.js +5 -5
  48. package/dist/_internal/components/data-display/Progress/Progress.js +2 -2
  49. package/dist/_internal/components/data-display/SectionOnboarding/SectionOnboarding.js +3 -3
  50. package/dist/_internal/components/data-display/Sheet/Sheet.hooks.js +2 -2
  51. package/dist/_internal/components/data-display/Sheet/Sheet.js +4 -4
  52. package/dist/_internal/components/data-display/StatCard/StatCard.js +3 -3
  53. package/dist/_internal/components/data-display/Table/Table.js +2 -2
  54. package/dist/_internal/components/data-display/index.js +56 -56
  55. package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.js +5 -2
  56. package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.parts.js +4 -1
  57. package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +6 -3
  58. package/dist/_internal/components/feedback/ConfirmAction/with-confirmation.js +5 -2
  59. package/dist/_internal/components/feedback/Dialog/Dialog.js +2 -2
  60. package/dist/_internal/components/feedback/TutorialOverlay/TutorialOverlay.js +2 -2
  61. package/dist/_internal/components/feedback/index.js +13 -11
  62. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.hooks.js +4 -4
  63. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +8 -8
  64. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +2 -2
  65. package/dist/_internal/components/form/Autocomplete/Autocomplete.js +1 -1
  66. package/dist/_internal/components/form/Calendar/Calendar.hooks.js +2 -2
  67. package/dist/_internal/components/form/Calendar/Calendar.js +6 -6
  68. package/dist/_internal/components/form/Calendar/CalendarDayCell.js +2 -2
  69. package/dist/_internal/components/form/Calendar/CalendarMonth.js +3 -3
  70. package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +3 -3
  71. package/dist/_internal/components/form/CategorySelect/CategorySelect.js +7 -7
  72. package/dist/_internal/components/form/CepField/CepField.js +5 -4
  73. package/dist/_internal/components/form/CodeEditor/CodeEditor.js +2 -2
  74. package/dist/_internal/components/form/Command/Command.js +2 -2
  75. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +9 -9
  76. package/dist/_internal/components/form/Input/Input.factory.js +23 -0
  77. package/dist/_internal/components/form/Input/Input.factory.js.map +1 -0
  78. package/dist/_internal/components/form/Input/Input.js +4 -2
  79. package/dist/_internal/components/form/Input/outlined/text-field-slim-outlined.js +10 -0
  80. package/dist/_internal/components/form/Input/outlined/text-field-slim-outlined.js.map +1 -0
  81. package/dist/_internal/components/form/Input/text-field-slim.factory.js +10 -0
  82. package/dist/_internal/components/form/Input/text-field-slim.factory.js.map +1 -0
  83. package/dist/_internal/components/form/Input/text-field-slim.js +2 -1
  84. package/dist/_internal/components/form/NumberField/NumberField.js +5 -3
  85. package/dist/_internal/components/form/PickerSheet/PickerSheet.js +2 -2
  86. package/dist/_internal/components/form/index.js +44 -40
  87. package/dist/_internal/components/form/total-form/Fields/CategoryField.js +8 -8
  88. package/dist/_internal/components/form/total-form/Fields/CepField.js +6 -5
  89. package/dist/_internal/components/form/total-form/Fields/TextField.js +5 -3
  90. package/dist/_internal/components/form/total-form/Fields/index.js +21 -17
  91. package/dist/_internal/components/index.js +161 -157
  92. package/dist/_internal/components/layout/Card/Card.js +2 -2
  93. package/dist/_internal/components/layout/ScrollArea/ScrollArea.js +3 -3
  94. package/dist/_internal/components/layout/SettingCard/SettingCard.js +4 -4
  95. package/dist/_internal/components/layout/SettingCard/SettingCard.summary.js +3 -3
  96. package/dist/_internal/components/layout/SettingCard/SettingGroup.js +5 -5
  97. package/dist/_internal/components/layout/SettingCard/SettingSwitch.js +4 -4
  98. package/dist/_internal/components/layout/SettingCard/SettingToggle.js +5 -5
  99. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +5 -5
  100. package/dist/_internal/components/layout/SettingsLayout/SettingsPanel.js +2 -2
  101. package/dist/_internal/components/layout/Skeleton/Skeleton.js +2 -2
  102. package/dist/_internal/components/layout/index.js +17 -17
  103. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +7 -7
  104. package/dist/_internal/components/navigation/NavigationMenu/NavigationMegaSection.js +3 -3
  105. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.js +5 -5
  106. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenuItem.js +2 -2
  107. package/dist/_internal/components/navigation/NavigationMenu/NavigationStandardBody.js +3 -3
  108. package/dist/_internal/components/navigation/index.js +36 -36
  109. package/dist/_internal/components/utility/InfiniteScroll/InfiniteScroll.js +2 -2
  110. package/dist/_internal/components/utility/InstallPrompt/InstallPrompt.js +2 -2
  111. package/dist/_internal/components/utility/index.js +8 -8
  112. package/dist/_internal/pt-BR.data-display.js +2 -2
  113. package/dist/_internal/social-login-button/social-login-button.js +3 -3
  114. package/dist/_internal/user-avatar/user-avatar.js +7 -7
  115. package/dist/charts.js +11 -11
  116. package/dist/{chunk-GMJBWOIU.js → chunk-2ILXXBMG.js} +5 -5
  117. package/dist/{chunk-LVATGJZO.js → chunk-2K2Q7VGV.js} +2 -2
  118. package/dist/{chunk-ISW5K72V.js → chunk-2ZRZTGWP.js} +5 -5
  119. package/dist/{chunk-BM3MKZL2.js → chunk-3BDMYTH6.js} +2 -2
  120. package/dist/{chunk-Q7BGMLCX.js → chunk-3FDSXSEP.js} +3 -3
  121. package/dist/{chunk-5WJFCQFN.js → chunk-3O2OJW4O.js} +4 -4
  122. package/dist/{chunk-L4FWEI2P.js → chunk-3V3Z4EML.js} +5 -5
  123. package/dist/{chunk-7KAZ3B5B.js → chunk-3VLVLZ6W.js} +4 -4
  124. package/dist/{chunk-CE74DKHT.js → chunk-44PBCQ7E.js} +7 -7
  125. package/dist/chunk-4JNC5AEF.js +14 -0
  126. package/dist/chunk-4JNC5AEF.js.map +1 -0
  127. package/dist/{chunk-U5YOOHR6.js → chunk-4QGPRORO.js} +2 -2
  128. package/dist/{chunk-W2RXXF7K.js → chunk-4XBAEKQQ.js} +4 -4
  129. package/dist/{chunk-7SPFK73H.js → chunk-52CLMR47.js} +7 -7
  130. package/dist/{chunk-LYVTJLCF.js → chunk-56JF5PZK.js} +4 -4
  131. package/dist/{chunk-QBY3TWV3.js → chunk-5HFB4WFE.js} +3 -3
  132. package/dist/{chunk-3DPPDGOF.js → chunk-62SXUU5U.js} +5 -5
  133. package/dist/{chunk-QADTI63U.js → chunk-6ATXOJVQ.js} +4 -4
  134. package/dist/{chunk-F3AYISXT.js → chunk-6PU3JYVY.js} +4 -4
  135. package/dist/{chunk-WVIJFS5Y.js → chunk-725H45MT.js} +7 -7
  136. package/dist/{chunk-XP522FFM.js → chunk-7JKDB5J5.js} +5 -5
  137. package/dist/{chunk-V45JGJ3W.js → chunk-7K23NEZO.js} +8 -8
  138. package/dist/{chunk-EOQ6EKTS.js → chunk-7XSCEHGA.js} +7 -7
  139. package/dist/{chunk-7VUXSNVZ.js → chunk-A4B27HYU.js} +2 -2
  140. package/dist/{chunk-ADSA76T7.js → chunk-AG3DY5TH.js} +2 -2
  141. package/dist/{chunk-G5ORAVSP.js → chunk-AJ5LXKLQ.js} +8 -8
  142. package/dist/{chunk-HI7JPDD6.js → chunk-AMLHEKSV.js} +5 -5
  143. package/dist/{chunk-XZILNBAU.js → chunk-ARVLS57B.js} +6 -6
  144. package/dist/{chunk-ZEH6MGP5.js → chunk-BEHM2VLH.js} +9 -9
  145. package/dist/{chunk-EBMWYRXW.js → chunk-BEYLI32I.js} +2 -2
  146. package/dist/{chunk-YKKHNYEW.js → chunk-BF3SGOWT.js} +3 -3
  147. package/dist/{chunk-MA6SUE7F.js → chunk-BGGVYKVZ.js} +4 -4
  148. package/dist/{chunk-EQK3K65G.js → chunk-C6LW34TV.js} +2 -2
  149. package/dist/chunk-C6LW34TV.js.map +1 -0
  150. package/dist/{chunk-E5GYHN4X.js → chunk-CAX3NFFE.js} +3 -3
  151. package/dist/{chunk-LIN4A2BW.js → chunk-CSD6SWBZ.js} +5 -5
  152. package/dist/{chunk-QK63RXLG.js → chunk-CYH5QQUP.js} +8 -8
  153. package/dist/{chunk-CJGSQL77.js → chunk-CZV6NVCA.js} +4 -4
  154. package/dist/{chunk-755VS7NA.js → chunk-DOWVAC4U.js} +3 -3
  155. package/dist/{chunk-V6OC2PSQ.js → chunk-DQ3O252B.js} +2 -2
  156. package/dist/{chunk-PIP7XII2.js → chunk-E54XIRY2.js} +5 -5
  157. package/dist/{chunk-SL6454K7.js → chunk-EEB66IVH.js} +26 -32
  158. package/dist/chunk-EEB66IVH.js.map +1 -0
  159. package/dist/{chunk-YNIOCELQ.js → chunk-ERI6JC4M.js} +3 -3
  160. package/dist/{chunk-U57NFQYE.js → chunk-FIOBPQL2.js} +4 -4
  161. package/dist/{chunk-6VUVSYP4.js → chunk-FR2RJXHS.js} +2 -2
  162. package/dist/{chunk-FWPQUYND.js → chunk-FS55MQ4Q.js} +2 -2
  163. package/dist/{chunk-UXVB423Q.js → chunk-FVL6U72V.js} +6 -6
  164. package/dist/{chunk-2ZHF5VE4.js → chunk-FXECKKPW.js} +32 -29
  165. package/dist/chunk-FXECKKPW.js.map +1 -0
  166. package/dist/{chunk-LWZ2K225.js → chunk-FXZUVZON.js} +6 -6
  167. package/dist/{chunk-RGR6YKK5.js → chunk-GBKIGUNP.js} +2 -2
  168. package/dist/{chunk-YBAK2WN5.js → chunk-HBHBRRSW.js} +7 -7
  169. package/dist/{chunk-HNFZLXZI.js → chunk-HBP2OU4Q.js} +5 -5
  170. package/dist/{chunk-4MKVGSHX.js → chunk-HN3PZTUK.js} +5 -5
  171. package/dist/{chunk-ZOUWHGV3.js → chunk-HOJL2GKW.js} +7 -7
  172. package/dist/{chunk-JVOEVTCZ.js → chunk-HQCZT6TO.js} +5 -5
  173. package/dist/{chunk-PCM4VEPO.js → chunk-HSIUVFXE.js} +7 -7
  174. package/dist/{chunk-L5R2FB4T.js → chunk-HVGQH54G.js} +2 -2
  175. package/dist/{chunk-RQF4NXDC.js → chunk-IWJTLCTF.js} +2 -2
  176. package/dist/{chunk-IICBAAL7.js → chunk-IZ7JTG3Z.js} +4 -4
  177. package/dist/{chunk-2QB4WIU5.js → chunk-J5QNJERV.js} +10 -10
  178. package/dist/{chunk-6OLERKNC.js → chunk-JA3WJPXH.js} +2 -2
  179. package/dist/{chunk-5ZOJLYD2.js → chunk-JE6RZ5L6.js} +4 -4
  180. package/dist/{chunk-GICG3XJK.js → chunk-K44FSPU7.js} +4 -4
  181. package/dist/{chunk-J2RUDZVJ.js → chunk-KARMRTTM.js} +7 -7
  182. package/dist/{chunk-RIAZPGHT.js → chunk-KKVM723A.js} +4 -4
  183. package/dist/{chunk-6QOJEZDH.js → chunk-KYTADPS2.js} +4 -4
  184. package/dist/{chunk-CDYQKIBL.js → chunk-LABIUXDM.js} +2 -2
  185. package/dist/{chunk-4W6AQFMO.js → chunk-LBEZ7A3F.js} +3 -3
  186. package/dist/{chunk-5JRAQ4D5.js → chunk-LTLOZQPP.js} +5 -3
  187. package/dist/chunk-LTLOZQPP.js.map +1 -0
  188. package/dist/chunk-LZRVUOMU.js +12 -0
  189. package/dist/chunk-LZRVUOMU.js.map +1 -0
  190. package/dist/{chunk-ZAPP32GD.js → chunk-M7HYNXCU.js} +2 -2
  191. package/dist/{chunk-QVEQOUQY.js → chunk-MA6ENJDP.js} +3 -3
  192. package/dist/{chunk-D34PZJH3.js → chunk-MBMZNSBP.js} +2 -2
  193. package/dist/{chunk-Z2J4MRTF.js → chunk-MKNW4FRR.js} +4 -4
  194. package/dist/{chunk-NJMAFII4.js → chunk-NDQJDA7O.js} +2 -2
  195. package/dist/{chunk-RCZ4KL2H.js → chunk-NIENIKZ5.js} +2 -2
  196. package/dist/{chunk-6QRN4JK7.js → chunk-NKBCUR4V.js} +2 -2
  197. package/dist/{chunk-2B3NX5HJ.js → chunk-NPSARV2I.js} +6 -6
  198. package/dist/{chunk-YPAH2NWN.js → chunk-NQ6P7O7C.js} +2 -2
  199. package/dist/{chunk-EWVJJ32N.js → chunk-OKYYHBGS.js} +6 -6
  200. package/dist/{chunk-WQ32YFM5.js → chunk-P7VAMJFJ.js} +5 -5
  201. package/dist/{chunk-RX2XP7V5.js → chunk-QBH36OBQ.js} +4 -4
  202. package/dist/{chunk-KYPHR4TT.js → chunk-QWSYHENP.js} +2 -2
  203. package/dist/chunk-RHVJ3L4U.js +14 -0
  204. package/dist/chunk-RHVJ3L4U.js.map +1 -0
  205. package/dist/{chunk-SE5WHKCB.js → chunk-RPKUZDRY.js} +6 -6
  206. package/dist/{chunk-V6SRBQMN.js → chunk-S4JXSC4D.js} +5 -5
  207. package/dist/{chunk-TIM4PXWN.js → chunk-SB2SEGR6.js} +3 -3
  208. package/dist/{chunk-7PTE6HBW.js → chunk-SUXT6QAY.js} +2 -2
  209. package/dist/{chunk-DAT4XWYX.js → chunk-TRYYYWV3.js} +14 -14
  210. package/dist/{chunk-65NYUQXD.js → chunk-TSID4257.js} +9 -9
  211. package/dist/{chunk-DWFUT45A.js → chunk-VEBNL5MG.js} +3 -3
  212. package/dist/{chunk-LVXGCXKB.js → chunk-VMTOLAZ5.js} +7 -7
  213. package/dist/{chunk-BRBQNPM2.js → chunk-VQSBZPKO.js} +3 -3
  214. package/dist/{chunk-ZEVFMQAQ.js → chunk-VWVA74JY.js} +2 -2
  215. package/dist/{chunk-YULI2EBC.js → chunk-XICRCPEQ.js} +4 -4
  216. package/dist/{chunk-Q4WTVAJ5.js → chunk-XLCVMRSO.js} +2 -2
  217. package/dist/{chunk-3DFWHF6O.js → chunk-YRF7WFAQ.js} +6 -6
  218. package/dist/{chunk-ZIHSCBMN.js → chunk-Z5V5E3JW.js} +10 -10
  219. package/dist/{chunk-G3JFESKD.js → chunk-Z5WUSI47.js} +6 -6
  220. package/dist/chunk-ZLMKGVB2.js +21 -0
  221. package/dist/chunk-ZLMKGVB2.js.map +1 -0
  222. package/dist/{chunk-JPYNGWV4.js → chunk-ZOLUUX4B.js} +2 -2
  223. package/dist/data-display/AsyncStateContainer.js +6 -6
  224. package/dist/data-display/Avatar.js +4 -4
  225. package/dist/data-display/CardKit.js +16 -13
  226. package/dist/data-display/Carousel.js +2 -2
  227. package/dist/data-display/Chart.js +11 -11
  228. package/dist/data-display/DataGrid.js +2 -2
  229. package/dist/data-display/DataViews.js +73 -70
  230. package/dist/data-display/EmptyState.js +2 -2
  231. package/dist/data-display/FleetMap.js +14 -14
  232. package/dist/data-display/HoverCard.js +2 -2
  233. package/dist/data-display/InteractiveTooltip.js +2 -2
  234. package/dist/data-display/LazyImage.js +3 -3
  235. package/dist/data-display/Lightbox.js +6 -6
  236. package/dist/data-display/LoadingState.js +3 -3
  237. package/dist/data-display/MapPreview.js +5 -5
  238. package/dist/data-display/Progress.js +2 -2
  239. package/dist/data-display/SectionOnboarding.js +3 -3
  240. package/dist/data-display/Sheet.js +4 -4
  241. package/dist/data-display/StatCard.js +3 -3
  242. package/dist/data-display/Table.js +2 -2
  243. package/dist/feedback/ConfirmAction.js +10 -7
  244. package/dist/feedback/Dialog.js +2 -2
  245. package/dist/feedback/TutorialOverlay.js +2 -2
  246. package/dist/form/AddressAutocomplete.js +8 -8
  247. package/dist/form/Autocomplete.js +1 -1
  248. package/dist/form/Calendar.js +6 -6
  249. package/dist/form/CategorySelect.js +7 -7
  250. package/dist/form/CepField.js +5 -4
  251. package/dist/form/CodeEditor.js +2 -2
  252. package/dist/form/Command.js +2 -2
  253. package/dist/form/DateRangePicker.js +9 -9
  254. package/dist/form/Input/outlined.js +27 -0
  255. package/dist/form/Input/outlined.js.map +1 -0
  256. package/dist/form/Input.js +4 -2
  257. package/dist/form/NumberField.js +5 -3
  258. package/dist/form/PickerSheet.js +2 -2
  259. package/dist/form/total-form.js +21 -17
  260. package/dist/layout/Card.js +2 -2
  261. package/dist/layout/ContentToolbar.js +3 -3
  262. package/dist/layout/ScrollArea.js +3 -3
  263. package/dist/layout/SettingCard.js +7 -7
  264. package/dist/layout/SettingsLayout.js +5 -5
  265. package/dist/layout/Skeleton.js +2 -2
  266. package/dist/locales.js +6 -6
  267. package/dist/navigation/AppHeader.js +9 -9
  268. package/dist/navigation/NavigationMenu.js +5 -5
  269. package/dist/pt-BR.js +6 -6
  270. package/dist/social-login-button.js +3 -3
  271. package/dist/types/components/feedback/ConfirmAction/ConfirmAction.parts.d.ts.map +1 -1
  272. package/dist/types/components/form/CepField/CepField.d.ts.map +1 -1
  273. package/dist/types/components/form/Input/Input.d.ts +9 -3
  274. package/dist/types/components/form/Input/Input.d.ts.map +1 -1
  275. package/dist/types/components/form/Input/Input.factory.d.ts +13 -0
  276. package/dist/types/components/form/Input/Input.factory.d.ts.map +1 -0
  277. package/dist/types/components/form/Input/outlined/index.d.ts +24 -0
  278. package/dist/types/components/form/Input/outlined/index.d.ts.map +1 -0
  279. package/dist/types/components/form/Input/outlined/text-field-slim-outlined.d.ts +10 -0
  280. package/dist/types/components/form/Input/outlined/text-field-slim-outlined.d.ts.map +1 -0
  281. package/dist/types/components/form/Input/text-field-slim.d.ts +8 -40
  282. package/dist/types/components/form/Input/text-field-slim.d.ts.map +1 -1
  283. package/dist/types/components/form/Input/text-field-slim.factory.d.ts +61 -0
  284. package/dist/types/components/form/Input/text-field-slim.factory.d.ts.map +1 -0
  285. package/dist/user-avatar.js +7 -7
  286. package/dist/utility/InfiniteScroll.js +2 -2
  287. package/dist/utility/InstallPrompt.js +2 -2
  288. package/package.json +5 -1
  289. package/src/components/feedback/ConfirmAction/ConfirmAction.parts.tsx +8 -2
  290. package/src/components/form/CepField/CepField.tsx +3 -1
  291. package/src/components/form/Input/Input.factory.tsx +221 -0
  292. package/src/components/form/Input/Input.md +20 -0
  293. package/src/components/form/Input/Input.tsx +9 -196
  294. package/src/components/form/Input/outlined/index.ts +27 -0
  295. package/src/components/form/Input/outlined/text-field-slim-outlined.tsx +13 -0
  296. package/src/components/form/Input/text-field-slim.factory.tsx +248 -0
  297. package/src/components/form/Input/text-field-slim.tsx +9 -209
  298. package/dist/chunk-2ZHF5VE4.js.map +0 -1
  299. package/dist/chunk-5JRAQ4D5.js.map +0 -1
  300. package/dist/chunk-EQK3K65G.js.map +0 -1
  301. package/dist/chunk-SL6454K7.js.map +0 -1
  302. /package/dist/{chunk-GMJBWOIU.js.map → chunk-2ILXXBMG.js.map} +0 -0
  303. /package/dist/{chunk-LVATGJZO.js.map → chunk-2K2Q7VGV.js.map} +0 -0
  304. /package/dist/{chunk-ISW5K72V.js.map → chunk-2ZRZTGWP.js.map} +0 -0
  305. /package/dist/{chunk-BM3MKZL2.js.map → chunk-3BDMYTH6.js.map} +0 -0
  306. /package/dist/{chunk-Q7BGMLCX.js.map → chunk-3FDSXSEP.js.map} +0 -0
  307. /package/dist/{chunk-5WJFCQFN.js.map → chunk-3O2OJW4O.js.map} +0 -0
  308. /package/dist/{chunk-L4FWEI2P.js.map → chunk-3V3Z4EML.js.map} +0 -0
  309. /package/dist/{chunk-7KAZ3B5B.js.map → chunk-3VLVLZ6W.js.map} +0 -0
  310. /package/dist/{chunk-CE74DKHT.js.map → chunk-44PBCQ7E.js.map} +0 -0
  311. /package/dist/{chunk-U5YOOHR6.js.map → chunk-4QGPRORO.js.map} +0 -0
  312. /package/dist/{chunk-W2RXXF7K.js.map → chunk-4XBAEKQQ.js.map} +0 -0
  313. /package/dist/{chunk-7SPFK73H.js.map → chunk-52CLMR47.js.map} +0 -0
  314. /package/dist/{chunk-LYVTJLCF.js.map → chunk-56JF5PZK.js.map} +0 -0
  315. /package/dist/{chunk-QBY3TWV3.js.map → chunk-5HFB4WFE.js.map} +0 -0
  316. /package/dist/{chunk-3DPPDGOF.js.map → chunk-62SXUU5U.js.map} +0 -0
  317. /package/dist/{chunk-QADTI63U.js.map → chunk-6ATXOJVQ.js.map} +0 -0
  318. /package/dist/{chunk-F3AYISXT.js.map → chunk-6PU3JYVY.js.map} +0 -0
  319. /package/dist/{chunk-WVIJFS5Y.js.map → chunk-725H45MT.js.map} +0 -0
  320. /package/dist/{chunk-XP522FFM.js.map → chunk-7JKDB5J5.js.map} +0 -0
  321. /package/dist/{chunk-V45JGJ3W.js.map → chunk-7K23NEZO.js.map} +0 -0
  322. /package/dist/{chunk-EOQ6EKTS.js.map → chunk-7XSCEHGA.js.map} +0 -0
  323. /package/dist/{chunk-7VUXSNVZ.js.map → chunk-A4B27HYU.js.map} +0 -0
  324. /package/dist/{chunk-ADSA76T7.js.map → chunk-AG3DY5TH.js.map} +0 -0
  325. /package/dist/{chunk-G5ORAVSP.js.map → chunk-AJ5LXKLQ.js.map} +0 -0
  326. /package/dist/{chunk-HI7JPDD6.js.map → chunk-AMLHEKSV.js.map} +0 -0
  327. /package/dist/{chunk-XZILNBAU.js.map → chunk-ARVLS57B.js.map} +0 -0
  328. /package/dist/{chunk-ZEH6MGP5.js.map → chunk-BEHM2VLH.js.map} +0 -0
  329. /package/dist/{chunk-EBMWYRXW.js.map → chunk-BEYLI32I.js.map} +0 -0
  330. /package/dist/{chunk-YKKHNYEW.js.map → chunk-BF3SGOWT.js.map} +0 -0
  331. /package/dist/{chunk-MA6SUE7F.js.map → chunk-BGGVYKVZ.js.map} +0 -0
  332. /package/dist/{chunk-E5GYHN4X.js.map → chunk-CAX3NFFE.js.map} +0 -0
  333. /package/dist/{chunk-LIN4A2BW.js.map → chunk-CSD6SWBZ.js.map} +0 -0
  334. /package/dist/{chunk-QK63RXLG.js.map → chunk-CYH5QQUP.js.map} +0 -0
  335. /package/dist/{chunk-CJGSQL77.js.map → chunk-CZV6NVCA.js.map} +0 -0
  336. /package/dist/{chunk-755VS7NA.js.map → chunk-DOWVAC4U.js.map} +0 -0
  337. /package/dist/{chunk-V6OC2PSQ.js.map → chunk-DQ3O252B.js.map} +0 -0
  338. /package/dist/{chunk-PIP7XII2.js.map → chunk-E54XIRY2.js.map} +0 -0
  339. /package/dist/{chunk-YNIOCELQ.js.map → chunk-ERI6JC4M.js.map} +0 -0
  340. /package/dist/{chunk-U57NFQYE.js.map → chunk-FIOBPQL2.js.map} +0 -0
  341. /package/dist/{chunk-6VUVSYP4.js.map → chunk-FR2RJXHS.js.map} +0 -0
  342. /package/dist/{chunk-FWPQUYND.js.map → chunk-FS55MQ4Q.js.map} +0 -0
  343. /package/dist/{chunk-UXVB423Q.js.map → chunk-FVL6U72V.js.map} +0 -0
  344. /package/dist/{chunk-LWZ2K225.js.map → chunk-FXZUVZON.js.map} +0 -0
  345. /package/dist/{chunk-RGR6YKK5.js.map → chunk-GBKIGUNP.js.map} +0 -0
  346. /package/dist/{chunk-YBAK2WN5.js.map → chunk-HBHBRRSW.js.map} +0 -0
  347. /package/dist/{chunk-HNFZLXZI.js.map → chunk-HBP2OU4Q.js.map} +0 -0
  348. /package/dist/{chunk-4MKVGSHX.js.map → chunk-HN3PZTUK.js.map} +0 -0
  349. /package/dist/{chunk-ZOUWHGV3.js.map → chunk-HOJL2GKW.js.map} +0 -0
  350. /package/dist/{chunk-JVOEVTCZ.js.map → chunk-HQCZT6TO.js.map} +0 -0
  351. /package/dist/{chunk-PCM4VEPO.js.map → chunk-HSIUVFXE.js.map} +0 -0
  352. /package/dist/{chunk-L5R2FB4T.js.map → chunk-HVGQH54G.js.map} +0 -0
  353. /package/dist/{chunk-RQF4NXDC.js.map → chunk-IWJTLCTF.js.map} +0 -0
  354. /package/dist/{chunk-IICBAAL7.js.map → chunk-IZ7JTG3Z.js.map} +0 -0
  355. /package/dist/{chunk-2QB4WIU5.js.map → chunk-J5QNJERV.js.map} +0 -0
  356. /package/dist/{chunk-6OLERKNC.js.map → chunk-JA3WJPXH.js.map} +0 -0
  357. /package/dist/{chunk-5ZOJLYD2.js.map → chunk-JE6RZ5L6.js.map} +0 -0
  358. /package/dist/{chunk-GICG3XJK.js.map → chunk-K44FSPU7.js.map} +0 -0
  359. /package/dist/{chunk-J2RUDZVJ.js.map → chunk-KARMRTTM.js.map} +0 -0
  360. /package/dist/{chunk-RIAZPGHT.js.map → chunk-KKVM723A.js.map} +0 -0
  361. /package/dist/{chunk-6QOJEZDH.js.map → chunk-KYTADPS2.js.map} +0 -0
  362. /package/dist/{chunk-CDYQKIBL.js.map → chunk-LABIUXDM.js.map} +0 -0
  363. /package/dist/{chunk-4W6AQFMO.js.map → chunk-LBEZ7A3F.js.map} +0 -0
  364. /package/dist/{chunk-ZAPP32GD.js.map → chunk-M7HYNXCU.js.map} +0 -0
  365. /package/dist/{chunk-QVEQOUQY.js.map → chunk-MA6ENJDP.js.map} +0 -0
  366. /package/dist/{chunk-D34PZJH3.js.map → chunk-MBMZNSBP.js.map} +0 -0
  367. /package/dist/{chunk-Z2J4MRTF.js.map → chunk-MKNW4FRR.js.map} +0 -0
  368. /package/dist/{chunk-NJMAFII4.js.map → chunk-NDQJDA7O.js.map} +0 -0
  369. /package/dist/{chunk-RCZ4KL2H.js.map → chunk-NIENIKZ5.js.map} +0 -0
  370. /package/dist/{chunk-6QRN4JK7.js.map → chunk-NKBCUR4V.js.map} +0 -0
  371. /package/dist/{chunk-2B3NX5HJ.js.map → chunk-NPSARV2I.js.map} +0 -0
  372. /package/dist/{chunk-YPAH2NWN.js.map → chunk-NQ6P7O7C.js.map} +0 -0
  373. /package/dist/{chunk-EWVJJ32N.js.map → chunk-OKYYHBGS.js.map} +0 -0
  374. /package/dist/{chunk-WQ32YFM5.js.map → chunk-P7VAMJFJ.js.map} +0 -0
  375. /package/dist/{chunk-RX2XP7V5.js.map → chunk-QBH36OBQ.js.map} +0 -0
  376. /package/dist/{chunk-KYPHR4TT.js.map → chunk-QWSYHENP.js.map} +0 -0
  377. /package/dist/{chunk-SE5WHKCB.js.map → chunk-RPKUZDRY.js.map} +0 -0
  378. /package/dist/{chunk-V6SRBQMN.js.map → chunk-S4JXSC4D.js.map} +0 -0
  379. /package/dist/{chunk-TIM4PXWN.js.map → chunk-SB2SEGR6.js.map} +0 -0
  380. /package/dist/{chunk-7PTE6HBW.js.map → chunk-SUXT6QAY.js.map} +0 -0
  381. /package/dist/{chunk-DAT4XWYX.js.map → chunk-TRYYYWV3.js.map} +0 -0
  382. /package/dist/{chunk-65NYUQXD.js.map → chunk-TSID4257.js.map} +0 -0
  383. /package/dist/{chunk-DWFUT45A.js.map → chunk-VEBNL5MG.js.map} +0 -0
  384. /package/dist/{chunk-LVXGCXKB.js.map → chunk-VMTOLAZ5.js.map} +0 -0
  385. /package/dist/{chunk-BRBQNPM2.js.map → chunk-VQSBZPKO.js.map} +0 -0
  386. /package/dist/{chunk-ZEVFMQAQ.js.map → chunk-VWVA74JY.js.map} +0 -0
  387. /package/dist/{chunk-YULI2EBC.js.map → chunk-XICRCPEQ.js.map} +0 -0
  388. /package/dist/{chunk-Q4WTVAJ5.js.map → chunk-XLCVMRSO.js.map} +0 -0
  389. /package/dist/{chunk-3DFWHF6O.js.map → chunk-YRF7WFAQ.js.map} +0 -0
  390. /package/dist/{chunk-ZIHSCBMN.js.map → chunk-Z5V5E3JW.js.map} +0 -0
  391. /package/dist/{chunk-G3JFESKD.js.map → chunk-Z5WUSI47.js.map} +0 -0
  392. /package/dist/{chunk-JPYNGWV4.js.map → chunk-ZOLUUX4B.js.map} +0 -0
@@ -33,22 +33,13 @@
33
33
  * dev-only warning about `children` that only the select branch could emit.
34
34
  */
35
35
  import FilledInput from '@mui/material/FilledInput/index.js';
36
- import FormControl from '@mui/material/FormControl/index.js';
37
- import FormHelperText from '@mui/material/FormHelperText/index.js';
38
36
  import StandardInput from '@mui/material/Input/index.js';
39
- import InputLabel from '@mui/material/InputLabel/index.js';
40
37
  import OutlinedInput from '@mui/material/OutlinedInput/index.js';
41
- import { styled } from '@mui/material/styles/index.js';
42
- import type { FilledInputProps } from '@mui/material/FilledInput/index.js';
43
- import type { FormControlProps } from '@mui/material/FormControl/index.js';
44
- import type { FormHelperTextProps } from '@mui/material/FormHelperText/index.js';
45
- import type { InputProps as MuiInputProps } from '@mui/material/Input/index.js';
46
- import type { InputBaseComponentProps } from '@mui/material/InputBase/index.js';
47
- import type { InputLabelProps } from '@mui/material/InputLabel/index.js';
48
- import type { OutlinedInputProps } from '@mui/material/OutlinedInput/index.js';
49
- import React from 'react';
50
38
 
51
- import { withDefaults } from '../../../utils/withDefaults';
39
+ import { createTextFieldSlim } from './text-field-slim.factory';
40
+ import type { TextFieldSlimComponent } from './text-field-slim.factory';
41
+
42
+ export type { TextFieldSlimProps } from './text-field-slim.factory';
52
43
 
53
44
  const VARIANT_COMPONENT = {
54
45
  standard: StandardInput,
@@ -57,201 +48,10 @@ const VARIANT_COMPONENT = {
57
48
  } as const;
58
49
 
59
50
  /**
60
- * `MuiTextField-root`, by hand.
61
- *
62
- * `@mui/material` does not re-export `textFieldClasses` from its root barrel,
63
- * and the deep path that does would import `TextField` — the whole thing this
64
- * file exists to avoid. So the class name is written out, and the parity test
65
- * asserts it against a REAL `TextField`'s root rather than against itself.
66
- *
67
- * It has to be there at all because it is part of MUI's public surface: two of
68
- * this package's own suites reach for `.closest('.MuiTextField-root')`, and a
69
- * consumer's stylesheet may too.
70
- */
71
- const TEXT_FIELD_ROOT_CLASS = 'MuiTextField-root';
72
-
73
- /**
74
- * Named `MuiTextField` so a theme's `components.MuiTextField.styleOverrides`
75
- * keeps applying. Nothing in this repo sets one today; a consumer's theme is
76
- * not this package's to break.
77
- */
78
- const TextFieldSlimRoot = styled(FormControl, {
79
- name: 'MuiTextField',
80
- slot: 'Root',
81
- overridesResolver: (_props, styles) => styles.root,
82
- })({});
83
-
84
- export interface TextFieldSlimProps
85
- extends Omit<FormControlProps, 'onChange' | 'onBlur' | 'onFocus' | 'defaultValue'> {
86
- autoComplete?: string;
87
- autoFocus?: boolean;
88
- defaultValue?: unknown;
89
- helperText?: React.ReactNode;
90
- label?: React.ReactNode;
91
- maxRows?: number | string;
92
- minRows?: number | string;
93
- multiline?: boolean;
94
- name?: string;
95
- placeholder?: string;
96
- rows?: number | string;
97
- type?: React.InputHTMLAttributes<HTMLInputElement>['type'];
98
- value?: unknown;
99
- inputRef?: React.Ref<unknown>;
100
- onBlur?: React.FocusEventHandler<HTMLInputElement | HTMLTextAreaElement>;
101
- onChange?: React.ChangeEventHandler<HTMLInputElement | HTMLTextAreaElement>;
102
- onFocus?: React.FocusEventHandler<HTMLInputElement | HTMLTextAreaElement>;
103
- /** Props for the rendered input variant. */
104
- InputProps?: Partial<MuiInputProps & FilledInputProps & OutlinedInputProps>;
105
- /**
106
- * Props for the `<input>` itself — where an `aria-label` has to ride.
107
- *
108
- * MUI's own type, because it is deliberately open: a caller puts `data-*`
109
- * and `aria-*` here precisely because the root would swallow them, and
110
- * `InputHTMLAttributes` alone rejects both.
111
- */
112
- inputProps?: InputBaseComponentProps;
113
- InputLabelProps?: Partial<InputLabelProps>;
114
- FormHelperTextProps?: Partial<FormHelperTextProps>;
115
- }
116
-
117
- /**
118
- * `TextField`'s own defaults, as a table.
119
- *
120
- * One `= default` per destructured prop is one branch per prop, and eight of
121
- * them put this component over the complexity bar before it rendered anything —
122
- * which is the same reason `AppHeader` keeps its defaults in a table. The values
123
- * are `TextField`'s, unchanged; the parity test would fail if any drifted.
124
- */
125
- const DEFAULTS: Partial<TextFieldSlimProps> = {
126
- autoFocus: false,
127
- color: 'primary',
128
- disabled: false,
129
- error: false,
130
- fullWidth: false,
131
- multiline: false,
132
- required: false,
133
- variant: 'outlined',
134
- };
135
-
136
- /** The two ids a labelled, described field needs, and the input's own. */
137
- function idsOf(props: TextFieldSlimProps, generated: string): {
138
- id: string;
139
- helperTextId: string | undefined;
140
- inputLabelId: string | undefined;
141
- } {
142
- const id = props.id ?? generated;
143
- return {
144
- id,
145
- helperTextId: props.helperText && id ? `${id}-helper-text` : undefined,
146
- inputLabelId: props.label && id ? `${id}-label` : undefined,
147
- };
148
- }
149
-
150
- /**
151
- * What only the OUTLINED variant needs: it draws its own notch around the
152
- * label, so it has to be told the label and whether the caller pinned it shrunk
153
- * (FUT-729's `shrink` case).
154
- */
155
- function outlinedPropsOf(props: TextFieldSlimProps): Record<string, unknown> {
156
- if (props.variant !== 'outlined') return {};
157
- const shrink = props.InputLabelProps?.shrink;
158
- return { label: props.label, ...(shrink === undefined ? {} : { notched: shrink }) };
159
- }
160
-
161
- interface FieldIds {
162
- id: string;
163
- helperTextId: string | undefined;
164
- inputLabelId: string | undefined;
165
- }
166
-
167
- /**
168
- * Everything the input (or this component) consumes by name.
169
- *
170
- * A key LIST rather than the omit-by-destructuring idiom, which would name
171
- * twenty-four bindings only to leave every one of them unused — twenty-four
172
- * lint warnings, in a package that allows none.
173
- *
174
- * `fullWidth`, `disabled`, `error`, `required`, `color` and `variant` are
175
- * deliberately absent: `TextField` hands those to the root, and `fullWidth` to
176
- * both.
177
- */
178
- const CONSUMED_BY_FIELD: ReadonlySet<string> = new Set([
179
- 'autoComplete', 'autoFocus', 'children', 'className', 'defaultValue',
180
- 'FormHelperTextProps', 'helperText', 'id', 'InputLabelProps', 'inputProps',
181
- 'InputProps', 'inputRef', 'label', 'maxRows', 'minRows', 'multiline', 'name',
182
- 'onBlur', 'onChange', 'onFocus', 'placeholder', 'rows', 'type', 'value',
183
- ]);
184
-
185
- /**
186
- * What the ROOT `FormControl` gets: the props `TextField` hands it by name,
187
- * plus everything it did not recognise.
188
- *
189
- * That second half is `TextField`'s behaviour and not a choice made here: an
190
- * unrecognised HTML attribute lands on the root `div`, which is why `Input` has
191
- * to route `aria-label` through `inputProps`. The parity test pins it.
51
+ * The generic field: any of MUI's three variants, chosen at runtime. A field
52
+ * that only ever renders outlined uses `./outlined` instead, which never
53
+ * imports the other two (FUT-1054).
192
54
  */
193
- function rootPropsOf(props: TextFieldSlimProps): Record<string, unknown> {
194
- return Object.fromEntries(
195
- Object.entries(props).filter(([key]) => !CONSUMED_BY_FIELD.has(key)),
196
- );
197
- }
198
-
199
- /** What the INPUT gets, by name, exactly as `TextField` names them. */
200
- function fieldPropsOf(props: TextFieldSlimProps, ids: FieldIds): Record<string, unknown> {
201
- return {
202
- 'aria-describedby': ids.helperTextId,
203
- autoComplete: props.autoComplete,
204
- autoFocus: props.autoFocus,
205
- defaultValue: props.defaultValue,
206
- fullWidth: props.fullWidth,
207
- multiline: props.multiline,
208
- name: props.name,
209
- rows: props.rows,
210
- maxRows: props.maxRows,
211
- minRows: props.minRows,
212
- type: props.type,
213
- value: props.value,
214
- id: ids.id,
215
- inputRef: props.inputRef,
216
- onBlur: props.onBlur,
217
- onChange: props.onChange,
218
- onFocus: props.onFocus,
219
- placeholder: props.placeholder,
220
- inputProps: props.inputProps,
221
- ...outlinedPropsOf(props),
222
- ...props.InputProps,
223
- };
224
- }
225
-
226
- export const TextFieldSlim = React.forwardRef<HTMLDivElement, TextFieldSlimProps>(
227
- function TextFieldSlim(rawProps, ref) {
228
- const props = withDefaults(rawProps, DEFAULTS);
229
- // `TextField` uses `@mui/utils`'s `useId`, which is React's with a fallback
230
- // for React 17. The peer here is React 19, so React's own is the same thing
231
- // without the dependency. The override still wins, exactly as it did — and
232
- // it is read from the RAW props, before `withDefaults` could supply one.
233
- const ids = idsOf(rawProps, React.useId());
234
- const InputComponent = VARIANT_COMPONENT[props.variant ?? 'outlined'];
235
- const { label, helperText } = props;
236
-
237
- return (
238
- <TextFieldSlimRoot
239
- className={[TEXT_FIELD_ROOT_CLASS, props.className].filter(Boolean).join(' ')}
240
- ref={ref}
241
- {...rootPropsOf(props)}
242
- >
243
- {label !== null && label !== undefined && label !== '' ? (
244
- <InputLabel htmlFor={ids.id} id={ids.inputLabelId} {...props.InputLabelProps}>
245
- {label}
246
- </InputLabel>
247
- ) : null}
248
- <InputComponent {...fieldPropsOf(props, ids)} />
249
- {helperText ? (
250
- <FormHelperText id={ids.helperTextId} {...props.FormHelperTextProps}>
251
- {helperText}
252
- </FormHelperText>
253
- ) : null}
254
- </TextFieldSlimRoot>
255
- );
256
- },
55
+ export const TextFieldSlim: TextFieldSlimComponent = createTextFieldSlim(
56
+ (variant) => VARIANT_COMPONENT[variant],
257
57
  );
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/Input/Input.tsx"],"sourcesContent":["import CircularProgress from '@mui/material/CircularProgress/index.js';\nimport InputAdornment from '@mui/material/InputAdornment/index.js';\nimport { styled, useTheme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { INPUT_LOADING } from './Input.metrics';\nimport { TextFieldSlim } from './text-field-slim';\n\nimport {\n filledStyles,\n floatingLabelStyles,\n glowStyles,\n inputBaseStyles,\n inputRadiusStyles,\n muiVariantFor,\n outlinedStyles,\n pulseStyles,\n SIZE_MAP,\n} from './Input.styles';\nimport type { InputProps } from './Input.types';\nimport { splitTestId } from '../../../platform/test-id';\nimport { fieldControlStyles } from '../../../tokens/field-height';\nimport { rem } from '../../../tokens/relative';\nimport type { SizeValue } from '../../../tokens/vocabulary';\n\n/**\n * `TextFieldSlim`, not `TextField` — see `text-field-slim.tsx`. MUI's own\n * `TextField` imports `Select` unconditionally, and through it `Menu`,\n * `Popover`, `Modal` and seven more component modules, so every screen with one\n * text box shipped a dropdown it can never render. Same composition, same DOM,\n * same prop routing; the select branch is the only thing missing.\n */\nconst StyledTextField = styled(TextFieldSlim, {\n shouldForwardProp: (prop) =>\n !['customVariant', 'fieldSize', 'floating', 'glow', 'pulse', 'loading'].includes(prop as string),\n})<{\n customVariant?: InputProps['variant'];\n fieldSize: SizeValue;\n floating?: boolean;\n glow?: boolean;\n pulse?: boolean;\n loading?: boolean;\n}>(({ theme, customVariant, fieldSize, floating, glow, pulse, loading }) => ({\n position: 'relative',\n // The theme's field height for this size (outlined family, one line).\n ...fieldControlStyles(theme, fieldSize),\n opacity: loading ? INPUT_LOADING.opacity : 1,\n\n ...(glow ? glowStyles(theme) : {}),\n ...(pulse ? pulseStyles(theme, fieldSize) : {}),\n ...(floating ? floatingLabelStyles(theme) : {}),\n\n '& .MuiInputBase-root': {\n transition: 'all 0.3s ease',\n ...inputRadiusStyles(theme, customVariant),\n ...inputBaseStyles(theme, customVariant),\n },\n\n '& .MuiOutlinedInput-root': outlinedStyles(theme),\n '& .MuiFilledInput-root': filledStyles(theme),\n}));\n\n/** Only one adornment shows at a time: the spinner replaces the caller's while loading. */\nconst EndAdornment: React.FC<{ loading: boolean; endAdornment?: React.ReactNode }> = ({\n loading,\n endAdornment,\n}) => {\n const theme = useTheme();\n if (loading) {\n return (\n <InputAdornment position=\"end\">\n <CircularProgress size={rem(theme, INPUT_LOADING.spinnerSize)} />\n </InputAdornment>\n );\n }\n\n if (!endAdornment) return null;\n\n return <InputAdornment position=\"end\">{endAdornment}</InputAdornment>;\n};\n\n/** While loading the field is inert: no clicks, and disabled to assistive tech. */\nconst interactionProps = (\n loading: boolean,\n onClick: InputProps['onClick'],\n disabled?: boolean,\n) => ({\n disabled: loading || disabled,\n onClick: loading ? undefined : onClick,\n});\n\n/**\n * The ARIA that describes the field has to sit on the `<input>`: the text\n * field puts every attribute it does not recognise on its root `FormControl`,\n * a `<div>` with no role, where a screen reader never reads it.\n *\n * `aria-label` has ridden `inputProps` since FUT-755. `aria-describedby` and\n * `aria-busy` fell through to the div until FUT-2619, so CepField's input\n * pointed at nothing while its lookup status lived in a live region beside it.\n *\n * `inputProps` are spread onto the `<input>` AFTER the `aria-describedby` MUI\n * writes for helper text, so a caller's ids REPLACE the helper text's: MUI's\n * `TextField` on its own keeps only one of the two. This joins both, helper\n * text first. The helper id is MUI's `<id>-helper-text` (the parity test pins\n * that spelling), which is why the field's id is fixed here rather than left\n * to the text field.\n */\nfunction inputAriaOf(a: {\n id: string;\n helperText: React.ReactNode;\n label?: string;\n describedBy?: string;\n busy?: InputProps['aria-busy'];\n}): Record<string, unknown> {\n const describedBy = [a.helperText ? `${a.id}-helper-text` : undefined, a.describedBy]\n .filter(Boolean)\n .join(' ');\n return {\n ...(a.label === undefined ? {} : { 'aria-label': a.label }),\n ...(a.describedBy === undefined ? {} : { 'aria-describedby': describedBy }),\n ...(a.busy === undefined ? {} : { 'aria-busy': a.busy }),\n };\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n variant = 'outlined',\n size = 'md',\n label,\n error,\n helperText,\n startAdornment,\n endAdornment,\n fullWidth = true,\n floating = false,\n glow = false,\n pulse = false,\n loading = false,\n onClick,\n onFocus,\n onBlur,\n 'aria-label': ariaLabel,\n 'aria-describedby': ariaDescribedBy,\n 'aria-busy': ariaBusy,\n inputProps,\n ...rest\n },\n ref,\n ) => {\n const { testId: dataTestId, rest: props } = splitTestId(rest);\n const generatedId = React.useId();\n const id = props.id ?? generatedId;\n return (\n <StyledTextField\n ref={ref}\n variant={muiVariantFor(variant)}\n customVariant={variant}\n fieldSize={size}\n floating={floating}\n glow={glow}\n pulse={pulse}\n loading={loading}\n label={label}\n error={error}\n helperText={helperText}\n fullWidth={fullWidth}\n {...interactionProps(loading, onClick, props.disabled)}\n onFocus={onFocus}\n onBlur={onBlur}\n /*\n * `aria-label` has to ride `inputProps` to reach the `<input>` (FUT-755).\n * Spread with the rest it lands on the FormControl DIV that the text\n * field renders as its root, which carries no role — so the field kept\n * no accessible name, and a source grep saying \"this input is labelled\"\n * disagreed with the DOM. The reports search box and the block-title\n * inputs were both named in source and anonymous to a screen reader.\n * `aria-describedby` and `aria-busy` are the same case: `inputAriaOf`.\n */\n inputProps={{\n 'data-testid': dataTestId,\n ...inputProps,\n ...inputAriaOf({ id, helperText, label: ariaLabel, describedBy: ariaDescribedBy, busy: ariaBusy }),\n }}\n InputProps={{\n startAdornment: startAdornment && (\n <InputAdornment position=\"start\">{startAdornment}</InputAdornment>\n ),\n endAdornment: <EndAdornment loading={loading} endAdornment={endAdornment} />,\n }}\n {...SIZE_MAP[size]}\n {...props}\n id={id}\n />\n );\n },\n);\n\nInput.displayName = 'Input';\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/feedback/ConfirmAction/ConfirmAction.parts.tsx"],"sourcesContent":["import type { ConfirmActionCopy } from \"../../../copy\";\nimport Alert from '@mui/material/Alert/index.js';\nimport Stack from '@mui/material/Stack/index.js';\nimport TextField from '@mui/material/TextField/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport React, { type ReactNode } from 'react';\n\nimport { AlertDialog } from '../../data-display/AlertDialog';\n\nimport type {\n ConfirmInitialFocus,\n ConfirmOptions,\n ConfirmTone,\n UseConfirmActionResult,\n} from './ConfirmAction.types';\n\nconst DEFAULT_TEST_ID = 'confirm-action';\n\n/**\n * The popup's body: the row being acted on, then what happens to it.\n *\n * The NAME is rendered in its own right rather than woven into the sentence, so\n * it is there whatever the caller wrote — \"the popup names the specific entity\"\n * is the one thing that must not depend on each call site remembering to\n * mention it. A body with neither a name nor a description would leave the\n * operator with only the title to decide on, so a neutral fallback covers that.\n */\nfunction confirmBody(\n description: ReactNode,\n copy: ConfirmActionCopy,\n entityName?: string,\n): ReactNode {\n if (!entityName) return description ?? copy.irreversible;\n return (\n <>\n <Typography component=\"span\" sx={{ fontWeight: 600, display: \"block\" }}>\n {entityName}\n </Typography>\n {description}\n </>\n );\n}\n\n/** Destructive dialogs open on Cancel; anything else opens on the confirm. */\nfunction resolveInitialFocus(\n tone: ConfirmTone,\n initialFocus?: ConfirmInitialFocus,\n): ConfirmInitialFocus {\n if (initialFocus) return initialFocus;\n return tone === 'destructive' ? 'cancel' : 'confirm';\n}\n\n/**\n * The type-to-confirm field. Rendered only when `typeToConfirm` is set, which\n * should be rare: it is the guard for actions with NO recovery path, where a\n * click is too cheap a gesture. Comparison is exact — trimmed of surrounding\n * whitespace only, so a trailing space from a paste does not read as a mismatch.\n */\nfunction TypeToConfirmField({\n expected,\n label,\n value,\n onChange,\n disabled,\n dataTestId,\n copy,\n}: {\n expected: string;\n label?: string;\n /** The words this prompt renders. REQUIRED — no default copy. */\n copy: ConfirmActionCopy;\n value: string;\n onChange: (next: string) => void;\n disabled: boolean;\n dataTestId: string;\n}): React.ReactElement {\n return (\n <Stack spacing={1} sx={{ mt: 2 }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {label ?? copy.typeToConfirm(expected)}\n </Typography>\n <TextField\n size=\"small\"\n value={value}\n disabled={disabled}\n onChange={(event) => onChange(event.target.value)}\n // On the INPUT rather than the wrapper: a test id on MUI's TextField\n // lands on the outer div, which is not the node a test can type into.\n inputProps={{\n 'aria-label': label ?? copy.typeToConfirm(expected),\n 'data-testid': `${dataTestId}-type-to-confirm`,\n }}\n />\n </Stack>\n );\n}\n\nexport interface ConfirmActionDialogProps extends ConfirmOptions {\n /** The fallback body when no entity is named. REQUIRED — no default copy. */\n copy: ConfirmActionCopy;\n state: UseConfirmActionResult;\n}\n\n/**\n * The popup itself: an `AlertDialog` in its destructive skin, plus the two\n * things a bare AlertDialog has no opinion about — the failure the last attempt\n * produced (shown IN the dialog, which stays open, rather than closing over a\n * write that never landed) and the optional type-to-confirm gate.\n */\nexport function ConfirmActionDialog({\n state,\n title,\n description,\n entityName,\n confirmText,\n cancelText,\n typeToConfirm,\n typeToConfirmLabel,\n tone = 'destructive',\n initialFocus,\n dataTestId = DEFAULT_TEST_ID,\n copy,\n}: ConfirmActionDialogProps): React.ReactElement {\n const [typed, setTyped] = React.useState('');\n\n // Every fresh open starts from an empty field: carrying the previous answer\n // over would hand the next delete a pre-satisfied gate.\n React.useEffect(() => {\n if (state.open) setTyped('');\n }, [state.open]);\n\n const gateUnmet = typeToConfirm !== undefined && typed.trim() !== typeToConfirm;\n\n return (\n <AlertDialog\n open={state.open}\n variant={tone === 'destructive' ? 'destructive' : 'default'}\n title={title}\n description={confirmBody(description, copy, entityName)}\n confirmText={confirmText}\n // `copy.cancel` is the fallback, NOT `AlertDialog`'s own. The 6.3.0 copy\n // sweep deleted this component's `cancelText = 'Cancelar'` default and\n // put the word in `ConfirmActionCopy` — where nothing then read it, so\n // every confirmation that names no `cancelText` of its own fell through\n // to `AlertDialog`'s English `'Cancel'`, in a pt-BR dialog. That is the\n // precise failure the sweep exists to prevent, one layer down: a port\n // that is required, supplied, and ignored.\n cancelText={cancelText ?? copy.cancel}\n loading={state.pending}\n confirmDisabled={gateUnmet}\n initialFocus={resolveInitialFocus(tone, initialFocus)}\n onConfirm={state.confirm}\n onCancel={state.cancel}\n onClose={state.cancel}\n data-testid={dataTestId}\n >\n {state.error && (\n <Alert severity=\"error\" sx={{ mt: 1 }} data-testid={`${dataTestId}-error`}>\n {state.error}\n </Alert>\n )}\n {typeToConfirm !== undefined && (\n <TypeToConfirmField\n expected={typeToConfirm}\n label={typeToConfirmLabel}\n value={typed}\n onChange={setTyped}\n disabled={state.pending}\n dataTestId={dataTestId}\n copy={copy}\n />\n )}\n </AlertDialog>\n );\n}\n"],"mappings":";;;;;AACA,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,eAAe;AACtB,OAAO,gBAAgB;AACvB,OAAO,WAA+B;AA6BlC,mBACE,KADF;AAlBJ,IAAM,kBAAkB;AAWxB,SAAS,YACP,aACA,MACA,YACW;AACX,MAAI,CAAC,WAAY,QAAO,eAAe,KAAK;AAC5C,SACE,iCACE;AAAA,wBAAC,cAAW,WAAU,QAAO,IAAI,EAAE,YAAY,KAAK,SAAS,QAAQ,GAClE,sBACH;AAAA,IACC;AAAA,KACH;AAEJ;AAGA,SAAS,oBACP,MACA,cACqB;AACrB,MAAI,aAAc,QAAO;AACzB,SAAO,SAAS,gBAAgB,WAAW;AAC7C;AAQA,SAAS,mBAAmB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GASuB;AACrB,SACE,qBAAC,SAAM,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,GAC7B;AAAA,wBAAC,cAAW,SAAQ,SAAQ,OAAM,kBAC/B,mBAAS,KAAK,cAAc,QAAQ,GACvC;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,KAAK;AAAA,QAGhD,YAAY;AAAA,UACV,cAAc,SAAS,KAAK,cAAc,QAAQ;AAAA,UAClD,eAAe,GAAG,UAAU;AAAA,QAC9B;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;AAcO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA,aAAa;AAAA,EACb;AACF,GAAiD;AAC/C,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,SAAS,EAAE;AAI3C,QAAM,UAAU,MAAM;AACpB,QAAI,MAAM,KAAM,UAAS,EAAE;AAAA,EAC7B,GAAG,CAAC,MAAM,IAAI,CAAC;AAEf,QAAM,YAAY,kBAAkB,UAAa,MAAM,KAAK,MAAM;AAElE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,MAAM;AAAA,MACZ,SAAS,SAAS,gBAAgB,gBAAgB;AAAA,MAClD;AAAA,MACA,aAAa,YAAY,aAAa,MAAM,UAAU;AAAA,MACtD;AAAA,MAQA,YAAY,cAAc,KAAK;AAAA,MAC/B,SAAS,MAAM;AAAA,MACf,iBAAiB;AAAA,MACjB,cAAc,oBAAoB,MAAM,YAAY;AAAA,MACpD,WAAW,MAAM;AAAA,MACjB,UAAU,MAAM;AAAA,MAChB,SAAS,MAAM;AAAA,MACf,eAAa;AAAA,MAEZ;AAAA,cAAM,SACL,oBAAC,SAAM,UAAS,SAAQ,IAAI,EAAE,IAAI,EAAE,GAAG,eAAa,GAAG,UAAU,UAC9D,gBAAM,OACT;AAAA,QAED,kBAAkB,UACjB;AAAA,UAAC;AAAA;AAAA,YACC,UAAU;AAAA,YACV,OAAO;AAAA,YACP,OAAO;AAAA,YACP,UAAU;AAAA,YACV,UAAU,MAAM;AAAA,YAChB;AAAA,YACA;AAAA;AAAA,QACF;AAAA;AAAA;AAAA,EAEJ;AAEJ;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/CepField/CepField.tsx"],"sourcesContent":["'use client';\n\nimport type { CepFieldCopy } from \"../../../copy\";\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { cepDigits, formatCep, isValidCep } from '@12-apps/forms-core';\n\nimport { FormControl, FormLabel, FormMessage } from '../Form';\nimport { Input } from '../Input';\nimport type { CepAddress, CepFieldProps, CepLookupStatus } from './CepField.types';\n\n/** Everything {@link useCepLookup} needs, so the hook signature stays flat. */\ninterface LookupOptions {\n digits: string;\n complete: boolean;\n disabled: boolean;\n debounceMs: number;\n onLookup?: (cep: string) => Promise<CepAddress | null>;\n onResolved?: (address: CepAddress) => void;\n onNotFound?: () => void;\n}\n\n/**\n * Debounced, race-safe CEP resolution.\n *\n * Two guards earn their keep here: a monotonic sequence id, bumped\n * synchronously on every new query, so a slow response for a since-edited CEP\n * can never land; and a \"last queried\" marker, so re-rendering (or the caller\n * re-masking the same value) never re-hits the provider.\n */\nfunction useCepLookup({\n digits,\n complete,\n disabled,\n debounceMs,\n onLookup,\n onResolved,\n onNotFound,\n}: LookupOptions): CepLookupStatus {\n const [status, setStatus] = useState<CepLookupStatus>('idle');\n const lastQueriedRef = useRef('');\n const seqRef = useRef(0);\n // Latest callbacks, read at call time — keeps them out of the effect deps so\n // an inline arrow from the caller doesn't re-trigger the lookup every render.\n const lookupRef = useRef(onLookup);\n const resolvedRef = useRef(onResolved);\n const notFoundRef = useRef(onNotFound);\n lookupRef.current = onLookup;\n resolvedRef.current = onResolved;\n notFoundRef.current = onNotFound;\n\n useEffect(() => {\n if (!complete || disabled || !lookupRef.current) {\n // Editing away from a complete CEP drops any stale status and forgets the\n // last query, so re-typing the same CEP resolves again.\n seqRef.current += 1;\n setStatus('idle');\n lastQueriedRef.current = '';\n return;\n }\n if (lastQueriedRef.current === digits) return;\n\n const mySeq = (seqRef.current += 1);\n const handle = setTimeout(() => {\n lastQueriedRef.current = digits;\n setStatus('loading');\n void (async () => {\n // A failing lookup is treated exactly like \"not found\" — the user types\n // the address instead. Never surfaced as a crash. Going through\n // `Promise.resolve().then` rather than calling directly covers the two\n // failure modes an `await … .catch()` misses: a lookup that throws\n // SYNCHRONOUSLY, and one that returns something other than a promise.\n const address = await Promise.resolve()\n .then(() => lookupRef.current?.(digits))\n .catch(() => null);\n if (seqRef.current !== mySeq) return;\n setStatus(address ? 'found' : 'notfound');\n // A miss is reported too, so a caller that filled from a PREVIOUS CEP\n // can undo it rather than leaving that address under this CEP.\n if (address) resolvedRef.current?.(address);\n else notFoundRef.current?.();\n })();\n }, debounceMs);\n\n return () => clearTimeout(handle);\n }, [digits, complete, disabled, debounceMs]);\n\n return status;\n}\n\n/**\n * The lookup outcome as a live region, so screen readers announce it without\n * stealing focus. Silent while idle, and while the caller is showing its own\n * validation error (which would otherwise stack two messages).\n */\nfunction CepStatus({\n status,\n testId,\n suppressed,\n copy,\n}: {\n status: CepLookupStatus;\n testId: string;\n suppressed: boolean;\n copy: CepFieldCopy;\n}): React.ReactElement {\n const visible = !suppressed && status !== 'idle';\n return (\n <span id={`${testId}-status`} role=\"status\" aria-live=\"polite\">\n {visible && (\n <FormMessage error={status === 'notfound'} dataTestId={`${testId}-${status}`}>\n {copy[status as Exclude<CepLookupStatus, 'idle'>]}\n </FormMessage>\n )}\n </span>\n );\n}\n\n/**\n * A CEP input that fills the rest of the address in.\n *\n * The pattern every Brazilian form has used for twenty years: type eight\n * digits, and logradouro/bairro/cidade/UF arrive on their own. This is the\n * reusable half — masking, validation, debouncing, race-safety and status —\n * with the actual lookup injected via `onLookup`, so the same component serves\n * a supplier form, a store-location form or a delivery checkout without\n * knowing anything about providers or auth.\n *\n * Resolution is best-effort by design. A provider outage, an unknown CEP or a\n * timeout leaves the field exactly as usable as a plain text input — the user\n * types the address themselves. Autofill never blocks.\n *\n * @example\n * ```tsx\n * <CepField\n * value={cep}\n * onChange={setCep}\n * onLookup={(c) => fetch(`/api/…/lookup/cep/${c}`).then((r) => r.json()).then((b) => b.data)}\n * onResolved={(a) => { setStreet(a.street ?? ''); setCity(a.city ?? ''); }}\n * />\n * ```\n */\nexport function CepField({\n value,\n onChange,\n onLookup,\n onResolved,\n onNotFound,\n label = 'CEP',\n placeholder = '00000-000',\n error,\n disabled = false,\n debounceMs = 500,\n name = 'postalCode',\n dataTestId,\n copy,\n}: CepFieldProps): React.ReactElement {\n const testId = dataTestId ?? `cep-field-${name}`;\n\n const status = useCepLookup({\n digits: cepDigits(value),\n complete: isValidCep(value),\n disabled,\n debounceMs,\n onLookup,\n onResolved,\n onNotFound,\n });\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => onChange(formatCep(event.target.value)),\n [onChange],\n );\n\n return (\n <FormControl fullWidth>\n {label && (\n <FormLabel htmlFor={name} error={Boolean(error)}>\n {label}\n </FormLabel>\n )}\n <Input\n id={name}\n name={name}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete=\"postal-code\"\n placeholder={placeholder}\n value={value}\n error={Boolean(error)}\n disabled={disabled}\n loading={status === 'loading'}\n onChange={handleChange}\n data-testid={testId}\n aria-describedby={`${testId}-status`}\n aria-busy={status === 'loading'}\n />\n {error && (\n <FormMessage error dataTestId={`${testId}-message`}>\n {error}\n </FormMessage>\n )}\n <CepStatus status={status} testId={testId} suppressed={Boolean(error)} copy={copy} />\n </FormControl>\n );\n}\n\nexport default CepField;\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/Input/text-field-slim.tsx"],"sourcesContent":["'use client';\n\n/**\n * `TextField`, minus the branch nobody in a text field takes.\n *\n * MUI's `TextField` is a small composition — a `FormControl` root, an optional\n * `InputLabel`, one of the three input variants, an optional `FormHelperText` —\n * around one branch: `select`. That branch is worth a fortune. `TextField`\n * imports `Select` unconditionally, and `Select` reaches `Menu`, `MenuList`,\n * `Popover`, `NativeSelect`, `List`, `Modal`, `Paper`, `Portal` and `Grow`. Every\n * one of those ships to anyone who renders one text box.\n *\n * Measured in one adopter's storefront, whose header search box is the eager\n * caller: taking that ONE box off `TextField` is worth 35.8 KiB raw and 13\n * fewer `@mui/material` component modules on the critical path — more than any\n * other single item in that bundle.\n *\n * `Input` has never supported `select`: its props are `InputHTMLAttributes`, so\n * no caller can even pass one. The branch was pure cost.\n *\n * ## This is a TRANSCRIPTION, not a redesign\n *\n * Every routing decision below is `TextField`'s, deliberately, down to which\n * props land on the ROOT rather than on the input — including the one that is\n * arguably wrong (an unrecognised HTML attribute goes to the root `div`, which\n * is why `Input` has to route `aria-label` through `inputProps`). Changing any\n * of that here would be a behaviour change wearing a performance change's\n * clothes. `__tests__/text-field-slim.test.tsx` renders this and the real\n * `TextField` side by side and compares the DOM they produce.\n *\n * What is NOT carried over: the `select` branch, the `slots`/`slotProps` API\n * (unreachable through `InputProps`, which is `InputHTMLAttributes`), and the\n * dev-only warning about `children` that only the select branch could emit.\n */\nimport FilledInput from '@mui/material/FilledInput/index.js';\nimport FormControl from '@mui/material/FormControl/index.js';\nimport FormHelperText from '@mui/material/FormHelperText/index.js';\nimport StandardInput from '@mui/material/Input/index.js';\nimport InputLabel from '@mui/material/InputLabel/index.js';\nimport OutlinedInput from '@mui/material/OutlinedInput/index.js';\nimport { styled } from '@mui/material/styles/index.js';\nimport type { FilledInputProps } from '@mui/material/FilledInput/index.js';\nimport type { FormControlProps } from '@mui/material/FormControl/index.js';\nimport type { FormHelperTextProps } from '@mui/material/FormHelperText/index.js';\nimport type { InputProps as MuiInputProps } from '@mui/material/Input/index.js';\nimport type { InputBaseComponentProps } from '@mui/material/InputBase/index.js';\nimport type { InputLabelProps } from '@mui/material/InputLabel/index.js';\nimport type { OutlinedInputProps } from '@mui/material/OutlinedInput/index.js';\nimport React from 'react';\n\nimport { withDefaults } from '../../../utils/withDefaults';\n\nconst VARIANT_COMPONENT = {\n standard: StandardInput,\n filled: FilledInput,\n outlined: OutlinedInput,\n} as const;\n\n/**\n * `MuiTextField-root`, by hand.\n *\n * `@mui/material` does not re-export `textFieldClasses` from its root barrel,\n * and the deep path that does would import `TextField` — the whole thing this\n * file exists to avoid. So the class name is written out, and the parity test\n * asserts it against a REAL `TextField`'s root rather than against itself.\n *\n * It has to be there at all because it is part of MUI's public surface: two of\n * this package's own suites reach for `.closest('.MuiTextField-root')`, and a\n * consumer's stylesheet may too.\n */\nconst TEXT_FIELD_ROOT_CLASS = 'MuiTextField-root';\n\n/**\n * Named `MuiTextField` so a theme's `components.MuiTextField.styleOverrides`\n * keeps applying. Nothing in this repo sets one today; a consumer's theme is\n * not this package's to break.\n */\nconst TextFieldSlimRoot = styled(FormControl, {\n name: 'MuiTextField',\n slot: 'Root',\n overridesResolver: (_props, styles) => styles.root,\n})({});\n\nexport interface TextFieldSlimProps\n extends Omit<FormControlProps, 'onChange' | 'onBlur' | 'onFocus' | 'defaultValue'> {\n autoComplete?: string;\n autoFocus?: boolean;\n defaultValue?: unknown;\n helperText?: React.ReactNode;\n label?: React.ReactNode;\n maxRows?: number | string;\n minRows?: number | string;\n multiline?: boolean;\n name?: string;\n placeholder?: string;\n rows?: number | string;\n type?: React.InputHTMLAttributes<HTMLInputElement>['type'];\n value?: unknown;\n inputRef?: React.Ref<unknown>;\n onBlur?: React.FocusEventHandler<HTMLInputElement | HTMLTextAreaElement>;\n onChange?: React.ChangeEventHandler<HTMLInputElement | HTMLTextAreaElement>;\n onFocus?: React.FocusEventHandler<HTMLInputElement | HTMLTextAreaElement>;\n /** Props for the rendered input variant. */\n InputProps?: Partial<MuiInputProps & FilledInputProps & OutlinedInputProps>;\n /**\n * Props for the `<input>` itself — where an `aria-label` has to ride.\n *\n * MUI's own type, because it is deliberately open: a caller puts `data-*`\n * and `aria-*` here precisely because the root would swallow them, and\n * `InputHTMLAttributes` alone rejects both.\n */\n inputProps?: InputBaseComponentProps;\n InputLabelProps?: Partial<InputLabelProps>;\n FormHelperTextProps?: Partial<FormHelperTextProps>;\n}\n\n/**\n * `TextField`'s own defaults, as a table.\n *\n * One `= default` per destructured prop is one branch per prop, and eight of\n * them put this component over the complexity bar before it rendered anything —\n * which is the same reason `AppHeader` keeps its defaults in a table. The values\n * are `TextField`'s, unchanged; the parity test would fail if any drifted.\n */\nconst DEFAULTS: Partial<TextFieldSlimProps> = {\n autoFocus: false,\n color: 'primary',\n disabled: false,\n error: false,\n fullWidth: false,\n multiline: false,\n required: false,\n variant: 'outlined',\n};\n\n/** The two ids a labelled, described field needs, and the input's own. */\nfunction idsOf(props: TextFieldSlimProps, generated: string): {\n id: string;\n helperTextId: string | undefined;\n inputLabelId: string | undefined;\n} {\n const id = props.id ?? generated;\n return {\n id,\n helperTextId: props.helperText && id ? `${id}-helper-text` : undefined,\n inputLabelId: props.label && id ? `${id}-label` : undefined,\n };\n}\n\n/**\n * What only the OUTLINED variant needs: it draws its own notch around the\n * label, so it has to be told the label and whether the caller pinned it shrunk\n * (FUT-729's `shrink` case).\n */\nfunction outlinedPropsOf(props: TextFieldSlimProps): Record<string, unknown> {\n if (props.variant !== 'outlined') return {};\n const shrink = props.InputLabelProps?.shrink;\n return { label: props.label, ...(shrink === undefined ? {} : { notched: shrink }) };\n}\n\ninterface FieldIds {\n id: string;\n helperTextId: string | undefined;\n inputLabelId: string | undefined;\n}\n\n/**\n * Everything the input (or this component) consumes by name.\n *\n * A key LIST rather than the omit-by-destructuring idiom, which would name\n * twenty-four bindings only to leave every one of them unused — twenty-four\n * lint warnings, in a package that allows none.\n *\n * `fullWidth`, `disabled`, `error`, `required`, `color` and `variant` are\n * deliberately absent: `TextField` hands those to the root, and `fullWidth` to\n * both.\n */\nconst CONSUMED_BY_FIELD: ReadonlySet<string> = new Set([\n 'autoComplete', 'autoFocus', 'children', 'className', 'defaultValue',\n 'FormHelperTextProps', 'helperText', 'id', 'InputLabelProps', 'inputProps',\n 'InputProps', 'inputRef', 'label', 'maxRows', 'minRows', 'multiline', 'name',\n 'onBlur', 'onChange', 'onFocus', 'placeholder', 'rows', 'type', 'value',\n]);\n\n/**\n * What the ROOT `FormControl` gets: the props `TextField` hands it by name,\n * plus everything it did not recognise.\n *\n * That second half is `TextField`'s behaviour and not a choice made here: an\n * unrecognised HTML attribute lands on the root `div`, which is why `Input` has\n * to route `aria-label` through `inputProps`. The parity test pins it.\n */\nfunction rootPropsOf(props: TextFieldSlimProps): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(props).filter(([key]) => !CONSUMED_BY_FIELD.has(key)),\n );\n}\n\n/** What the INPUT gets, by name, exactly as `TextField` names them. */\nfunction fieldPropsOf(props: TextFieldSlimProps, ids: FieldIds): Record<string, unknown> {\n return {\n 'aria-describedby': ids.helperTextId,\n autoComplete: props.autoComplete,\n autoFocus: props.autoFocus,\n defaultValue: props.defaultValue,\n fullWidth: props.fullWidth,\n multiline: props.multiline,\n name: props.name,\n rows: props.rows,\n maxRows: props.maxRows,\n minRows: props.minRows,\n type: props.type,\n value: props.value,\n id: ids.id,\n inputRef: props.inputRef,\n onBlur: props.onBlur,\n onChange: props.onChange,\n onFocus: props.onFocus,\n placeholder: props.placeholder,\n inputProps: props.inputProps,\n ...outlinedPropsOf(props),\n ...props.InputProps,\n };\n}\n\nexport const TextFieldSlim = React.forwardRef<HTMLDivElement, TextFieldSlimProps>(\n function TextFieldSlim(rawProps, ref) {\n const props = withDefaults(rawProps, DEFAULTS);\n // `TextField` uses `@mui/utils`'s `useId`, which is React's with a fallback\n // for React 17. The peer here is React 19, so React's own is the same thing\n // without the dependency. The override still wins, exactly as it did — and\n // it is read from the RAW props, before `withDefaults` could supply one.\n const ids = idsOf(rawProps, React.useId());\n const InputComponent = VARIANT_COMPONENT[props.variant ?? 'outlined'];\n const { label, helperText } = props;\n\n return (\n <TextFieldSlimRoot\n className={[TEXT_FIELD_ROOT_CLASS, props.className].filter(Boolean).join(' ')}\n ref={ref}\n {...rootPropsOf(props)}\n >\n {label !== null && label !== undefined && label !== '' ? (\n <InputLabel htmlFor={ids.id} id={ids.inputLabelId} {...props.InputLabelProps}>\n {label}\n </InputLabel>\n ) : null}\n <InputComponent {...fieldPropsOf(props, ids)} />\n {helperText ? (\n <FormHelperText id={ids.helperTextId} {...props.FormHelperTextProps}>\n {helperText}\n </FormHelperText>\n ) : null}\n </TextFieldSlimRoot>\n );\n },\n);\n"],"mappings":"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","names":["TextFieldSlim"]}