@12-apps/ui 6.49.1 → 6.49.2
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.
- package/NATIVE.md +1 -1
- package/dist/_internal/components/data-display/AsyncStateContainer/AsyncStateContainer.js +3 -3
- package/dist/_internal/components/data-display/Avatar/Avatar.js +2 -2
- package/dist/_internal/components/data-display/Badge/Badge.js +2 -2
- package/dist/_internal/components/data-display/Badge/Badge.styles.js +2 -2
- package/dist/_internal/components/data-display/Badge/BadgeContent.js +2 -2
- package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +5 -5
- package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +5 -5
- package/dist/_internal/components/data-display/Carousel/Carousel.chrome.js +2 -2
- package/dist/_internal/components/data-display/Carousel/Carousel.js +5 -5
- package/dist/_internal/components/data-display/Carousel/Carousel.parts.js +2 -2
- package/dist/_internal/components/data-display/Carousel/Carousel.styles.js +2 -2
- package/dist/_internal/components/data-display/Chart/Chart.js +6 -6
- package/dist/_internal/components/data-display/Chart/SpecChart.js +7 -7
- package/dist/_internal/components/data-display/Chart/chart-context.js +4 -4
- package/dist/_internal/components/data-display/Chart/chart-internals.js +2 -2
- package/dist/_internal/components/data-display/Chart/chart-renderers.js +5 -5
- package/dist/_internal/components/data-display/Chip/Chip.js +3 -3
- package/dist/_internal/components/data-display/Chip/Chip.styles.js +2 -2
- package/dist/_internal/components/data-display/DataGrid/DataGrid.js +5 -5
- package/dist/_internal/components/data-display/DataGrid/DataGrid.model.js +3 -3
- package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +39 -39
- package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +58 -58
- package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +3 -3
- package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +7 -7
- package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +9 -9
- package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +7 -7
- package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +6 -6
- package/dist/_internal/components/data-display/DataViews/base-list-card.js +8 -8
- package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +7 -7
- package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +6 -6
- package/dist/_internal/components/data-display/DataViews/data-views-display-tabs.js +4 -4
- package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +12 -12
- package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +10 -10
- package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +38 -38
- package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +13 -13
- package/dist/_internal/components/data-display/DataViews/data-views-layout-context.js +3 -3
- package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +10 -10
- package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +11 -11
- package/dist/_internal/components/data-display/DataViews/data-views-pagination.js +3 -3
- package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +2 -2
- package/dist/_internal/components/data-display/DataViews/data-views-scope-tabs.js +4 -4
- package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +8 -8
- package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +15 -15
- package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +7 -7
- package/dist/_internal/components/data-display/DataViews/list-card-rails.js +5 -5
- package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +1 -1
- package/dist/_internal/components/data-display/DataViews/use-saved-views-controller.js +2 -2
- package/dist/_internal/components/data-display/EmptyState/EmptyState.js +2 -2
- package/dist/_internal/components/data-display/FleetMap/FleetBody.js +5 -5
- package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +4 -4
- package/dist/_internal/components/data-display/FleetMap/FleetMap.js +11 -11
- package/dist/_internal/components/data-display/HoverCard/HoverCard.js +1 -1
- package/dist/_internal/components/data-display/InteractiveTooltip/InteractiveTooltip.js +2 -2
- package/dist/_internal/components/data-display/Lightbox/Lightbox.js +5 -5
- package/dist/_internal/components/data-display/Lightbox/LightboxControls.js +2 -2
- package/dist/_internal/components/data-display/Lightbox/LightboxOverlay.js +3 -3
- package/dist/_internal/components/data-display/Lightbox/LightboxThumbnails.js +2 -2
- package/dist/_internal/components/data-display/MapPreview/MapLayers.js +2 -2
- package/dist/_internal/components/data-display/MapPreview/MapPreview.js +3 -3
- package/dist/_internal/components/data-display/SectionOnboarding/SectionOnboarding.js +3 -3
- package/dist/_internal/components/data-display/Sheet/Sheet.body.js +2 -2
- package/dist/_internal/components/data-display/Sheet/Sheet.js +2 -2
- package/dist/_internal/components/data-display/Sheet/Sheet.styles.js +2 -2
- package/dist/_internal/components/data-display/Table/Table.js +4 -4
- package/dist/_internal/components/data-display/index.js +39 -39
- package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.js +2 -2
- package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +3 -3
- package/dist/_internal/components/feedback/ConfirmAction/with-confirmation.js +2 -2
- package/dist/_internal/components/feedback/Dialog/Dialog.js +2 -2
- package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +2 -2
- package/dist/_internal/components/feedback/StackedModal/StackedModal.js +2 -2
- package/dist/_internal/components/feedback/TutorialOverlay/TutorialOverlay.js +2 -2
- package/dist/_internal/components/feedback/index.js +15 -15
- package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +1 -1
- package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +1 -1
- package/dist/_internal/components/form/Autocomplete/Autocomplete.js +2 -2
- package/dist/_internal/components/form/Calendar/Calendar.js +4 -4
- package/dist/_internal/components/form/Calendar/CalendarDayCell.js +2 -2
- package/dist/_internal/components/form/Calendar/CalendarMonth.js +3 -3
- package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +3 -3
- package/dist/_internal/components/form/CategorySelect/CategorySelect.js +6 -6
- package/dist/_internal/components/form/CepField/CepField.js +3 -3
- package/dist/_internal/components/form/CodeEditor/CodeEditor.js +2 -2
- package/dist/_internal/components/form/Command/Command.js +2 -2
- package/dist/_internal/components/form/Command/Command.styles.js +2 -2
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +6 -6
- package/dist/_internal/components/form/Input/Input.js +2 -2
- package/dist/_internal/components/form/Label/Label.js +2 -2
- package/dist/_internal/components/form/Label/Label.styles.js +2 -2
- package/dist/_internal/components/form/Menubar/Menubar.item.js +2 -2
- package/dist/_internal/components/form/Menubar/Menubar.js +4 -4
- package/dist/_internal/components/form/Menubar/Menubar.styles.js +2 -2
- package/dist/_internal/components/form/Menubar/Menubar.toolbar.js +2 -2
- package/dist/_internal/components/form/NumberField/NumberField.js +3 -3
- package/dist/_internal/components/form/RichTextEditor/RichTextEditor.js +2 -2
- package/dist/_internal/components/form/Select/Select.js +5 -1
- package/dist/_internal/components/form/Select/Select.menu.js +25 -0
- package/dist/_internal/components/form/Select/Select.menu.js.map +1 -0
- package/dist/_internal/components/form/Switch/Switch.js +4 -4
- package/dist/_internal/components/form/Switch/Switch.parts.js +3 -3
- package/dist/_internal/components/form/Switch/Switch.styles.js +2 -2
- package/dist/_internal/components/form/index.js +44 -40
- package/dist/_internal/components/form/total-form/Fields/CategoryField.js +7 -7
- package/dist/_internal/components/form/total-form/Fields/CepField.js +4 -4
- package/dist/_internal/components/form/total-form/Fields/SelectField.js +3 -2
- package/dist/_internal/components/form/total-form/Fields/TextField.js +3 -3
- package/dist/_internal/components/form/total-form/Fields/index.js +18 -17
- package/dist/_internal/components/index.js +136 -132
- package/dist/_internal/components/layout/Box/Box.js +5 -5
- package/dist/_internal/components/layout/SettingCard/SettingCard.js +11 -11
- package/dist/_internal/components/layout/SettingCard/SettingCard.parts.js +10 -10
- package/dist/_internal/components/layout/SettingCard/SettingGrid.js +11 -11
- package/dist/_internal/components/layout/SettingCard/SettingGroup.js +17 -17
- package/dist/_internal/components/layout/SettingCard/SettingSwitch.js +15 -15
- package/dist/_internal/components/layout/SettingCard/SettingToggle.js +17 -17
- package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +4 -4
- package/dist/_internal/components/layout/SettingsLayout/SettingsPanel.js +3 -3
- package/dist/_internal/components/layout/SettingsLayout/SettingsSectionChips.js +2 -2
- package/dist/_internal/components/layout/Stack/Stack.js +6 -6
- package/dist/_internal/components/layout/index.js +28 -28
- package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +5 -5
- package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +2 -2
- package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.js +2 -2
- package/dist/_internal/components/navigation/Pagination/Pagination.js +2 -2
- package/dist/_internal/components/navigation/SectionNav/SectionNav.bar.js +2 -2
- package/dist/_internal/components/navigation/SectionNav/SectionNav.js +2 -2
- package/dist/_internal/components/navigation/SectionNav/SectionNav.parts.js +2 -2
- package/dist/_internal/components/navigation/SectionNav/SectionNav.primary.js +2 -2
- package/dist/_internal/components/navigation/SectionNav/SectionNav.rail.js +2 -2
- package/dist/_internal/components/navigation/SectionNav/SectionNav.sheet.js +2 -2
- package/dist/_internal/components/navigation/SectionNav/__stories__/fixtures.js +2 -2
- package/dist/_internal/components/navigation/index.js +20 -20
- package/dist/_internal/components/typography/index.js +4 -4
- package/dist/_internal/components/utility/InstallPrompt/InstallPrompt.js +3 -3
- package/dist/_internal/components/utility/InstallPrompt/usePwaInstall.js +2 -2
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.helpers.js +2 -2
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.js +2 -2
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.parts.js +2 -2
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStepRow.js +2 -2
- package/dist/_internal/components/utility/index.js +5 -5
- package/dist/_internal/icons/Icon.js +6 -6
- package/dist/_internal/provider/UiProvider.js +4 -4
- package/dist/_internal/provider/mui-bridge.js +3 -3
- package/dist/_internal/provider/use-ui-theme.js +4 -4
- package/dist/_internal/tokens/density-overrides.js +4 -4
- package/dist/_internal/tokens/density.js +2 -2
- package/dist/_internal/user-avatar/user-avatar.js +3 -3
- package/dist/charts.js +7 -7
- package/dist/{chunk-HI3VE276.js → chunk-25ALEQUH.js} +2 -2
- package/dist/{chunk-NF4GHTZ4.js → chunk-2AZZRWT6.js} +2 -2
- package/dist/{chunk-RYWX6LK4.js → chunk-3ASNSGIY.js} +2 -2
- package/dist/{chunk-2UPWKLHQ.js → chunk-3WWI75NM.js} +5 -5
- package/dist/{chunk-4CHYMTBT.js → chunk-4WCDMCIS.js} +4 -4
- package/dist/{chunk-S2GDYA6R.js → chunk-5GMHJ7Y5.js} +5 -5
- package/dist/{chunk-JSGVYOMN.js → chunk-5MW7OYBM.js} +2 -2
- package/dist/{chunk-Z4DKVLYG.js → chunk-5QDBSQP5.js} +5 -5
- package/dist/{chunk-SDKOOVEX.js → chunk-6GAZAJXB.js} +4 -4
- package/dist/{chunk-UD3WDCWD.js → chunk-6KFEDJOR.js} +4 -4
- package/dist/{chunk-77BKKPCI.js → chunk-6KLDYVRY.js} +2 -2
- package/dist/{chunk-66XTP3IT.js → chunk-6KOR5VOT.js} +7 -7
- package/dist/{chunk-F3AYISXT.js → chunk-6PU3JYVY.js} +4 -4
- package/dist/{chunk-TMW7RBW7.js → chunk-7DSYQCRE.js} +2 -2
- package/dist/{chunk-WMYLF7I2.js → chunk-7XKK2WOV.js} +2 -2
- package/dist/{chunk-ADSA76T7.js → chunk-AG3DY5TH.js} +2 -2
- package/dist/{chunk-WICZ3ZN2.js → chunk-AG4MGJPQ.js} +4 -4
- package/dist/{chunk-FRAW3ICP.js → chunk-ANVIO75O.js} +2 -2
- package/dist/{chunk-Z56F6M3G.js → chunk-B3JAQMAN.js} +4 -4
- package/dist/{chunk-X3C3VTYS.js → chunk-BEX3FLHB.js} +2 -2
- package/dist/{chunk-44USLRMT.js → chunk-BOH4JG25.js} +4 -4
- package/dist/{chunk-TTJTMDLI.js → chunk-CC46BCK2.js} +4 -4
- package/dist/{chunk-ALOUJ3CE.js → chunk-CE6K4FJY.js} +5 -5
- package/dist/{chunk-AV6NNCRO.js → chunk-CFSUOXC3.js} +13 -14
- package/dist/chunk-CFSUOXC3.js.map +1 -0
- package/dist/{chunk-XO4ZUHVH.js → chunk-CYPBF3BI.js} +2 -2
- package/dist/{chunk-2LQU7DRI.js → chunk-CZPPAEWT.js} +5 -5
- package/dist/{chunk-SQD4LGVK.js → chunk-D4OFFRQI.js} +6 -6
- package/dist/{chunk-GT6HPOS2.js → chunk-E4EXXYOR.js} +7 -7
- package/dist/{chunk-LCWGNDTH.js → chunk-EKBUM7HK.js} +4 -4
- package/dist/{chunk-3IPQANXY.js → chunk-ENFULRAR.js} +2 -2
- package/dist/{chunk-NDHDBOUH.js → chunk-FWPFCK4D.js} +4 -4
- package/dist/{chunk-XIWKN7DO.js → chunk-FYWG2I6N.js} +11 -11
- package/dist/{chunk-JVOV5WAJ.js → chunk-GLERUZKH.js} +4 -4
- package/dist/{chunk-IJAUHR3M.js → chunk-GOPQEGSW.js} +4 -4
- package/dist/{chunk-LGCRL7DK.js → chunk-GP4BJI3F.js} +2 -2
- package/dist/chunk-GUA7S6GD.js +21 -0
- package/dist/chunk-GUA7S6GD.js.map +1 -0
- package/dist/{chunk-CM2Q7IH3.js → chunk-HDZQIFHL.js} +6 -6
- package/dist/{chunk-4GRUNQNB.js → chunk-HGI56VCG.js} +2 -2
- package/dist/{chunk-GJRKWDRR.js → chunk-HI3D6H37.js} +4 -4
- package/dist/{chunk-2OEFIGH7.js → chunk-HJJNNRVM.js} +3 -3
- package/dist/{chunk-52MYWALU.js → chunk-HLRLSCBF.js} +2 -2
- package/dist/{chunk-4MKVGSHX.js → chunk-HN3PZTUK.js} +5 -5
- package/dist/{chunk-3AOOI2NR.js → chunk-HR7YTBR7.js} +4 -4
- package/dist/{chunk-GI63FQEJ.js → chunk-HYNDC3FP.js} +4 -4
- package/dist/{chunk-HRNDWD25.js → chunk-IAK37ABV.js} +2 -2
- package/dist/{chunk-G2WERTWZ.js → chunk-IGGXKT5B.js} +2 -2
- package/dist/{chunk-VZ4VAQX3.js → chunk-IVJKILIX.js} +2 -2
- package/dist/{chunk-PZKWFRGS.js → chunk-J77QXAKC.js} +7 -7
- package/dist/{chunk-6EJF3BUR.js → chunk-JBGCGYEC.js} +4 -4
- package/dist/{chunk-IABE56TG.js → chunk-JE6RZ5L6.js} +2 -2
- package/dist/{chunk-NU55QUMO.js → chunk-K45ML7M7.js} +2 -2
- package/dist/{chunk-HSNOWYEE.js → chunk-K7FSTB2K.js} +2 -2
- package/dist/{chunk-42GG3BPF.js → chunk-KLOKBS77.js} +2 -2
- package/dist/{chunk-3LB4ZIZS.js → chunk-KN3AFONJ.js} +4 -4
- package/dist/{chunk-H6K3AP42.js → chunk-KOBWXZNH.js} +2 -2
- package/dist/{chunk-VFLNP2ZZ.js → chunk-KT5BEZEK.js} +2 -2
- package/dist/{chunk-PAICZOL5.js → chunk-KTX7XME6.js} +4 -4
- package/dist/{chunk-4YL3TQ6C.js → chunk-LCHDXLF4.js} +5 -5
- package/dist/{chunk-RJTVUM5E.js → chunk-LJFHJZAH.js} +2 -2
- package/dist/{chunk-WGUY7EIB.js → chunk-LO4M5D7T.js} +4 -4
- package/dist/{chunk-PTXHQ2CI.js → chunk-LPCIVG5D.js} +4 -4
- package/dist/{chunk-3QGMAVUF.js → chunk-LPCPS5GZ.js} +4 -4
- package/dist/{chunk-5FHPZOYK.js → chunk-LVXPAL2U.js} +2 -2
- package/dist/{chunk-ODY3PINC.js → chunk-MA7WJHBS.js} +7 -7
- package/dist/{chunk-U6W2RY3Z.js → chunk-MLQYIJTO.js} +5 -5
- package/dist/{chunk-2H5SYAJW.js → chunk-MO55277P.js} +3 -3
- package/dist/{chunk-GPHURU2K.js → chunk-MSAAOQAD.js} +7 -7
- package/dist/{chunk-3MJHHPRW.js → chunk-MVR4GURP.js} +2 -2
- package/dist/{chunk-J5YNQZLQ.js → chunk-N6DO4CPZ.js} +2 -2
- package/dist/{chunk-H6OBK5QP.js → chunk-NDOOZ5OS.js} +2 -2
- package/dist/{chunk-POTI6A42.js → chunk-NJXDE6D3.js} +8 -8
- package/dist/{chunk-LXEQR6EI.js → chunk-NZIYHS6B.js} +7 -7
- package/dist/{chunk-POIKHQHR.js → chunk-O6BOEUWN.js} +2 -2
- package/dist/{chunk-IKXS2YVQ.js → chunk-P3B2LO2E.js} +5 -5
- package/dist/{chunk-XP522FFM.js → chunk-PARTZ7XI.js} +2 -2
- package/dist/{chunk-NYFGFELX.js → chunk-PGPPN63I.js} +6 -6
- package/dist/{chunk-RAEG4MA4.js → chunk-PQYXHMED.js} +2 -2
- package/dist/{chunk-RHKT2XW2.js → chunk-PRMVDSTL.js} +3 -3
- package/dist/{chunk-JJIEJI4C.js → chunk-PWPCFN62.js} +5 -5
- package/dist/{chunk-PGV2FLE3.js → chunk-PXYL7QEA.js} +3 -3
- package/dist/{chunk-YGYQC7MT.js → chunk-QOLIBVGS.js} +4 -4
- package/dist/{chunk-EONMVYVY.js → chunk-QQPA3AH6.js} +2 -2
- package/dist/{chunk-OZPLAOI4.js → chunk-RV26QUJS.js} +5 -5
- package/dist/{chunk-NPPJ3IJP.js → chunk-RVOEOJMZ.js} +2 -2
- package/dist/{chunk-FJZHHARA.js → chunk-SDPG5BXH.js} +3 -3
- package/dist/{chunk-B4Y6W3OU.js → chunk-SIHZBKWH.js} +2 -2
- package/dist/{chunk-CZBCOMOX.js → chunk-T7BTVBOE.js} +5 -5
- package/dist/{chunk-XXL4PM4M.js → chunk-TWVRPT7J.js} +2 -2
- package/dist/{chunk-P53KRCKW.js → chunk-TZASFX6G.js} +4 -4
- package/dist/{chunk-Z4O3F6KU.js → chunk-U4QUDFPJ.js} +4 -4
- package/dist/{chunk-54HTXJJ2.js → chunk-ULPPKHRL.js} +2 -2
- package/dist/{chunk-YTVXT5TD.js → chunk-URDVXJUH.js} +6 -6
- package/dist/{chunk-DLS5CUI3.js → chunk-UUJ7J7NE.js} +2 -2
- package/dist/{chunk-B3QWQG62.js → chunk-V54LG3QG.js} +2 -2
- package/dist/{chunk-INCTNS4X.js → chunk-VA2OKVF7.js} +2 -2
- package/dist/{chunk-NLGJXSGM.js → chunk-VQXOWQCU.js} +2 -2
- package/dist/{chunk-WHCNGWD2.js → chunk-VYYFIESL.js} +4 -4
- package/dist/{chunk-3PURWPNX.js → chunk-WCATRYXC.js} +2 -2
- package/dist/{chunk-JNAULEYH.js → chunk-WMKE2MAF.js} +5 -5
- package/dist/{chunk-VNOXUWK7.js → chunk-X5F4FRH7.js} +4 -4
- package/dist/{chunk-EF5XUS44.js → chunk-XLLJU5Q7.js} +2 -2
- package/dist/{chunk-IITZA6U2.js → chunk-ZBVU2YWV.js} +9 -9
- package/dist/{chunk-SV4FYSDL.js → chunk-ZDMQDTSH.js} +4 -4
- package/dist/{chunk-SHAEK26Y.js → chunk-ZGCPDA3F.js} +2 -2
- package/dist/data-display/AsyncStateContainer.js +3 -3
- package/dist/data-display/Avatar.js +2 -2
- package/dist/data-display/Badge.js +2 -2
- package/dist/data-display/CardKit.js +16 -16
- package/dist/data-display/Carousel.js +5 -5
- package/dist/data-display/Chart.js +7 -7
- package/dist/data-display/Chip.js +3 -3
- package/dist/data-display/DataGrid.js +5 -5
- package/dist/data-display/DataViews.js +68 -68
- package/dist/data-display/EmptyState.js +2 -2
- package/dist/data-display/FleetMap.js +11 -11
- package/dist/data-display/HoverCard.js +1 -1
- package/dist/data-display/InteractiveTooltip.js +2 -2
- package/dist/data-display/Lightbox.js +5 -5
- package/dist/data-display/MapPreview.js +3 -3
- package/dist/data-display/SectionOnboarding.js +3 -3
- package/dist/data-display/Sheet.js +2 -2
- package/dist/data-display/Table.js +4 -4
- package/dist/feedback/ConfirmAction.js +7 -7
- package/dist/feedback/Dialog.js +2 -2
- package/dist/feedback/NotificationStatusNotice.js +2 -2
- package/dist/feedback/StackedModal.js +2 -2
- package/dist/feedback/TutorialOverlay.js +2 -2
- package/dist/form/AddressAutocomplete.js +1 -1
- package/dist/form/Autocomplete.js +2 -2
- package/dist/form/Calendar.js +4 -4
- package/dist/form/CategorySelect.js +6 -6
- package/dist/form/CepField.js +3 -3
- package/dist/form/CodeEditor.js +2 -2
- package/dist/form/Command.js +2 -2
- package/dist/form/DateRangePicker.js +6 -6
- package/dist/form/Input.js +2 -2
- package/dist/form/Label.js +2 -2
- package/dist/form/MenuSelect.js +25 -0
- package/dist/form/MenuSelect.js.map +1 -0
- package/dist/form/Menubar.js +4 -4
- package/dist/form/NumberField.js +3 -3
- package/dist/form/RichTextEditor.js +2 -2
- package/dist/form/Select.js +5 -1
- package/dist/form/Switch.js +4 -4
- package/dist/form/total-form.js +18 -17
- package/dist/icons.js +6 -6
- package/dist/layout/Box.js +5 -5
- package/dist/layout/SettingCard.js +23 -23
- package/dist/layout/SettingsLayout.js +4 -4
- package/dist/layout/Stack.js +6 -6
- package/dist/locales.js +45 -45
- package/dist/navigation/AppHeader.js +9 -9
- package/dist/navigation/NavigationMenu.js +2 -2
- package/dist/navigation/Pagination.js +2 -2
- package/dist/navigation/SectionNav.js +2 -2
- package/dist/provider.js +5 -5
- package/dist/pt-BR.js +21 -21
- package/dist/tokens.js +5 -5
- package/dist/types/components/form/Select/Select.d.ts +2 -0
- package/dist/types/components/form/Select/Select.d.ts.map +1 -1
- package/dist/types/components/form/Select/Select.menu.d.ts +15 -0
- package/dist/types/components/form/Select/Select.menu.d.ts.map +1 -0
- package/dist/types/components/form/Select/Select.types.d.ts +5 -0
- package/dist/types/components/form/Select/Select.types.d.ts.map +1 -1
- package/dist/types/components/form/Select/index.d.ts +2 -2
- package/dist/types/components/form/Select/index.d.ts.map +1 -1
- package/dist/types/components/form/Select/menu.d.ts +7 -0
- package/dist/types/components/form/Select/menu.d.ts.map +1 -0
- package/dist/user-avatar.js +3 -3
- package/dist/utility/InstallPrompt.js +3 -3
- package/dist/utility/WorkflowStep.js +2 -2
- package/package.json +5 -1
- package/src/components/form/Select/Select.md +16 -0
- package/src/components/form/Select/Select.menu.tsx +152 -0
- package/src/components/form/Select/Select.tsx +4 -128
- package/src/components/form/Select/Select.types.ts +6 -0
- package/src/components/form/Select/index.ts +2 -1
- package/src/components/form/Select/menu.ts +13 -0
- package/dist/chunk-AV6NNCRO.js.map +0 -1
- /package/dist/{chunk-HI3VE276.js.map → chunk-25ALEQUH.js.map} +0 -0
- /package/dist/{chunk-NF4GHTZ4.js.map → chunk-2AZZRWT6.js.map} +0 -0
- /package/dist/{chunk-RYWX6LK4.js.map → chunk-3ASNSGIY.js.map} +0 -0
- /package/dist/{chunk-2UPWKLHQ.js.map → chunk-3WWI75NM.js.map} +0 -0
- /package/dist/{chunk-4CHYMTBT.js.map → chunk-4WCDMCIS.js.map} +0 -0
- /package/dist/{chunk-S2GDYA6R.js.map → chunk-5GMHJ7Y5.js.map} +0 -0
- /package/dist/{chunk-JSGVYOMN.js.map → chunk-5MW7OYBM.js.map} +0 -0
- /package/dist/{chunk-Z4DKVLYG.js.map → chunk-5QDBSQP5.js.map} +0 -0
- /package/dist/{chunk-SDKOOVEX.js.map → chunk-6GAZAJXB.js.map} +0 -0
- /package/dist/{chunk-UD3WDCWD.js.map → chunk-6KFEDJOR.js.map} +0 -0
- /package/dist/{chunk-77BKKPCI.js.map → chunk-6KLDYVRY.js.map} +0 -0
- /package/dist/{chunk-66XTP3IT.js.map → chunk-6KOR5VOT.js.map} +0 -0
- /package/dist/{chunk-F3AYISXT.js.map → chunk-6PU3JYVY.js.map} +0 -0
- /package/dist/{chunk-TMW7RBW7.js.map → chunk-7DSYQCRE.js.map} +0 -0
- /package/dist/{chunk-WMYLF7I2.js.map → chunk-7XKK2WOV.js.map} +0 -0
- /package/dist/{chunk-ADSA76T7.js.map → chunk-AG3DY5TH.js.map} +0 -0
- /package/dist/{chunk-WICZ3ZN2.js.map → chunk-AG4MGJPQ.js.map} +0 -0
- /package/dist/{chunk-FRAW3ICP.js.map → chunk-ANVIO75O.js.map} +0 -0
- /package/dist/{chunk-Z56F6M3G.js.map → chunk-B3JAQMAN.js.map} +0 -0
- /package/dist/{chunk-X3C3VTYS.js.map → chunk-BEX3FLHB.js.map} +0 -0
- /package/dist/{chunk-44USLRMT.js.map → chunk-BOH4JG25.js.map} +0 -0
- /package/dist/{chunk-TTJTMDLI.js.map → chunk-CC46BCK2.js.map} +0 -0
- /package/dist/{chunk-ALOUJ3CE.js.map → chunk-CE6K4FJY.js.map} +0 -0
- /package/dist/{chunk-XO4ZUHVH.js.map → chunk-CYPBF3BI.js.map} +0 -0
- /package/dist/{chunk-2LQU7DRI.js.map → chunk-CZPPAEWT.js.map} +0 -0
- /package/dist/{chunk-SQD4LGVK.js.map → chunk-D4OFFRQI.js.map} +0 -0
- /package/dist/{chunk-GT6HPOS2.js.map → chunk-E4EXXYOR.js.map} +0 -0
- /package/dist/{chunk-LCWGNDTH.js.map → chunk-EKBUM7HK.js.map} +0 -0
- /package/dist/{chunk-3IPQANXY.js.map → chunk-ENFULRAR.js.map} +0 -0
- /package/dist/{chunk-NDHDBOUH.js.map → chunk-FWPFCK4D.js.map} +0 -0
- /package/dist/{chunk-XIWKN7DO.js.map → chunk-FYWG2I6N.js.map} +0 -0
- /package/dist/{chunk-JVOV5WAJ.js.map → chunk-GLERUZKH.js.map} +0 -0
- /package/dist/{chunk-IJAUHR3M.js.map → chunk-GOPQEGSW.js.map} +0 -0
- /package/dist/{chunk-LGCRL7DK.js.map → chunk-GP4BJI3F.js.map} +0 -0
- /package/dist/{chunk-CM2Q7IH3.js.map → chunk-HDZQIFHL.js.map} +0 -0
- /package/dist/{chunk-4GRUNQNB.js.map → chunk-HGI56VCG.js.map} +0 -0
- /package/dist/{chunk-GJRKWDRR.js.map → chunk-HI3D6H37.js.map} +0 -0
- /package/dist/{chunk-2OEFIGH7.js.map → chunk-HJJNNRVM.js.map} +0 -0
- /package/dist/{chunk-52MYWALU.js.map → chunk-HLRLSCBF.js.map} +0 -0
- /package/dist/{chunk-4MKVGSHX.js.map → chunk-HN3PZTUK.js.map} +0 -0
- /package/dist/{chunk-3AOOI2NR.js.map → chunk-HR7YTBR7.js.map} +0 -0
- /package/dist/{chunk-GI63FQEJ.js.map → chunk-HYNDC3FP.js.map} +0 -0
- /package/dist/{chunk-HRNDWD25.js.map → chunk-IAK37ABV.js.map} +0 -0
- /package/dist/{chunk-G2WERTWZ.js.map → chunk-IGGXKT5B.js.map} +0 -0
- /package/dist/{chunk-VZ4VAQX3.js.map → chunk-IVJKILIX.js.map} +0 -0
- /package/dist/{chunk-PZKWFRGS.js.map → chunk-J77QXAKC.js.map} +0 -0
- /package/dist/{chunk-6EJF3BUR.js.map → chunk-JBGCGYEC.js.map} +0 -0
- /package/dist/{chunk-IABE56TG.js.map → chunk-JE6RZ5L6.js.map} +0 -0
- /package/dist/{chunk-NU55QUMO.js.map → chunk-K45ML7M7.js.map} +0 -0
- /package/dist/{chunk-HSNOWYEE.js.map → chunk-K7FSTB2K.js.map} +0 -0
- /package/dist/{chunk-42GG3BPF.js.map → chunk-KLOKBS77.js.map} +0 -0
- /package/dist/{chunk-3LB4ZIZS.js.map → chunk-KN3AFONJ.js.map} +0 -0
- /package/dist/{chunk-H6K3AP42.js.map → chunk-KOBWXZNH.js.map} +0 -0
- /package/dist/{chunk-VFLNP2ZZ.js.map → chunk-KT5BEZEK.js.map} +0 -0
- /package/dist/{chunk-PAICZOL5.js.map → chunk-KTX7XME6.js.map} +0 -0
- /package/dist/{chunk-4YL3TQ6C.js.map → chunk-LCHDXLF4.js.map} +0 -0
- /package/dist/{chunk-RJTVUM5E.js.map → chunk-LJFHJZAH.js.map} +0 -0
- /package/dist/{chunk-WGUY7EIB.js.map → chunk-LO4M5D7T.js.map} +0 -0
- /package/dist/{chunk-PTXHQ2CI.js.map → chunk-LPCIVG5D.js.map} +0 -0
- /package/dist/{chunk-3QGMAVUF.js.map → chunk-LPCPS5GZ.js.map} +0 -0
- /package/dist/{chunk-5FHPZOYK.js.map → chunk-LVXPAL2U.js.map} +0 -0
- /package/dist/{chunk-ODY3PINC.js.map → chunk-MA7WJHBS.js.map} +0 -0
- /package/dist/{chunk-U6W2RY3Z.js.map → chunk-MLQYIJTO.js.map} +0 -0
- /package/dist/{chunk-2H5SYAJW.js.map → chunk-MO55277P.js.map} +0 -0
- /package/dist/{chunk-GPHURU2K.js.map → chunk-MSAAOQAD.js.map} +0 -0
- /package/dist/{chunk-3MJHHPRW.js.map → chunk-MVR4GURP.js.map} +0 -0
- /package/dist/{chunk-J5YNQZLQ.js.map → chunk-N6DO4CPZ.js.map} +0 -0
- /package/dist/{chunk-H6OBK5QP.js.map → chunk-NDOOZ5OS.js.map} +0 -0
- /package/dist/{chunk-POTI6A42.js.map → chunk-NJXDE6D3.js.map} +0 -0
- /package/dist/{chunk-LXEQR6EI.js.map → chunk-NZIYHS6B.js.map} +0 -0
- /package/dist/{chunk-POIKHQHR.js.map → chunk-O6BOEUWN.js.map} +0 -0
- /package/dist/{chunk-IKXS2YVQ.js.map → chunk-P3B2LO2E.js.map} +0 -0
- /package/dist/{chunk-XP522FFM.js.map → chunk-PARTZ7XI.js.map} +0 -0
- /package/dist/{chunk-NYFGFELX.js.map → chunk-PGPPN63I.js.map} +0 -0
- /package/dist/{chunk-RAEG4MA4.js.map → chunk-PQYXHMED.js.map} +0 -0
- /package/dist/{chunk-RHKT2XW2.js.map → chunk-PRMVDSTL.js.map} +0 -0
- /package/dist/{chunk-JJIEJI4C.js.map → chunk-PWPCFN62.js.map} +0 -0
- /package/dist/{chunk-PGV2FLE3.js.map → chunk-PXYL7QEA.js.map} +0 -0
- /package/dist/{chunk-YGYQC7MT.js.map → chunk-QOLIBVGS.js.map} +0 -0
- /package/dist/{chunk-EONMVYVY.js.map → chunk-QQPA3AH6.js.map} +0 -0
- /package/dist/{chunk-OZPLAOI4.js.map → chunk-RV26QUJS.js.map} +0 -0
- /package/dist/{chunk-NPPJ3IJP.js.map → chunk-RVOEOJMZ.js.map} +0 -0
- /package/dist/{chunk-FJZHHARA.js.map → chunk-SDPG5BXH.js.map} +0 -0
- /package/dist/{chunk-B4Y6W3OU.js.map → chunk-SIHZBKWH.js.map} +0 -0
- /package/dist/{chunk-CZBCOMOX.js.map → chunk-T7BTVBOE.js.map} +0 -0
- /package/dist/{chunk-XXL4PM4M.js.map → chunk-TWVRPT7J.js.map} +0 -0
- /package/dist/{chunk-P53KRCKW.js.map → chunk-TZASFX6G.js.map} +0 -0
- /package/dist/{chunk-Z4O3F6KU.js.map → chunk-U4QUDFPJ.js.map} +0 -0
- /package/dist/{chunk-54HTXJJ2.js.map → chunk-ULPPKHRL.js.map} +0 -0
- /package/dist/{chunk-YTVXT5TD.js.map → chunk-URDVXJUH.js.map} +0 -0
- /package/dist/{chunk-DLS5CUI3.js.map → chunk-UUJ7J7NE.js.map} +0 -0
- /package/dist/{chunk-B3QWQG62.js.map → chunk-V54LG3QG.js.map} +0 -0
- /package/dist/{chunk-INCTNS4X.js.map → chunk-VA2OKVF7.js.map} +0 -0
- /package/dist/{chunk-NLGJXSGM.js.map → chunk-VQXOWQCU.js.map} +0 -0
- /package/dist/{chunk-WHCNGWD2.js.map → chunk-VYYFIESL.js.map} +0 -0
- /package/dist/{chunk-3PURWPNX.js.map → chunk-WCATRYXC.js.map} +0 -0
- /package/dist/{chunk-JNAULEYH.js.map → chunk-WMKE2MAF.js.map} +0 -0
- /package/dist/{chunk-VNOXUWK7.js.map → chunk-X5F4FRH7.js.map} +0 -0
- /package/dist/{chunk-EF5XUS44.js.map → chunk-XLLJU5Q7.js.map} +0 -0
- /package/dist/{chunk-IITZA6U2.js.map → chunk-ZBVU2YWV.js.map} +0 -0
- /package/dist/{chunk-SV4FYSDL.js.map → chunk-ZDMQDTSH.js.map} +0 -0
- /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
|
-
|
|
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'>;
|
|
@@ -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":[]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|