@12-apps/ui 6.49.1 → 6.49.3

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 (432) hide show
  1. package/NATIVE.md +1 -1
  2. package/dist/_internal/components/data-display/AsyncStateContainer/AsyncStateContainer.js +3 -3
  3. package/dist/_internal/components/data-display/Avatar/Avatar.js +2 -2
  4. package/dist/_internal/components/data-display/Badge/Badge.js +2 -2
  5. package/dist/_internal/components/data-display/Badge/Badge.styles.js +2 -2
  6. package/dist/_internal/components/data-display/Badge/BadgeContent.js +2 -2
  7. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +5 -5
  8. package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +5 -5
  9. package/dist/_internal/components/data-display/Carousel/Carousel.chrome.js +2 -2
  10. package/dist/_internal/components/data-display/Carousel/Carousel.js +5 -5
  11. package/dist/_internal/components/data-display/Carousel/Carousel.parts.js +2 -2
  12. package/dist/_internal/components/data-display/Carousel/Carousel.styles.js +2 -2
  13. package/dist/_internal/components/data-display/Chart/Chart.js +6 -6
  14. package/dist/_internal/components/data-display/Chart/SpecChart.js +7 -7
  15. package/dist/_internal/components/data-display/Chart/chart-context.js +4 -4
  16. package/dist/_internal/components/data-display/Chart/chart-internals.js +2 -2
  17. package/dist/_internal/components/data-display/Chart/chart-renderers.js +5 -5
  18. package/dist/_internal/components/data-display/Chip/Chip.js +3 -3
  19. package/dist/_internal/components/data-display/Chip/Chip.styles.js +2 -2
  20. package/dist/_internal/components/data-display/DataGrid/DataGrid.js +5 -5
  21. package/dist/_internal/components/data-display/DataGrid/DataGrid.model.js +3 -3
  22. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +39 -39
  23. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +58 -58
  24. package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +3 -3
  25. package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +7 -7
  26. package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +9 -9
  27. package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +7 -7
  28. package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +6 -6
  29. package/dist/_internal/components/data-display/DataViews/base-list-card.js +8 -8
  30. package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +7 -7
  31. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +6 -6
  32. package/dist/_internal/components/data-display/DataViews/data-views-display-tabs.js +4 -4
  33. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +12 -12
  34. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +10 -10
  35. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +38 -38
  36. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +13 -13
  37. package/dist/_internal/components/data-display/DataViews/data-views-layout-context.js +3 -3
  38. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +10 -10
  39. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +11 -11
  40. package/dist/_internal/components/data-display/DataViews/data-views-pagination.js +3 -3
  41. package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +2 -2
  42. package/dist/_internal/components/data-display/DataViews/data-views-scope-tabs.js +4 -4
  43. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +8 -8
  44. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +15 -15
  45. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +7 -7
  46. package/dist/_internal/components/data-display/DataViews/list-card-rails.js +5 -5
  47. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +1 -1
  48. package/dist/_internal/components/data-display/DataViews/use-saved-views-controller.js +2 -2
  49. package/dist/_internal/components/data-display/EmptyState/EmptyState.js +2 -2
  50. package/dist/_internal/components/data-display/FleetMap/FleetBody.js +5 -5
  51. package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +4 -4
  52. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +11 -11
  53. package/dist/_internal/components/data-display/HoverCard/HoverCard.js +1 -1
  54. package/dist/_internal/components/data-display/InteractiveTooltip/InteractiveTooltip.js +2 -2
  55. package/dist/_internal/components/data-display/Lightbox/Lightbox.js +5 -5
  56. package/dist/_internal/components/data-display/Lightbox/LightboxControls.js +2 -2
  57. package/dist/_internal/components/data-display/Lightbox/LightboxOverlay.js +3 -3
  58. package/dist/_internal/components/data-display/Lightbox/LightboxThumbnails.js +2 -2
  59. package/dist/_internal/components/data-display/MapPreview/MapLayers.js +2 -2
  60. package/dist/_internal/components/data-display/MapPreview/MapPreview.js +3 -3
  61. package/dist/_internal/components/data-display/SectionOnboarding/SectionOnboarding.js +3 -3
  62. package/dist/_internal/components/data-display/Sheet/Sheet.body.js +2 -2
  63. package/dist/_internal/components/data-display/Sheet/Sheet.js +2 -2
  64. package/dist/_internal/components/data-display/Sheet/Sheet.styles.js +2 -2
  65. package/dist/_internal/components/data-display/Table/Table.js +4 -4
  66. package/dist/_internal/components/data-display/index.js +39 -39
  67. package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.js +2 -2
  68. package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +3 -3
  69. package/dist/_internal/components/feedback/ConfirmAction/with-confirmation.js +2 -2
  70. package/dist/_internal/components/feedback/Dialog/Dialog.js +2 -2
  71. package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +2 -2
  72. package/dist/_internal/components/feedback/StackedModal/StackedModal.js +2 -2
  73. package/dist/_internal/components/feedback/TutorialOverlay/TutorialOverlay.js +2 -2
  74. package/dist/_internal/components/feedback/index.js +15 -15
  75. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +1 -1
  76. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +1 -1
  77. package/dist/_internal/components/form/Autocomplete/Autocomplete.js +2 -2
  78. package/dist/_internal/components/form/Calendar/Calendar.js +4 -4
  79. package/dist/_internal/components/form/Calendar/CalendarDayCell.js +2 -2
  80. package/dist/_internal/components/form/Calendar/CalendarMonth.js +3 -3
  81. package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +3 -3
  82. package/dist/_internal/components/form/CategorySelect/CategorySelect.js +6 -6
  83. package/dist/_internal/components/form/CepField/CepField.js +3 -3
  84. package/dist/_internal/components/form/CodeEditor/CodeEditor.js +2 -2
  85. package/dist/_internal/components/form/Command/Command.js +2 -2
  86. package/dist/_internal/components/form/Command/Command.styles.js +2 -2
  87. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +6 -6
  88. package/dist/_internal/components/form/Input/Input.js +2 -2
  89. package/dist/_internal/components/form/Label/Label.js +2 -2
  90. package/dist/_internal/components/form/Label/Label.styles.js +2 -2
  91. package/dist/_internal/components/form/Menubar/Menubar.item.js +2 -2
  92. package/dist/_internal/components/form/Menubar/Menubar.js +4 -4
  93. package/dist/_internal/components/form/Menubar/Menubar.styles.js +2 -2
  94. package/dist/_internal/components/form/Menubar/Menubar.toolbar.js +2 -2
  95. package/dist/_internal/components/form/NumberField/NumberField.js +3 -3
  96. package/dist/_internal/components/form/RichTextEditor/RichTextEditor.js +2 -2
  97. package/dist/_internal/components/form/Select/Select.js +5 -1
  98. package/dist/_internal/components/form/Select/Select.menu.js +25 -0
  99. package/dist/_internal/components/form/Select/Select.menu.js.map +1 -0
  100. package/dist/_internal/components/form/Switch/Switch.js +4 -4
  101. package/dist/_internal/components/form/Switch/Switch.parts.js +3 -3
  102. package/dist/_internal/components/form/Switch/Switch.styles.js +2 -2
  103. package/dist/_internal/components/form/index.js +44 -40
  104. package/dist/_internal/components/form/total-form/Fields/CategoryField.js +7 -7
  105. package/dist/_internal/components/form/total-form/Fields/CepField.js +4 -4
  106. package/dist/_internal/components/form/total-form/Fields/SelectField.js +3 -2
  107. package/dist/_internal/components/form/total-form/Fields/TextField.js +3 -3
  108. package/dist/_internal/components/form/total-form/Fields/index.js +18 -17
  109. package/dist/_internal/components/index.js +136 -132
  110. package/dist/_internal/components/layout/Box/Box.js +5 -5
  111. package/dist/_internal/components/layout/SettingCard/SettingCard.js +11 -11
  112. package/dist/_internal/components/layout/SettingCard/SettingCard.parts.js +10 -10
  113. package/dist/_internal/components/layout/SettingCard/SettingGrid.js +11 -11
  114. package/dist/_internal/components/layout/SettingCard/SettingGroup.js +17 -17
  115. package/dist/_internal/components/layout/SettingCard/SettingSwitch.js +15 -15
  116. package/dist/_internal/components/layout/SettingCard/SettingToggle.js +17 -17
  117. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +4 -4
  118. package/dist/_internal/components/layout/SettingsLayout/SettingsPanel.js +3 -3
  119. package/dist/_internal/components/layout/SettingsLayout/SettingsSectionChips.js +2 -2
  120. package/dist/_internal/components/layout/Stack/Stack.js +6 -6
  121. package/dist/_internal/components/layout/index.js +28 -28
  122. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +5 -5
  123. package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +2 -2
  124. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.js +2 -2
  125. package/dist/_internal/components/navigation/Pagination/Pagination.js +2 -2
  126. package/dist/_internal/components/navigation/SectionNav/SectionNav.bar.js +2 -2
  127. package/dist/_internal/components/navigation/SectionNav/SectionNav.js +2 -2
  128. package/dist/_internal/components/navigation/SectionNav/SectionNav.parts.js +2 -2
  129. package/dist/_internal/components/navigation/SectionNav/SectionNav.primary.js +2 -2
  130. package/dist/_internal/components/navigation/SectionNav/SectionNav.rail.js +2 -2
  131. package/dist/_internal/components/navigation/SectionNav/SectionNav.sheet.js +2 -2
  132. package/dist/_internal/components/navigation/SectionNav/__stories__/fixtures.js +2 -2
  133. package/dist/_internal/components/navigation/index.js +20 -20
  134. package/dist/_internal/components/typography/index.js +4 -4
  135. package/dist/_internal/components/utility/InstallPrompt/InstallPrompt.js +3 -3
  136. package/dist/_internal/components/utility/InstallPrompt/usePwaInstall.js +2 -2
  137. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.helpers.js +2 -2
  138. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.js +2 -2
  139. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.parts.js +2 -2
  140. package/dist/_internal/components/utility/WorkflowStep/WorkflowStepRow.js +2 -2
  141. package/dist/_internal/components/utility/index.js +5 -5
  142. package/dist/_internal/icons/Icon.js +6 -6
  143. package/dist/_internal/provider/UiProvider.js +4 -4
  144. package/dist/_internal/provider/mui-bridge.js +3 -3
  145. package/dist/_internal/provider/use-ui-theme.js +4 -4
  146. package/dist/_internal/tokens/density-overrides.js +4 -4
  147. package/dist/_internal/tokens/density.js +2 -2
  148. package/dist/_internal/user-avatar/user-avatar.js +3 -3
  149. package/dist/charts.js +7 -7
  150. package/dist/{chunk-HI3VE276.js → chunk-25ALEQUH.js} +2 -2
  151. package/dist/{chunk-NF4GHTZ4.js → chunk-2AZZRWT6.js} +2 -2
  152. package/dist/{chunk-RYWX6LK4.js → chunk-3ASNSGIY.js} +2 -2
  153. package/dist/{chunk-2UPWKLHQ.js → chunk-3WWI75NM.js} +5 -5
  154. package/dist/{chunk-4CHYMTBT.js → chunk-4WCDMCIS.js} +4 -4
  155. package/dist/{chunk-S2GDYA6R.js → chunk-5GMHJ7Y5.js} +5 -5
  156. package/dist/{chunk-JSGVYOMN.js → chunk-5MW7OYBM.js} +2 -2
  157. package/dist/{chunk-Z4DKVLYG.js → chunk-5QDBSQP5.js} +5 -5
  158. package/dist/{chunk-SDKOOVEX.js → chunk-6GAZAJXB.js} +4 -4
  159. package/dist/{chunk-UD3WDCWD.js → chunk-6KFEDJOR.js} +4 -4
  160. package/dist/{chunk-77BKKPCI.js → chunk-6KLDYVRY.js} +2 -2
  161. package/dist/{chunk-66XTP3IT.js → chunk-6KOR5VOT.js} +7 -7
  162. package/dist/{chunk-F3AYISXT.js → chunk-6PU3JYVY.js} +4 -4
  163. package/dist/{chunk-TMW7RBW7.js → chunk-7DSYQCRE.js} +2 -2
  164. package/dist/{chunk-WMYLF7I2.js → chunk-7XKK2WOV.js} +2 -2
  165. package/dist/{chunk-ADSA76T7.js → chunk-AG3DY5TH.js} +2 -2
  166. package/dist/{chunk-WICZ3ZN2.js → chunk-AG4MGJPQ.js} +4 -4
  167. package/dist/{chunk-FRAW3ICP.js → chunk-ANVIO75O.js} +2 -2
  168. package/dist/{chunk-Z56F6M3G.js → chunk-B3JAQMAN.js} +4 -4
  169. package/dist/{chunk-X3C3VTYS.js → chunk-BEX3FLHB.js} +2 -2
  170. package/dist/{chunk-44USLRMT.js → chunk-BOH4JG25.js} +4 -4
  171. package/dist/{chunk-TTJTMDLI.js → chunk-CC46BCK2.js} +4 -4
  172. package/dist/{chunk-ALOUJ3CE.js → chunk-CE6K4FJY.js} +5 -5
  173. package/dist/{chunk-AV6NNCRO.js → chunk-CFSUOXC3.js} +13 -14
  174. package/dist/chunk-CFSUOXC3.js.map +1 -0
  175. package/dist/{chunk-XO4ZUHVH.js → chunk-CYPBF3BI.js} +2 -2
  176. package/dist/{chunk-2LQU7DRI.js → chunk-CZPPAEWT.js} +5 -5
  177. package/dist/{chunk-SQD4LGVK.js → chunk-D4OFFRQI.js} +6 -6
  178. package/dist/{chunk-GT6HPOS2.js → chunk-E4EXXYOR.js} +7 -7
  179. package/dist/{chunk-LCWGNDTH.js → chunk-EKBUM7HK.js} +4 -4
  180. package/dist/{chunk-3IPQANXY.js → chunk-ENFULRAR.js} +2 -2
  181. package/dist/{chunk-NDHDBOUH.js → chunk-FWPFCK4D.js} +4 -4
  182. package/dist/{chunk-XIWKN7DO.js → chunk-FYWG2I6N.js} +11 -11
  183. package/dist/{chunk-JVOV5WAJ.js → chunk-GLERUZKH.js} +4 -4
  184. package/dist/{chunk-IJAUHR3M.js → chunk-GOPQEGSW.js} +4 -4
  185. package/dist/{chunk-LGCRL7DK.js → chunk-GP4BJI3F.js} +2 -2
  186. package/dist/chunk-GUA7S6GD.js +21 -0
  187. package/dist/chunk-GUA7S6GD.js.map +1 -0
  188. package/dist/{chunk-CM2Q7IH3.js → chunk-HDZQIFHL.js} +6 -6
  189. package/dist/{chunk-4GRUNQNB.js → chunk-HGI56VCG.js} +2 -2
  190. package/dist/{chunk-GJRKWDRR.js → chunk-HI3D6H37.js} +4 -4
  191. package/dist/{chunk-2OEFIGH7.js → chunk-HJJNNRVM.js} +3 -3
  192. package/dist/{chunk-52MYWALU.js → chunk-HLRLSCBF.js} +2 -2
  193. package/dist/{chunk-4MKVGSHX.js → chunk-HN3PZTUK.js} +5 -5
  194. package/dist/{chunk-3AOOI2NR.js → chunk-HR7YTBR7.js} +4 -4
  195. package/dist/{chunk-GI63FQEJ.js → chunk-HYNDC3FP.js} +4 -4
  196. package/dist/{chunk-HRNDWD25.js → chunk-IAK37ABV.js} +2 -2
  197. package/dist/{chunk-G2WERTWZ.js → chunk-IGGXKT5B.js} +2 -2
  198. package/dist/{chunk-VZ4VAQX3.js → chunk-IVJKILIX.js} +2 -2
  199. package/dist/{chunk-PZKWFRGS.js → chunk-J77QXAKC.js} +7 -7
  200. package/dist/{chunk-6EJF3BUR.js → chunk-JBGCGYEC.js} +4 -4
  201. package/dist/{chunk-IABE56TG.js → chunk-JE6RZ5L6.js} +2 -2
  202. package/dist/{chunk-NU55QUMO.js → chunk-K45ML7M7.js} +2 -2
  203. package/dist/{chunk-HSNOWYEE.js → chunk-K7FSTB2K.js} +2 -2
  204. package/dist/{chunk-42GG3BPF.js → chunk-KLOKBS77.js} +2 -2
  205. package/dist/{chunk-3LB4ZIZS.js → chunk-KN3AFONJ.js} +4 -4
  206. package/dist/{chunk-H6K3AP42.js → chunk-KOBWXZNH.js} +2 -2
  207. package/dist/{chunk-VFLNP2ZZ.js → chunk-KT5BEZEK.js} +2 -2
  208. package/dist/{chunk-PAICZOL5.js → chunk-KTX7XME6.js} +4 -4
  209. package/dist/{chunk-4YL3TQ6C.js → chunk-LCHDXLF4.js} +5 -5
  210. package/dist/{chunk-RJTVUM5E.js → chunk-LJFHJZAH.js} +2 -2
  211. package/dist/{chunk-WGUY7EIB.js → chunk-LO4M5D7T.js} +4 -4
  212. package/dist/{chunk-PTXHQ2CI.js → chunk-LPCIVG5D.js} +4 -4
  213. package/dist/{chunk-3QGMAVUF.js → chunk-LPCPS5GZ.js} +4 -4
  214. package/dist/{chunk-5FHPZOYK.js → chunk-LVXPAL2U.js} +2 -2
  215. package/dist/{chunk-ODY3PINC.js → chunk-MA7WJHBS.js} +7 -7
  216. package/dist/{chunk-U6W2RY3Z.js → chunk-MLQYIJTO.js} +5 -5
  217. package/dist/{chunk-2H5SYAJW.js → chunk-MO55277P.js} +3 -3
  218. package/dist/{chunk-GPHURU2K.js → chunk-MSAAOQAD.js} +7 -7
  219. package/dist/{chunk-3MJHHPRW.js → chunk-MVR4GURP.js} +2 -2
  220. package/dist/{chunk-J5YNQZLQ.js → chunk-N6DO4CPZ.js} +2 -2
  221. package/dist/{chunk-H6OBK5QP.js → chunk-NDOOZ5OS.js} +2 -2
  222. package/dist/{chunk-POTI6A42.js → chunk-NJXDE6D3.js} +8 -8
  223. package/dist/{chunk-LXEQR6EI.js → chunk-NZIYHS6B.js} +7 -7
  224. package/dist/{chunk-POIKHQHR.js → chunk-O6BOEUWN.js} +2 -2
  225. package/dist/{chunk-IKXS2YVQ.js → chunk-P3B2LO2E.js} +5 -5
  226. package/dist/{chunk-XP522FFM.js → chunk-PARTZ7XI.js} +2 -2
  227. package/dist/{chunk-NYFGFELX.js → chunk-PGPPN63I.js} +6 -6
  228. package/dist/{chunk-RAEG4MA4.js → chunk-PQYXHMED.js} +2 -2
  229. package/dist/{chunk-RHKT2XW2.js → chunk-PRMVDSTL.js} +3 -3
  230. package/dist/{chunk-JJIEJI4C.js → chunk-PWPCFN62.js} +5 -5
  231. package/dist/{chunk-PGV2FLE3.js → chunk-PXYL7QEA.js} +3 -3
  232. package/dist/{chunk-YGYQC7MT.js → chunk-QOLIBVGS.js} +4 -4
  233. package/dist/{chunk-EONMVYVY.js → chunk-QQPA3AH6.js} +2 -2
  234. package/dist/{chunk-OZPLAOI4.js → chunk-RV26QUJS.js} +5 -5
  235. package/dist/{chunk-NPPJ3IJP.js → chunk-RVOEOJMZ.js} +2 -2
  236. package/dist/{chunk-FJZHHARA.js → chunk-SDPG5BXH.js} +3 -3
  237. package/dist/{chunk-B4Y6W3OU.js → chunk-SIHZBKWH.js} +2 -2
  238. package/dist/{chunk-CZBCOMOX.js → chunk-T7BTVBOE.js} +5 -5
  239. package/dist/{chunk-XXL4PM4M.js → chunk-TWVRPT7J.js} +2 -2
  240. package/dist/{chunk-P53KRCKW.js → chunk-TZASFX6G.js} +4 -4
  241. package/dist/{chunk-Z4O3F6KU.js → chunk-U4QUDFPJ.js} +4 -4
  242. package/dist/{chunk-54HTXJJ2.js → chunk-ULPPKHRL.js} +2 -2
  243. package/dist/{chunk-YTVXT5TD.js → chunk-URDVXJUH.js} +6 -6
  244. package/dist/{chunk-DLS5CUI3.js → chunk-UUJ7J7NE.js} +2 -2
  245. package/dist/{chunk-B3QWQG62.js → chunk-V54LG3QG.js} +2 -2
  246. package/dist/{chunk-INCTNS4X.js → chunk-VA2OKVF7.js} +2 -2
  247. package/dist/{chunk-NLGJXSGM.js → chunk-VQXOWQCU.js} +2 -2
  248. package/dist/{chunk-WHCNGWD2.js → chunk-VYYFIESL.js} +4 -4
  249. package/dist/{chunk-3PURWPNX.js → chunk-WCATRYXC.js} +2 -2
  250. package/dist/{chunk-JNAULEYH.js → chunk-WMKE2MAF.js} +5 -5
  251. package/dist/{chunk-VNOXUWK7.js → chunk-X5F4FRH7.js} +4 -4
  252. package/dist/{chunk-EF5XUS44.js → chunk-XLLJU5Q7.js} +2 -2
  253. package/dist/{chunk-IITZA6U2.js → chunk-ZBVU2YWV.js} +9 -9
  254. package/dist/{chunk-SV4FYSDL.js → chunk-ZDMQDTSH.js} +4 -4
  255. package/dist/{chunk-SHAEK26Y.js → chunk-ZGCPDA3F.js} +2 -2
  256. package/dist/data-display/AsyncStateContainer.js +3 -3
  257. package/dist/data-display/Avatar.js +2 -2
  258. package/dist/data-display/Badge.js +2 -2
  259. package/dist/data-display/CardKit.js +16 -16
  260. package/dist/data-display/Carousel.js +5 -5
  261. package/dist/data-display/Chart.js +7 -7
  262. package/dist/data-display/Chip.js +3 -3
  263. package/dist/data-display/DataGrid.js +5 -5
  264. package/dist/data-display/DataViews.js +68 -68
  265. package/dist/data-display/EmptyState.js +2 -2
  266. package/dist/data-display/FleetMap.js +11 -11
  267. package/dist/data-display/HoverCard.js +1 -1
  268. package/dist/data-display/InteractiveTooltip.js +2 -2
  269. package/dist/data-display/Lightbox.js +5 -5
  270. package/dist/data-display/MapPreview.js +3 -3
  271. package/dist/data-display/SectionOnboarding.js +3 -3
  272. package/dist/data-display/Sheet.js +2 -2
  273. package/dist/data-display/Table.js +4 -4
  274. package/dist/feedback/ConfirmAction.js +7 -7
  275. package/dist/feedback/Dialog.js +2 -2
  276. package/dist/feedback/NotificationStatusNotice.js +2 -2
  277. package/dist/feedback/StackedModal.js +2 -2
  278. package/dist/feedback/TutorialOverlay.js +2 -2
  279. package/dist/form/AddressAutocomplete.js +1 -1
  280. package/dist/form/Autocomplete.js +2 -2
  281. package/dist/form/Calendar.js +4 -4
  282. package/dist/form/CategorySelect.js +6 -6
  283. package/dist/form/CepField.js +3 -3
  284. package/dist/form/CodeEditor.js +2 -2
  285. package/dist/form/Command.js +2 -2
  286. package/dist/form/DateRangePicker.js +6 -6
  287. package/dist/form/Input.js +2 -2
  288. package/dist/form/Label.js +2 -2
  289. package/dist/form/MenuSelect.js +25 -0
  290. package/dist/form/MenuSelect.js.map +1 -0
  291. package/dist/form/Menubar.js +4 -4
  292. package/dist/form/NumberField.js +3 -3
  293. package/dist/form/RichTextEditor.js +2 -2
  294. package/dist/form/Select.js +5 -1
  295. package/dist/form/Switch.js +4 -4
  296. package/dist/form/total-form.js +18 -17
  297. package/dist/icons.js +6 -6
  298. package/dist/layout/Box.js +5 -5
  299. package/dist/layout/SettingCard.js +23 -23
  300. package/dist/layout/SettingsLayout.js +4 -4
  301. package/dist/layout/Stack.js +6 -6
  302. package/dist/locales.js +45 -45
  303. package/dist/navigation/AppHeader.js +9 -9
  304. package/dist/navigation/NavigationMenu.js +2 -2
  305. package/dist/navigation/Pagination.js +2 -2
  306. package/dist/navigation/SectionNav.js +2 -2
  307. package/dist/provider.js +5 -5
  308. package/dist/pt-BR.js +21 -21
  309. package/dist/tokens.js +5 -5
  310. package/dist/types/components/form/Select/Select.d.ts +2 -0
  311. package/dist/types/components/form/Select/Select.d.ts.map +1 -1
  312. package/dist/types/components/form/Select/Select.menu.d.ts +15 -0
  313. package/dist/types/components/form/Select/Select.menu.d.ts.map +1 -0
  314. package/dist/types/components/form/Select/Select.types.d.ts +5 -0
  315. package/dist/types/components/form/Select/Select.types.d.ts.map +1 -1
  316. package/dist/types/components/form/Select/index.d.ts +2 -2
  317. package/dist/types/components/form/Select/index.d.ts.map +1 -1
  318. package/dist/types/components/form/Select/menu.d.ts +7 -0
  319. package/dist/types/components/form/Select/menu.d.ts.map +1 -0
  320. package/dist/user-avatar.js +3 -3
  321. package/dist/utility/InstallPrompt.js +3 -3
  322. package/dist/utility/WorkflowStep.js +2 -2
  323. package/package.json +5 -1
  324. package/src/components/form/Select/Select.md +16 -0
  325. package/src/components/form/Select/Select.menu.tsx +152 -0
  326. package/src/components/form/Select/Select.tsx +4 -128
  327. package/src/components/form/Select/Select.types.ts +6 -0
  328. package/src/components/form/Select/index.ts +2 -1
  329. package/src/components/form/Select/menu.ts +13 -0
  330. package/dist/chunk-AV6NNCRO.js.map +0 -1
  331. /package/dist/{chunk-HI3VE276.js.map → chunk-25ALEQUH.js.map} +0 -0
  332. /package/dist/{chunk-NF4GHTZ4.js.map → chunk-2AZZRWT6.js.map} +0 -0
  333. /package/dist/{chunk-RYWX6LK4.js.map → chunk-3ASNSGIY.js.map} +0 -0
  334. /package/dist/{chunk-2UPWKLHQ.js.map → chunk-3WWI75NM.js.map} +0 -0
  335. /package/dist/{chunk-4CHYMTBT.js.map → chunk-4WCDMCIS.js.map} +0 -0
  336. /package/dist/{chunk-S2GDYA6R.js.map → chunk-5GMHJ7Y5.js.map} +0 -0
  337. /package/dist/{chunk-JSGVYOMN.js.map → chunk-5MW7OYBM.js.map} +0 -0
  338. /package/dist/{chunk-Z4DKVLYG.js.map → chunk-5QDBSQP5.js.map} +0 -0
  339. /package/dist/{chunk-SDKOOVEX.js.map → chunk-6GAZAJXB.js.map} +0 -0
  340. /package/dist/{chunk-UD3WDCWD.js.map → chunk-6KFEDJOR.js.map} +0 -0
  341. /package/dist/{chunk-77BKKPCI.js.map → chunk-6KLDYVRY.js.map} +0 -0
  342. /package/dist/{chunk-66XTP3IT.js.map → chunk-6KOR5VOT.js.map} +0 -0
  343. /package/dist/{chunk-F3AYISXT.js.map → chunk-6PU3JYVY.js.map} +0 -0
  344. /package/dist/{chunk-TMW7RBW7.js.map → chunk-7DSYQCRE.js.map} +0 -0
  345. /package/dist/{chunk-WMYLF7I2.js.map → chunk-7XKK2WOV.js.map} +0 -0
  346. /package/dist/{chunk-ADSA76T7.js.map → chunk-AG3DY5TH.js.map} +0 -0
  347. /package/dist/{chunk-WICZ3ZN2.js.map → chunk-AG4MGJPQ.js.map} +0 -0
  348. /package/dist/{chunk-FRAW3ICP.js.map → chunk-ANVIO75O.js.map} +0 -0
  349. /package/dist/{chunk-Z56F6M3G.js.map → chunk-B3JAQMAN.js.map} +0 -0
  350. /package/dist/{chunk-X3C3VTYS.js.map → chunk-BEX3FLHB.js.map} +0 -0
  351. /package/dist/{chunk-44USLRMT.js.map → chunk-BOH4JG25.js.map} +0 -0
  352. /package/dist/{chunk-TTJTMDLI.js.map → chunk-CC46BCK2.js.map} +0 -0
  353. /package/dist/{chunk-ALOUJ3CE.js.map → chunk-CE6K4FJY.js.map} +0 -0
  354. /package/dist/{chunk-XO4ZUHVH.js.map → chunk-CYPBF3BI.js.map} +0 -0
  355. /package/dist/{chunk-2LQU7DRI.js.map → chunk-CZPPAEWT.js.map} +0 -0
  356. /package/dist/{chunk-SQD4LGVK.js.map → chunk-D4OFFRQI.js.map} +0 -0
  357. /package/dist/{chunk-GT6HPOS2.js.map → chunk-E4EXXYOR.js.map} +0 -0
  358. /package/dist/{chunk-LCWGNDTH.js.map → chunk-EKBUM7HK.js.map} +0 -0
  359. /package/dist/{chunk-3IPQANXY.js.map → chunk-ENFULRAR.js.map} +0 -0
  360. /package/dist/{chunk-NDHDBOUH.js.map → chunk-FWPFCK4D.js.map} +0 -0
  361. /package/dist/{chunk-XIWKN7DO.js.map → chunk-FYWG2I6N.js.map} +0 -0
  362. /package/dist/{chunk-JVOV5WAJ.js.map → chunk-GLERUZKH.js.map} +0 -0
  363. /package/dist/{chunk-IJAUHR3M.js.map → chunk-GOPQEGSW.js.map} +0 -0
  364. /package/dist/{chunk-LGCRL7DK.js.map → chunk-GP4BJI3F.js.map} +0 -0
  365. /package/dist/{chunk-CM2Q7IH3.js.map → chunk-HDZQIFHL.js.map} +0 -0
  366. /package/dist/{chunk-4GRUNQNB.js.map → chunk-HGI56VCG.js.map} +0 -0
  367. /package/dist/{chunk-GJRKWDRR.js.map → chunk-HI3D6H37.js.map} +0 -0
  368. /package/dist/{chunk-2OEFIGH7.js.map → chunk-HJJNNRVM.js.map} +0 -0
  369. /package/dist/{chunk-52MYWALU.js.map → chunk-HLRLSCBF.js.map} +0 -0
  370. /package/dist/{chunk-4MKVGSHX.js.map → chunk-HN3PZTUK.js.map} +0 -0
  371. /package/dist/{chunk-3AOOI2NR.js.map → chunk-HR7YTBR7.js.map} +0 -0
  372. /package/dist/{chunk-GI63FQEJ.js.map → chunk-HYNDC3FP.js.map} +0 -0
  373. /package/dist/{chunk-HRNDWD25.js.map → chunk-IAK37ABV.js.map} +0 -0
  374. /package/dist/{chunk-G2WERTWZ.js.map → chunk-IGGXKT5B.js.map} +0 -0
  375. /package/dist/{chunk-VZ4VAQX3.js.map → chunk-IVJKILIX.js.map} +0 -0
  376. /package/dist/{chunk-PZKWFRGS.js.map → chunk-J77QXAKC.js.map} +0 -0
  377. /package/dist/{chunk-6EJF3BUR.js.map → chunk-JBGCGYEC.js.map} +0 -0
  378. /package/dist/{chunk-IABE56TG.js.map → chunk-JE6RZ5L6.js.map} +0 -0
  379. /package/dist/{chunk-NU55QUMO.js.map → chunk-K45ML7M7.js.map} +0 -0
  380. /package/dist/{chunk-HSNOWYEE.js.map → chunk-K7FSTB2K.js.map} +0 -0
  381. /package/dist/{chunk-42GG3BPF.js.map → chunk-KLOKBS77.js.map} +0 -0
  382. /package/dist/{chunk-3LB4ZIZS.js.map → chunk-KN3AFONJ.js.map} +0 -0
  383. /package/dist/{chunk-H6K3AP42.js.map → chunk-KOBWXZNH.js.map} +0 -0
  384. /package/dist/{chunk-VFLNP2ZZ.js.map → chunk-KT5BEZEK.js.map} +0 -0
  385. /package/dist/{chunk-PAICZOL5.js.map → chunk-KTX7XME6.js.map} +0 -0
  386. /package/dist/{chunk-4YL3TQ6C.js.map → chunk-LCHDXLF4.js.map} +0 -0
  387. /package/dist/{chunk-RJTVUM5E.js.map → chunk-LJFHJZAH.js.map} +0 -0
  388. /package/dist/{chunk-WGUY7EIB.js.map → chunk-LO4M5D7T.js.map} +0 -0
  389. /package/dist/{chunk-PTXHQ2CI.js.map → chunk-LPCIVG5D.js.map} +0 -0
  390. /package/dist/{chunk-3QGMAVUF.js.map → chunk-LPCPS5GZ.js.map} +0 -0
  391. /package/dist/{chunk-5FHPZOYK.js.map → chunk-LVXPAL2U.js.map} +0 -0
  392. /package/dist/{chunk-ODY3PINC.js.map → chunk-MA7WJHBS.js.map} +0 -0
  393. /package/dist/{chunk-U6W2RY3Z.js.map → chunk-MLQYIJTO.js.map} +0 -0
  394. /package/dist/{chunk-2H5SYAJW.js.map → chunk-MO55277P.js.map} +0 -0
  395. /package/dist/{chunk-GPHURU2K.js.map → chunk-MSAAOQAD.js.map} +0 -0
  396. /package/dist/{chunk-3MJHHPRW.js.map → chunk-MVR4GURP.js.map} +0 -0
  397. /package/dist/{chunk-J5YNQZLQ.js.map → chunk-N6DO4CPZ.js.map} +0 -0
  398. /package/dist/{chunk-H6OBK5QP.js.map → chunk-NDOOZ5OS.js.map} +0 -0
  399. /package/dist/{chunk-POTI6A42.js.map → chunk-NJXDE6D3.js.map} +0 -0
  400. /package/dist/{chunk-LXEQR6EI.js.map → chunk-NZIYHS6B.js.map} +0 -0
  401. /package/dist/{chunk-POIKHQHR.js.map → chunk-O6BOEUWN.js.map} +0 -0
  402. /package/dist/{chunk-IKXS2YVQ.js.map → chunk-P3B2LO2E.js.map} +0 -0
  403. /package/dist/{chunk-XP522FFM.js.map → chunk-PARTZ7XI.js.map} +0 -0
  404. /package/dist/{chunk-NYFGFELX.js.map → chunk-PGPPN63I.js.map} +0 -0
  405. /package/dist/{chunk-RAEG4MA4.js.map → chunk-PQYXHMED.js.map} +0 -0
  406. /package/dist/{chunk-RHKT2XW2.js.map → chunk-PRMVDSTL.js.map} +0 -0
  407. /package/dist/{chunk-JJIEJI4C.js.map → chunk-PWPCFN62.js.map} +0 -0
  408. /package/dist/{chunk-PGV2FLE3.js.map → chunk-PXYL7QEA.js.map} +0 -0
  409. /package/dist/{chunk-YGYQC7MT.js.map → chunk-QOLIBVGS.js.map} +0 -0
  410. /package/dist/{chunk-EONMVYVY.js.map → chunk-QQPA3AH6.js.map} +0 -0
  411. /package/dist/{chunk-OZPLAOI4.js.map → chunk-RV26QUJS.js.map} +0 -0
  412. /package/dist/{chunk-NPPJ3IJP.js.map → chunk-RVOEOJMZ.js.map} +0 -0
  413. /package/dist/{chunk-FJZHHARA.js.map → chunk-SDPG5BXH.js.map} +0 -0
  414. /package/dist/{chunk-B4Y6W3OU.js.map → chunk-SIHZBKWH.js.map} +0 -0
  415. /package/dist/{chunk-CZBCOMOX.js.map → chunk-T7BTVBOE.js.map} +0 -0
  416. /package/dist/{chunk-XXL4PM4M.js.map → chunk-TWVRPT7J.js.map} +0 -0
  417. /package/dist/{chunk-P53KRCKW.js.map → chunk-TZASFX6G.js.map} +0 -0
  418. /package/dist/{chunk-Z4O3F6KU.js.map → chunk-U4QUDFPJ.js.map} +0 -0
  419. /package/dist/{chunk-54HTXJJ2.js.map → chunk-ULPPKHRL.js.map} +0 -0
  420. /package/dist/{chunk-YTVXT5TD.js.map → chunk-URDVXJUH.js.map} +0 -0
  421. /package/dist/{chunk-DLS5CUI3.js.map → chunk-UUJ7J7NE.js.map} +0 -0
  422. /package/dist/{chunk-B3QWQG62.js.map → chunk-V54LG3QG.js.map} +0 -0
  423. /package/dist/{chunk-INCTNS4X.js.map → chunk-VA2OKVF7.js.map} +0 -0
  424. /package/dist/{chunk-NLGJXSGM.js.map → chunk-VQXOWQCU.js.map} +0 -0
  425. /package/dist/{chunk-WHCNGWD2.js.map → chunk-VYYFIESL.js.map} +0 -0
  426. /package/dist/{chunk-3PURWPNX.js.map → chunk-WCATRYXC.js.map} +0 -0
  427. /package/dist/{chunk-JNAULEYH.js.map → chunk-WMKE2MAF.js.map} +0 -0
  428. /package/dist/{chunk-VNOXUWK7.js.map → chunk-X5F4FRH7.js.map} +0 -0
  429. /package/dist/{chunk-EF5XUS44.js.map → chunk-XLLJU5Q7.js.map} +0 -0
  430. /package/dist/{chunk-IITZA6U2.js.map → chunk-ZBVU2YWV.js.map} +0 -0
  431. /package/dist/{chunk-SV4FYSDL.js.map → chunk-ZDMQDTSH.js.map} +0 -0
  432. /package/dist/{chunk-SHAEK26Y.js.map → chunk-ZGCPDA3F.js.map} +0 -0
@@ -81,6 +81,22 @@ the option's value in its own type. The test ids keep their spelling.
81
81
  - Pass `noOptionsText` — the library ships no copy, so unset means an empty list
82
82
  says nothing.
83
83
 
84
+ ## `MenuSelect`: the menu alone, for a screen that counts bytes
85
+
86
+ `Select` decides at render time, so it imports the searchable engine (MUI
87
+ `Autocomplete`, and the `Chip` it pulls in) wherever it is used, even for a
88
+ two-option menu. `MenuSelect` has the same props, events and test ids and never
89
+ searches, so a module importing only it lets the bundler drop that engine:
90
+
91
+ ```tsx
92
+ import { MenuSelect } from '@12-apps/ui/form/Select';
93
+
94
+ <MenuSelect label="Dia" options={days} value={day} onChange={onDay} />
95
+ ```
96
+
97
+ Use it on a page with a load budget when the list is short or ordered (days,
98
+ languages). Anywhere else, `Select` is the default.
99
+
84
100
  ## Visual Variants
85
101
 
86
102
  ### Default
@@ -0,0 +1,152 @@
1
+ import FormHelperText from '@mui/material/FormHelperText/index.js';
2
+ import InputLabel from '@mui/material/InputLabel/index.js';
3
+ import MenuItem from '@mui/material/MenuItem/index.js';
4
+ import MuiSelect from '@mui/material/Select/index.js';
5
+ import React from 'react';
6
+
7
+ import { formControlSize, SelectFieldControl } from './Select.styles';
8
+ import type { MenuSelectProps, SelectProps } from './Select.types';
9
+
10
+ import { splitTestId } from '../../../platform/test-id';
11
+ import { asFieldSize } from '../../../tokens/field-height';
12
+
13
+ /**
14
+ * Build the placeholder item plus one MenuItem per option. Returns a flat ARRAY
15
+ * (not a Fragment): MUI `Select` enumerates its children with `React.Children`,
16
+ * which does not descend into Fragments — a Fragment would hide every option.
17
+ */
18
+ function renderMenuItems(
19
+ options: SelectProps['options'],
20
+ placeholder: string | undefined,
21
+ dataTestId: string | undefined,
22
+ ): React.ReactNode[] {
23
+ const optionTestId = (value: string | number): string =>
24
+ dataTestId ? `${dataTestId}-option-${value}` : `option-${value}`;
25
+ const items = options.map((option) => (
26
+ <MenuItem
27
+ key={option.value}
28
+ value={option.value}
29
+ disabled={option.disabled}
30
+ data-testid={optionTestId(option.value)}
31
+ >
32
+ {option.label}
33
+ </MenuItem>
34
+ ));
35
+ if (placeholder) {
36
+ items.unshift(
37
+ <MenuItem key="__placeholder__" value="" disabled>
38
+ {placeholder}
39
+ </MenuItem>,
40
+ );
41
+ }
42
+ return items;
43
+ }
44
+
45
+ const MenuField = React.forwardRef<HTMLDivElement, SelectProps>(
46
+ (
47
+ {
48
+ // `variant`/`size`/`glow`/`pulse` intentionally have no defaults: undefined
49
+ // resolves to the default variant, MUI's medium size, and no glow/pulse —
50
+ // keeping this render function under the complexity budget.
51
+ variant,
52
+ options,
53
+ label,
54
+ helperText,
55
+ fullWidth = true,
56
+ size,
57
+ error,
58
+ placeholder,
59
+ glow,
60
+ pulse,
61
+ value,
62
+ 'aria-label': ariaLabel,
63
+ ...rest
64
+ },
65
+ ref,
66
+ ) => {
67
+ const { testId: dataTestId, rest: props } = splitTestId(rest);
68
+ const labelId = React.useId();
69
+ const helperTextId = React.useId();
70
+ const selectId = React.useId();
71
+
72
+ return (
73
+ <SelectFieldControl
74
+ fullWidth={fullWidth}
75
+ size={formControlSize(size)}
76
+ error={error}
77
+ customVariant={variant}
78
+ fieldSize={asFieldSize(size)}
79
+ glow={glow} pulse={pulse}
80
+ ref={ref}
81
+ data-testid={dataTestId}
82
+ >
83
+ {label && (
84
+ <InputLabel id={labelId} htmlFor={selectId}>
85
+ {label}
86
+ </InputLabel>
87
+ )}
88
+ <MuiSelect
89
+ id={selectId}
90
+ labelId={label ? labelId : undefined}
91
+ label={label}
92
+ displayEmpty={Boolean(placeholder)}
93
+ aria-describedby={helperText ? helperTextId : undefined}
94
+ data-testid={dataTestId ? `${dataTestId}-select` : 'select'}
95
+ value={value ?? ''}
96
+ {...props}
97
+ /*
98
+ * `role="combobox"` sits on MUI's display DIV, not on the hidden
99
+ * native input that `{...props}` reaches — so an `aria-label` passed
100
+ * to this component never landed on the element carrying the role,
101
+ * and MUI's `aria-labelledby` then fell back to that div's OWN id.
102
+ * The control announced as its current value: a filter's field
103
+ * select read "Status" instead of "Filtro 1 — campo".
104
+ *
105
+ * Forwarding it here names the right element. The explicit
106
+ * `undefined` clears that self-referential `aria-labelledby`, which
107
+ * would otherwise win — a labelledby always beats a label in the
108
+ * accessible-name computation.
109
+ */
110
+ SelectDisplayProps={
111
+ ariaLabel === undefined
112
+ ? undefined
113
+ : { 'aria-label': ariaLabel, 'aria-labelledby': undefined }
114
+ }
115
+ >
116
+ {renderMenuItems(options, placeholder, dataTestId)}
117
+ </MuiSelect>
118
+ {helperText && (
119
+ <FormHelperText id={helperTextId} error={error}>
120
+ {helperText}
121
+ </FormHelperText>
122
+ )}
123
+ </SelectFieldControl>
124
+ );
125
+ },
126
+ );
127
+
128
+ MenuField.displayName = 'MenuField';
129
+
130
+ /**
131
+ * The menu select alone: it never becomes a search box, whatever the count.
132
+ *
133
+ * For a screen that pays for every byte it ships. `Select` imports the
134
+ * searchable engine (MUI `Autocomplete`) to decide at render time, so every
135
+ * bundle that renders one carries it, a two-option menu included. This module
136
+ * imports no part of that engine, and `@12-apps/ui/form/MenuSelect` is an entry
137
+ * of its own, so importing it cannot pull `Autocomplete` (or the `Chip` it
138
+ * brings) into a bundle. Same props, events and test ids as `Select`, so a call site
139
+ * can switch between the two without touching anything else.
140
+ */
141
+ export const MenuSelect = React.forwardRef<HTMLDivElement, MenuSelectProps>((props, ref) => {
142
+ // `Select` hands its whole props over, so the searchable path's own two can
143
+ // still arrive at runtime: nothing for MUI's Select to receive.
144
+ const {
145
+ searchable: _searchable,
146
+ noOptionsText: _noOptionsText,
147
+ ...menuProps
148
+ } = props as SelectProps;
149
+ return <MenuField {...menuProps} ref={ref} />;
150
+ });
151
+
152
+ MenuSelect.displayName = 'MenuSelect';
@@ -1,133 +1,9 @@
1
- import FormHelperText from '@mui/material/FormHelperText/index.js';
2
- import InputLabel from '@mui/material/InputLabel/index.js';
3
- import MenuItem from '@mui/material/MenuItem/index.js';
4
- import MuiSelect from '@mui/material/Select/index.js';
5
1
  import React from 'react';
6
2
 
3
+ import { MenuSelect } from './Select.menu';
7
4
  import { SearchableSelect, shouldSearch } from './Select.searchable';
8
- import { formControlSize, SelectFieldControl } from './Select.styles';
9
5
  import type { SelectProps } from './Select.types';
10
6
 
11
- import { splitTestId } from '../../../platform/test-id';
12
- import { asFieldSize } from '../../../tokens/field-height';
13
-
14
- /**
15
- * Build the placeholder item plus one MenuItem per option. Returns a flat ARRAY
16
- * (not a Fragment): MUI `Select` enumerates its children with `React.Children`,
17
- * which does not descend into Fragments — a Fragment would hide every option.
18
- */
19
- function renderMenuItems(
20
- options: SelectProps['options'],
21
- placeholder: string | undefined,
22
- dataTestId: string | undefined,
23
- ): React.ReactNode[] {
24
- const optionTestId = (value: string | number): string =>
25
- dataTestId ? `${dataTestId}-option-${value}` : `option-${value}`;
26
- const items = options.map((option) => (
27
- <MenuItem
28
- key={option.value}
29
- value={option.value}
30
- disabled={option.disabled}
31
- data-testid={optionTestId(option.value)}
32
- >
33
- {option.label}
34
- </MenuItem>
35
- ));
36
- if (placeholder) {
37
- items.unshift(
38
- <MenuItem key="__placeholder__" value="" disabled>
39
- {placeholder}
40
- </MenuItem>,
41
- );
42
- }
43
- return items;
44
- }
45
-
46
- const MenuSelect = React.forwardRef<HTMLDivElement, SelectProps>(
47
- (
48
- {
49
- // `variant`/`size`/`glow`/`pulse` intentionally have no defaults: undefined
50
- // resolves to the default variant, MUI's medium size, and no glow/pulse —
51
- // keeping this render function under the complexity budget.
52
- variant,
53
- options,
54
- label,
55
- helperText,
56
- fullWidth = true,
57
- size,
58
- error,
59
- placeholder,
60
- glow,
61
- pulse,
62
- value,
63
- 'aria-label': ariaLabel,
64
- ...rest
65
- },
66
- ref,
67
- ) => {
68
- const { testId: dataTestId, rest: props } = splitTestId(rest);
69
- const labelId = React.useId();
70
- const helperTextId = React.useId();
71
- const selectId = React.useId();
72
-
73
- return (
74
- <SelectFieldControl
75
- fullWidth={fullWidth}
76
- size={formControlSize(size)}
77
- error={error}
78
- customVariant={variant}
79
- fieldSize={asFieldSize(size)}
80
- glow={glow} pulse={pulse}
81
- ref={ref}
82
- data-testid={dataTestId}
83
- >
84
- {label && (
85
- <InputLabel id={labelId} htmlFor={selectId}>
86
- {label}
87
- </InputLabel>
88
- )}
89
- <MuiSelect
90
- id={selectId}
91
- labelId={label ? labelId : undefined}
92
- label={label}
93
- displayEmpty={Boolean(placeholder)}
94
- aria-describedby={helperText ? helperTextId : undefined}
95
- data-testid={dataTestId ? `${dataTestId}-select` : 'select'}
96
- value={value ?? ''}
97
- {...props}
98
- /*
99
- * `role="combobox"` sits on MUI's display DIV, not on the hidden
100
- * native input that `{...props}` reaches — so an `aria-label` passed
101
- * to this component never landed on the element carrying the role,
102
- * and MUI's `aria-labelledby` then fell back to that div's OWN id.
103
- * The control announced as its current value: a filter's field
104
- * select read "Status" instead of "Filtro 1 — campo".
105
- *
106
- * Forwarding it here names the right element. The explicit
107
- * `undefined` clears that self-referential `aria-labelledby`, which
108
- * would otherwise win — a labelledby always beats a label in the
109
- * accessible-name computation.
110
- */
111
- SelectDisplayProps={
112
- ariaLabel === undefined
113
- ? undefined
114
- : { 'aria-label': ariaLabel, 'aria-labelledby': undefined }
115
- }
116
- >
117
- {renderMenuItems(options, placeholder, dataTestId)}
118
- </MuiSelect>
119
- {helperText && (
120
- <FormHelperText id={helperTextId} error={error}>
121
- {helperText}
122
- </FormHelperText>
123
- )}
124
- </SelectFieldControl>
125
- );
126
- },
127
- );
128
-
129
- MenuSelect.displayName = 'MenuSelect';
130
-
131
7
  /**
132
8
  * The house select. Up to five options it opens a menu; from six on it is a
133
9
  * search box over a list of bounded height (`Select.searchable.tsx`), with the
@@ -135,9 +11,9 @@ MenuSelect.displayName = 'MenuSelect';
135
11
  */
136
12
  export const Select = React.forwardRef<HTMLDivElement, SelectProps>((props, ref) => {
137
13
  if (shouldSearch(props)) return <SearchableSelect {...props} ref={ref} />;
138
- // The searchable path's own props: nothing for MUI's Select to receive.
139
- const { searchable: _searchable, noOptionsText: _noOptionsText, ...menuProps } = props;
140
- return <MenuSelect {...menuProps} ref={ref} />;
14
+ return <MenuSelect {...props} ref={ref} />;
141
15
  });
142
16
 
143
17
  Select.displayName = 'Select';
18
+
19
+ export { MenuSelect };
@@ -21,3 +21,9 @@ export interface SelectProps
21
21
  */
22
22
  'data-testid'?: string;
23
23
  }
24
+
25
+ /**
26
+ * `MenuSelect`'s props: `Select`'s, less the two that only the searchable path
27
+ * reads. A menu that never searches should not accept `searchable` and ignore it.
28
+ */
29
+ export type MenuSelectProps = Omit<SelectProps, 'searchable' | 'noOptionsText'>;
@@ -1,5 +1,6 @@
1
- export { Select } from './Select';
1
+ export { MenuSelect, Select } from './Select';
2
2
  export type {
3
+ MenuSelectProps,
3
4
  SelectBaseProps,
4
5
  SelectOption,
5
6
  SelectProps,
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `@12-apps/ui/form/MenuSelect`: the menu select, and nothing that searches.
3
+ * Its own entry so a bundle can take it without `Select`'s searchable engine.
4
+ */
5
+ export { MenuSelect } from './Select.menu';
6
+ export type {
7
+ MenuSelectProps,
8
+ SelectBaseProps,
9
+ SelectOption,
10
+ SelectProps,
11
+ SelectValue,
12
+ SelectVariant,
13
+ } from './Select.types';
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/Select/Select.tsx"],"sourcesContent":["import FormHelperText from '@mui/material/FormHelperText/index.js';\nimport InputLabel from '@mui/material/InputLabel/index.js';\nimport MenuItem from '@mui/material/MenuItem/index.js';\nimport MuiSelect from '@mui/material/Select/index.js';\nimport React from 'react';\n\nimport { SearchableSelect, shouldSearch } from './Select.searchable';\nimport { formControlSize, SelectFieldControl } from './Select.styles';\nimport type { SelectProps } from './Select.types';\n\nimport { splitTestId } from '../../../platform/test-id';\nimport { asFieldSize } from '../../../tokens/field-height';\n\n/**\n * Build the placeholder item plus one MenuItem per option. Returns a flat ARRAY\n * (not a Fragment): MUI `Select` enumerates its children with `React.Children`,\n * which does not descend into Fragments — a Fragment would hide every option.\n */\nfunction renderMenuItems(\n options: SelectProps['options'],\n placeholder: string | undefined,\n dataTestId: string | undefined,\n): React.ReactNode[] {\n const optionTestId = (value: string | number): string =>\n dataTestId ? `${dataTestId}-option-${value}` : `option-${value}`;\n const items = options.map((option) => (\n <MenuItem\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n data-testid={optionTestId(option.value)}\n >\n {option.label}\n </MenuItem>\n ));\n if (placeholder) {\n items.unshift(\n <MenuItem key=\"__placeholder__\" value=\"\" disabled>\n {placeholder}\n </MenuItem>,\n );\n }\n return items;\n}\n\nconst MenuSelect = React.forwardRef<HTMLDivElement, SelectProps>(\n (\n {\n // `variant`/`size`/`glow`/`pulse` intentionally have no defaults: undefined\n // resolves to the default variant, MUI's medium size, and no glow/pulse —\n // keeping this render function under the complexity budget.\n variant,\n options,\n label,\n helperText,\n fullWidth = true,\n size,\n error,\n placeholder,\n glow,\n pulse,\n value,\n 'aria-label': ariaLabel,\n ...rest\n },\n ref,\n ) => {\n const { testId: dataTestId, rest: props } = splitTestId(rest);\n const labelId = React.useId();\n const helperTextId = React.useId();\n const selectId = React.useId();\n\n return (\n <SelectFieldControl\n fullWidth={fullWidth}\n size={formControlSize(size)}\n error={error}\n customVariant={variant}\n fieldSize={asFieldSize(size)}\n glow={glow} pulse={pulse}\n ref={ref}\n data-testid={dataTestId}\n >\n {label && (\n <InputLabel id={labelId} htmlFor={selectId}>\n {label}\n </InputLabel>\n )}\n <MuiSelect\n id={selectId}\n labelId={label ? labelId : undefined}\n label={label}\n displayEmpty={Boolean(placeholder)}\n aria-describedby={helperText ? helperTextId : undefined}\n data-testid={dataTestId ? `${dataTestId}-select` : 'select'}\n value={value ?? ''}\n {...props}\n /*\n * `role=\"combobox\"` sits on MUI's display DIV, not on the hidden\n * native input that `{...props}` reaches — so an `aria-label` passed\n * to this component never landed on the element carrying the role,\n * and MUI's `aria-labelledby` then fell back to that div's OWN id.\n * The control announced as its current value: a filter's field\n * select read \"Status\" instead of \"Filtro 1 — campo\".\n *\n * Forwarding it here names the right element. The explicit\n * `undefined` clears that self-referential `aria-labelledby`, which\n * would otherwise win — a labelledby always beats a label in the\n * accessible-name computation.\n */\n SelectDisplayProps={\n ariaLabel === undefined\n ? undefined\n : { 'aria-label': ariaLabel, 'aria-labelledby': undefined }\n }\n >\n {renderMenuItems(options, placeholder, dataTestId)}\n </MuiSelect>\n {helperText && (\n <FormHelperText id={helperTextId} error={error}>\n {helperText}\n </FormHelperText>\n )}\n </SelectFieldControl>\n );\n },\n);\n\nMenuSelect.displayName = 'MenuSelect';\n\n/**\n * The house select. Up to five options it opens a menu; from six on it is a\n * search box over a list of bounded height (`Select.searchable.tsx`), with the\n * same props, events and test ids either way. `searchable` overrides the count.\n */\nexport const Select = React.forwardRef<HTMLDivElement, SelectProps>((props, ref) => {\n if (shouldSearch(props)) return <SearchableSelect {...props} ref={ref} />;\n // The searchable path's own props: nothing for MUI's Select to receive.\n const { searchable: _searchable, noOptionsText: _noOptionsText, ...menuProps } = props;\n return <MenuSelect {...menuProps} ref={ref} />;\n});\n\nSelect.displayName = 'Select';\n"],"mappings":";;;;;;;;;;;;;;;;AAAA,OAAO,oBAAoB;AAC3B,OAAO,gBAAgB;AACvB,OAAO,cAAc;AACrB,OAAO,eAAe;AACtB,OAAO,WAAW;AAsBd,cA+CE,YA/CF;AARJ,SAAS,gBACP,SACA,aACA,YACmB;AACnB,QAAM,eAAe,CAAC,UACpB,aAAa,GAAG,UAAU,WAAW,KAAK,KAAK,UAAU,KAAK;AAChE,QAAM,QAAQ,QAAQ,IAAI,CAAC,WACzB;AAAA,IAAC;AAAA;AAAA,MAEC,OAAO,OAAO;AAAA,MACd,UAAU,OAAO;AAAA,MACjB,eAAa,aAAa,OAAO,KAAK;AAAA,MAErC,iBAAO;AAAA;AAAA,IALH,OAAO;AAAA,EAMd,CACD;AACD,MAAI,aAAa;AACf,UAAM;AAAA,MACJ,oBAAC,YAA+B,OAAM,IAAG,UAAQ,MAC9C,yBADW,iBAEd;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAM,aAAa,MAAM;AAAA,EACvB,CACE;AAAA;AAAA;AAAA;AAAA,IAIE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,EAAE,QAAQ,YAAY,MAAM,MAAM,IAAI,YAAY,IAAI;AAC5D,UAAM,UAAU,MAAM,MAAM;AAC5B,UAAM,eAAe,MAAM,MAAM;AACjC,UAAM,WAAW,MAAM,MAAM;AAE7B,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,MAAM,gBAAgB,IAAI;AAAA,QAC1B;AAAA,QACA,eAAe;AAAA,QACf,WAAW,YAAY,IAAI;AAAA,QAC3B;AAAA,QAAY;AAAA,QACZ;AAAA,QACA,eAAa;AAAA,QAEZ;AAAA,mBACC,oBAAC,cAAW,IAAI,SAAS,SAAS,UAC/B,iBACH;AAAA,UAEF;AAAA,YAAC;AAAA;AAAA,cACC,IAAI;AAAA,cACJ,SAAS,QAAQ,UAAU;AAAA,cAC3B;AAAA,cACA,cAAc,QAAQ,WAAW;AAAA,cACjC,oBAAkB,aAAa,eAAe;AAAA,cAC9C,eAAa,aAAa,GAAG,UAAU,YAAY;AAAA,cACnD,OAAO,SAAS;AAAA,cACf,GAAG;AAAA,cAcJ,oBACE,cAAc,SACV,SACA,EAAE,cAAc,WAAW,mBAAmB,OAAU;AAAA,cAG7D,0BAAgB,SAAS,aAAa,UAAU;AAAA;AAAA,UACnD;AAAA,UACC,cACC,oBAAC,kBAAe,IAAI,cAAc,OAC/B,sBACH;AAAA;AAAA;AAAA,IAEJ;AAAA,EAEJ;AACF;AAEA,WAAW,cAAc;AAOlB,IAAM,SAAS,MAAM,WAAwC,CAAC,OAAO,QAAQ;AAClF,MAAI,aAAa,KAAK,EAAG,QAAO,oBAAC,oBAAkB,GAAG,OAAO,KAAU;AAEvE,QAAM,EAAE,YAAY,aAAa,eAAe,gBAAgB,GAAG,UAAU,IAAI;AACjF,SAAO,oBAAC,cAAY,GAAG,WAAW,KAAU;AAC9C,CAAC;AAED,OAAO,cAAc;","names":[]}