@12-apps/ui 6.21.0 → 6.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NATIVE.md +6 -4
- package/dist/_internal/components/data-display/Alert/Alert.js +4 -4
- package/dist/_internal/components/data-display/Alert/Alert.styles.js +2 -2
- package/dist/_internal/components/data-display/AsyncStateContainer/AsyncStateContainer.js +7 -7
- package/dist/_internal/components/data-display/Avatar/Avatar.js +2 -2
- package/dist/_internal/components/data-display/Badge/Badge.js +3 -3
- package/dist/_internal/components/data-display/CardKit/CardKebab.js +4 -4
- package/dist/_internal/components/data-display/CardKit/card-actions-context.js +5 -5
- package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +10 -10
- package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +5 -5
- package/dist/_internal/components/data-display/Carousel/Carousel.js +2 -2
- package/dist/_internal/components/data-display/Chart/Chart.js +4 -4
- package/dist/_internal/components/data-display/Chart/SpecChart.js +6 -6
- package/dist/_internal/components/data-display/Chart/chart-context.js +2 -2
- package/dist/_internal/components/data-display/Chart/chart-renderers.js +3 -3
- package/dist/_internal/components/data-display/DataGrid/DataGrid.js +2 -2
- package/dist/_internal/components/data-display/DataViews/DataViewsBoard.js +3 -3
- package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +49 -49
- package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +68 -65
- package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +10 -7
- package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +12 -9
- package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +14 -11
- package/dist/_internal/components/data-display/DataViews/base-card.js +9 -7
- package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +7 -7
- package/dist/_internal/components/data-display/DataViews/base-list-card-gutters.js +3 -3
- 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 +15 -13
- package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +12 -12
- package/dist/_internal/components/data-display/DataViews/data-views-columns-tab.js +3 -3
- package/dist/_internal/components/data-display/DataViews/data-views-columns.js +5 -5
- package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +8 -8
- package/dist/_internal/components/data-display/DataViews/data-views-display-tabs.js +3 -3
- package/dist/_internal/components/data-display/DataViews/data-views-empty.js +5 -5
- package/dist/_internal/components/data-display/DataViews/data-views-export.js +5 -5
- package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +18 -18
- package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +12 -12
- package/dist/_internal/components/data-display/DataViews/data-views-grid-helpers.js +4 -4
- package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +44 -44
- package/dist/_internal/components/data-display/DataViews/data-views-header-row.js +3 -3
- package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +22 -22
- package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +7 -7
- package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +10 -10
- package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +3 -3
- package/dist/_internal/components/data-display/DataViews/data-views-select-all-strip.js +5 -5
- package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +13 -13
- package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +22 -19
- package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +12 -12
- package/dist/_internal/components/data-display/DataViews/data-views-view-nav.js +5 -5
- package/dist/_internal/components/data-display/DataViews/list-card-rails.js +2 -2
- package/dist/_internal/components/data-display/DataViews/save-view-preview.js +3 -3
- package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +8 -8
- package/dist/_internal/components/data-display/DescriptionItem/DescriptionItem.js +3 -3
- package/dist/_internal/components/data-display/EmptyState/EmptyState.js +2 -2
- package/dist/_internal/components/data-display/ErrorState/ErrorState.js +2 -2
- package/dist/_internal/components/data-display/HoverCard/HoverCard.js +2 -2
- package/dist/_internal/components/data-display/LazyImage/LazyImage.js +4 -4
- package/dist/_internal/components/data-display/Lightbox/Lightbox.js +3 -3
- package/dist/_internal/components/data-display/LoadingState/LoadingState.js +4 -4
- package/dist/_internal/components/data-display/MapPreview/MapDecorations.js +2 -2
- package/dist/_internal/components/data-display/MapPreview/MapLayers.js +2 -2
- package/dist/_internal/components/data-display/MapPreview/MapPreview.hooks.js +2 -2
- package/dist/_internal/components/data-display/MapPreview/MapPreview.js +9 -9
- package/dist/_internal/components/data-display/MapPreview/MapTiles.js +2 -2
- package/dist/_internal/components/data-display/MapPreview/StaticMapView.js +4 -4
- package/dist/_internal/components/data-display/MapPreview/useMapPreview.js +3 -3
- package/dist/_internal/components/data-display/Progress/Progress.js +2 -2
- package/dist/_internal/components/data-display/SectionOnboarding/SectionOnboarding.js +3 -3
- package/dist/_internal/components/data-display/Sheet/Sheet.hooks.js +2 -2
- package/dist/_internal/components/data-display/Sheet/Sheet.js +3 -3
- package/dist/_internal/components/data-display/StatCard/StatCard.js +4 -4
- package/dist/_internal/components/data-display/Table/Table.js +3 -3
- package/dist/_internal/components/data-display/index.js +51 -51
- package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +4 -4
- package/dist/_internal/components/feedback/Dialog/Dialog.base.js +1 -0
- package/dist/_internal/components/feedback/Dialog/Dialog.base.js.map +1 -0
- package/dist/_internal/components/feedback/Dialog/Dialog.helpers.js +12 -0
- package/dist/_internal/components/feedback/Dialog/Dialog.helpers.js.map +1 -0
- package/dist/_internal/components/feedback/Dialog/Dialog.js +6 -2
- package/dist/_internal/components/feedback/Dialog/Dialog.metrics.js +42 -0
- package/dist/_internal/components/feedback/Dialog/Dialog.metrics.js.map +1 -0
- package/dist/_internal/components/feedback/Dialog/Dialog.styles.js +3 -1
- package/dist/_internal/components/feedback/Modal/Modal.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 +18 -15
- package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +5 -5
- package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +3 -3
- package/dist/_internal/components/form/Autocomplete/Autocomplete.js +2 -2
- package/dist/_internal/components/form/Button/Button.js +3 -3
- 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 +6 -6
- package/dist/_internal/components/form/CategorySelect/CategoryPanelList.js +3 -3
- package/dist/_internal/components/form/CategorySelect/CategoryRows.js +2 -2
- package/dist/_internal/components/form/CategorySelect/CategorySelect.js +10 -10
- package/dist/_internal/components/form/CepField/CepField.js +4 -4
- package/dist/_internal/components/form/Checkbox/Checkbox.js +2 -2
- package/dist/_internal/components/form/CodeEditor/CodeEditor.js +2 -2
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +7 -7
- package/dist/_internal/components/form/Input/Input.js +3 -3
- package/dist/_internal/components/form/Label/Label.js +2 -2
- package/dist/_internal/components/form/Menubar/Menubar.js +5 -5
- package/dist/_internal/components/form/Menubar/Menubar.toolbar.js +2 -2
- package/dist/_internal/components/form/Select/Select.js +2 -2
- package/dist/_internal/components/form/Switch/Switch.js +2 -2
- package/dist/_internal/components/form/index.js +32 -32
- package/dist/_internal/components/form/total-form/Fields/CategoryField.js +11 -11
- package/dist/_internal/components/form/total-form/Fields/CepField.js +5 -5
- package/dist/_internal/components/form/total-form/Fields/SelectField.js +3 -3
- package/dist/_internal/components/form/total-form/Fields/TextField.js +4 -4
- package/dist/_internal/components/form/total-form/Fields/index.js +24 -24
- package/dist/_internal/components/form/total-form/SubmitButton.js +4 -4
- package/dist/_internal/components/index.js +115 -111
- package/dist/_internal/components/layout/Box/Box.js +2 -2
- package/dist/_internal/components/layout/Card/Card.base.js +1 -0
- package/dist/_internal/components/layout/Card/Card.base.js.map +1 -0
- package/dist/_internal/components/layout/Card/Card.helpers.js +1 -1
- package/dist/_internal/components/layout/Card/Card.js +6 -3
- package/dist/_internal/components/layout/Card/Card.metrics.js +44 -0
- package/dist/_internal/components/layout/Card/Card.metrics.js.map +1 -0
- package/dist/_internal/components/layout/Card/Card.styles.js +3 -1
- package/dist/_internal/components/layout/Container/Container.js +2 -2
- package/dist/_internal/components/layout/Skeleton/Skeleton.js +3 -3
- package/dist/_internal/components/layout/Spacer/Spacer.js +2 -2
- package/dist/_internal/components/layout/Stack/Stack.js +3 -3
- package/dist/_internal/components/layout/index.js +13 -11
- package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +12 -9
- package/dist/_internal/components/navigation/CommandPalette/CommandPalette.js +2 -2
- package/dist/_internal/components/navigation/index.js +14 -11
- package/dist/_internal/components/typography/Heading/Heading.js +2 -2
- package/dist/_internal/components/typography/Paragraph/Paragraph.js +2 -2
- package/dist/_internal/components/typography/Text/Text.js +2 -2
- package/dist/_internal/components/typography/index.js +4 -4
- package/dist/_internal/components/utility/InfiniteScroll/InfiniteScroll.js +2 -2
- package/dist/_internal/components/utility/InstallPrompt/InstallPrompt.js +2 -2
- package/dist/_internal/components/utility/index.js +4 -4
- package/dist/_internal/icons/Icon.js +2 -2
- package/dist/_internal/platform/test-id.js +3 -1
- package/dist/_internal/social-login-button/social-login-button.js +11 -9
- package/dist/_internal/tokens/mui-type.js +1 -0
- package/dist/_internal/tokens/mui-type.js.map +1 -1
- package/dist/_internal/tokens/shadow.js +18 -0
- package/dist/_internal/tokens/shadow.js.map +1 -0
- package/dist/_internal/user-avatar/user-avatar.js +12 -10
- package/dist/charts.js +6 -6
- package/dist/{chunk-P7FQUGED.js → chunk-23FCBIUN.js} +8 -8
- package/dist/{chunk-NUE774AN.js → chunk-25R3ITGZ.js} +2 -2
- package/dist/{chunk-Z6UEOSL7.js → chunk-2FDBR77W.js} +3 -3
- package/dist/{chunk-IFNK5TPI.js → chunk-2HPP6RVC.js} +2 -2
- package/dist/{chunk-6RGWDKUL.js → chunk-2MMEIN4T.js} +4 -4
- package/dist/{chunk-YRUCIKPO.js → chunk-2UYR2OOE.js} +4 -4
- package/dist/{chunk-26Z7QWID.js → chunk-343TTIHD.js} +2 -2
- package/dist/{chunk-BRSF5NRT.js → chunk-3FLVIVOK.js} +4 -4
- package/dist/{chunk-BDVNAU2C.js → chunk-4523RYE7.js} +5 -5
- package/dist/{chunk-4ETQRBZC.js → chunk-46UPILLK.js} +4 -4
- package/dist/{chunk-I3MDKPGG.js → chunk-4IVOHL32.js} +2 -2
- package/dist/{chunk-TLX66HCW.js → chunk-4OHRZW7U.js} +5 -5
- package/dist/{chunk-2QFTAGDH.js → chunk-4X4KM4ZB.js} +4 -4
- package/dist/{chunk-6PRA45LC.js → chunk-5KEMPCW4.js} +54 -45
- package/dist/chunk-5KEMPCW4.js.map +1 -0
- package/dist/{chunk-CXVMD6FE.js → chunk-5NKUYCZD.js} +4 -4
- package/dist/{chunk-77F36LQQ.js → chunk-5OIH36KX.js} +3 -3
- package/dist/{chunk-4MLDWACO.js → chunk-5ZTUP65G.js} +10 -10
- package/dist/{chunk-GDEXYUPF.js → chunk-67L7HMEP.js} +2 -2
- package/dist/{chunk-ZFPJBKVZ.js → chunk-6JGPPTLX.js} +5 -5
- package/dist/{chunk-PF5HDFYY.js → chunk-6NZTYZP5.js} +4 -4
- package/dist/chunk-6Q6T3FW5.js +92 -0
- package/dist/chunk-6Q6T3FW5.js.map +1 -0
- package/dist/chunk-73BEVJCS.js +28 -0
- package/dist/chunk-73BEVJCS.js.map +1 -0
- package/dist/{chunk-I7HYGIEJ.js → chunk-7BYFC2MR.js} +6 -6
- package/dist/{chunk-D4T646G4.js → chunk-7NSX7A5H.js} +2 -2
- package/dist/{chunk-OH3YGJT5.js → chunk-7TZ6OC5T.js} +2 -2
- package/dist/{chunk-QS7ZGRNS.js → chunk-7VN7LFBA.js} +6 -6
- package/dist/{chunk-GBNOYRLP.js → chunk-AEGXHZQT.js} +8 -8
- package/dist/{chunk-G2IPK2XE.js → chunk-AGSBIUPV.js} +11 -11
- package/dist/{chunk-D2IASECY.js → chunk-AIRWM7KK.js} +39 -28
- package/dist/chunk-AIRWM7KK.js.map +1 -0
- package/dist/{chunk-65DLYC4S.js → chunk-AVGTTWTE.js} +4 -4
- package/dist/{chunk-PXH24VIP.js → chunk-B6IURHSZ.js} +4 -4
- package/dist/chunk-BEBLRL5D.js +177 -0
- package/dist/chunk-BEBLRL5D.js.map +1 -0
- package/dist/{chunk-B3BK2SNS.js → chunk-C3CMEDSO.js} +2 -2
- package/dist/{chunk-JIINGMEB.js → chunk-CHPZTF34.js} +7 -7
- package/dist/{chunk-PWXL3QQ6.js → chunk-CJBBGMIA.js} +2 -2
- package/dist/{chunk-BPYPUEM5.js → chunk-CZJLWCEG.js} +2 -2
- package/dist/{chunk-BEGWE5O4.js → chunk-DTC224UJ.js} +4 -4
- package/dist/{chunk-UB76PBDF.js → chunk-DVFIE54C.js} +2 -2
- package/dist/{chunk-KT6HWAEN.js → chunk-DVUPIVI2.js} +4 -4
- package/dist/{chunk-GO4MVQGC.js → chunk-DW5FRWRQ.js} +2 -2
- package/dist/{chunk-6Z4H2Y77.js → chunk-E27Y7FF2.js} +4 -4
- package/dist/{chunk-PANMJFDS.js → chunk-E55CJV65.js} +2 -2
- package/dist/{chunk-TPIBJP4S.js → chunk-EOHKZGOZ.js} +2 -2
- package/dist/{chunk-SHDIZSN5.js → chunk-EXJBPKGW.js} +5 -5
- package/dist/{chunk-DH75UNF3.js → chunk-FGK2C7JR.js} +2 -2
- package/dist/{chunk-RI5JZLZL.js → chunk-FKUYRQSP.js} +1 -1
- package/dist/chunk-FKUYRQSP.js.map +1 -0
- package/dist/{chunk-OOGEYCJH.js → chunk-FL54G7PV.js} +2 -2
- package/dist/{chunk-AD776JPA.js → chunk-FR67FG2U.js} +2 -2
- package/dist/{chunk-SHQWIDD5.js → chunk-GJQYM3PM.js} +4 -4
- package/dist/{chunk-WROCSDVL.js → chunk-GSFNH4C5.js} +5 -5
- package/dist/chunk-GYXUCS37.js +36 -0
- package/dist/chunk-GYXUCS37.js.map +1 -0
- package/dist/{chunk-Z5ABJLTM.js → chunk-HFXTAEYY.js} +2 -2
- package/dist/{chunk-BLBOYCOV.js → chunk-HKV4MQ2W.js} +5 -5
- package/dist/{chunk-FOMK3WPG.js → chunk-HLYPI5CO.js} +4 -4
- package/dist/{chunk-GBRKP5GZ.js → chunk-I5SBTNV2.js} +2 -2
- package/dist/{chunk-V5P5Q6HM.js → chunk-J4W4TQPC.js} +6 -6
- package/dist/{chunk-RRO2EOJB.js → chunk-JB67KPGM.js} +4 -4
- package/dist/{chunk-5ZOJLYD2.js → chunk-JE6RZ5L6.js} +4 -4
- package/dist/{chunk-4HYXEMBP.js → chunk-JIKWZDNK.js} +2 -2
- package/dist/{chunk-2QLVUVVR.js → chunk-JSH3HFDQ.js} +2 -2
- package/dist/{chunk-TZ4SFX3M.js → chunk-JWW2Z3RH.js} +4 -4
- package/dist/{chunk-QFHH2NU5.js → chunk-JXNT5TUP.js} +3 -3
- package/dist/{chunk-OCXCH2ZW.js → chunk-KTK4A3IF.js} +12 -12
- package/dist/{chunk-ZXLIWOXC.js → chunk-LS4FMSHY.js} +5 -5
- package/dist/{chunk-SFAP5EH5.js → chunk-LUMF63BM.js} +4 -4
- package/dist/{chunk-CZPU5TW3.js → chunk-LYSSO6WC.js} +4 -4
- package/dist/{chunk-736HP6BL.js → chunk-M4LQRQFL.js} +2 -2
- package/dist/{chunk-426FTCMF.js → chunk-MESRKY67.js} +2 -2
- package/dist/{chunk-B5PYBEXO.js → chunk-MP4VSWHK.js} +2 -2
- package/dist/{chunk-VWGR5XUP.js → chunk-NWNSUHEB.js} +2 -2
- package/dist/{chunk-4K7FDVAB.js → chunk-O3336DJ6.js} +2 -2
- package/dist/{chunk-YCCKY5VW.js → chunk-OFOYMZRY.js} +4 -4
- package/dist/{chunk-QZDBWXZG.js → chunk-OP65D4UR.js} +2 -2
- package/dist/{chunk-BQQONDW5.js → chunk-OVLNF4AZ.js} +6 -6
- package/dist/{chunk-ZTZ6S5Q6.js → chunk-OXQP3N6X.js} +4 -4
- package/dist/{chunk-3UOHKHOT.js → chunk-PFV6RL4Q.js} +3 -3
- package/dist/{chunk-DF2FFYZ7.js → chunk-PMS3H3OO.js} +4 -4
- package/dist/{chunk-AGYGNNOM.js → chunk-PQECNGDE.js} +2 -2
- package/dist/{chunk-IIROZKW5.js → chunk-PRUSQQDT.js} +2 -2
- package/dist/{chunk-IPE5FFFD.js → chunk-PUBPZOQJ.js} +2 -2
- package/dist/{chunk-7KTU6YMQ.js → chunk-Q75SJ35X.js} +5 -5
- package/dist/{chunk-FINCVAAR.js → chunk-QFJRB27Q.js} +4 -4
- package/dist/{chunk-FB36IHCE.js → chunk-QFVFHIHE.js} +8 -8
- package/dist/{chunk-IH4RSRQA.js → chunk-QKIJ6YXZ.js} +4 -4
- package/dist/{chunk-UOPQOBQZ.js → chunk-QWDEOITU.js} +3 -3
- package/dist/{chunk-WBKWIFXA.js → chunk-QYNCPS5W.js} +6 -6
- package/dist/{chunk-XEE7PLDR.js → chunk-QZBUGUOY.js} +6 -6
- package/dist/{chunk-STH66VLA.js → chunk-R7R3LOKW.js} +2 -2
- package/dist/{chunk-OLZTGVBT.js → chunk-REMK55JI.js} +4 -4
- package/dist/{chunk-VWBWKLXX.js → chunk-SX3V2DLV.js} +4 -4
- package/dist/{chunk-THZ2NAA4.js → chunk-TLMLEC4F.js} +4 -4
- package/dist/{chunk-WTIOCG4M.js → chunk-TOYEP23N.js} +2 -2
- package/dist/{chunk-ZGHIHEND.js → chunk-TW3BXVEU.js} +2 -2
- package/dist/{chunk-6F5IKY32.js → chunk-TYJR4GOF.js} +6 -2
- package/dist/{chunk-6F5IKY32.js.map → chunk-TYJR4GOF.js.map} +1 -1
- package/dist/{chunk-5RQ7N63M.js → chunk-TZDDL3DR.js} +2 -2
- package/dist/{chunk-BEH4DN63.js → chunk-U2YJCNRU.js} +4 -4
- package/dist/{chunk-RPQ3W2C6.js → chunk-U2ZDN2AL.js} +2 -2
- package/dist/{chunk-WPZT2JD4.js → chunk-U7Q2Y6WG.js} +2 -2
- package/dist/{chunk-XLJJ2ZAP.js → chunk-UU3QAKG6.js} +10 -10
- package/dist/{chunk-TP4N3X2Q.js → chunk-UVGRRI7N.js} +8 -8
- package/dist/{chunk-GCXYCDOA.js → chunk-VLHGBFR6.js} +2 -2
- package/dist/chunk-VM3HRSAU.js +79 -0
- package/dist/chunk-VM3HRSAU.js.map +1 -0
- package/dist/{chunk-QRX5BYUQ.js → chunk-VNDOQEJ7.js} +4 -4
- package/dist/{chunk-P6IPJYCS.js → chunk-VNNG46TS.js} +6 -6
- package/dist/{chunk-7ZH7ZB33.js → chunk-VQAM2XZV.js} +4 -4
- package/dist/{chunk-2SWQ6HIK.js → chunk-W3FAKT3D.js} +4 -4
- package/dist/{chunk-JDMYD6QC.js → chunk-W4SDVTZC.js} +2 -2
- package/dist/{chunk-7MAOQIWA.js → chunk-W4YWU7LQ.js} +2 -2
- package/dist/{chunk-Y46RBFBV.js → chunk-W7Y6RA6W.js} +6 -6
- package/dist/{chunk-XFU2S6XT.js → chunk-WGRS4PGY.js} +10 -10
- package/dist/{chunk-JXAYT6LX.js → chunk-WLQTHPMX.js} +2 -2
- package/dist/{chunk-J2KSG754.js → chunk-WRDPWEIC.js} +5 -5
- package/dist/{chunk-RPWEXIAW.js → chunk-X5MPHXG5.js} +6 -6
- package/dist/{chunk-UEIVXFUC.js → chunk-XELVDPKL.js} +5 -5
- package/dist/{chunk-EPNUVSNK.js → chunk-XFUNJYFT.js} +7 -7
- package/dist/{chunk-RRZBATXK.js → chunk-XKV5ZIBG.js} +3 -3
- package/dist/{chunk-ZKFYBC6G.js → chunk-XSF6AXEU.js} +2 -2
- package/dist/{chunk-VPHOSIPB.js → chunk-XT7HMNBW.js} +9 -9
- package/dist/{chunk-R6RVBYTU.js → chunk-XUJG2HFW.js} +3 -3
- package/dist/{chunk-S5LE2ARG.js → chunk-YANLN6HP.js} +66 -56
- package/dist/chunk-YANLN6HP.js.map +1 -0
- package/dist/{chunk-FRQ4HNGF.js → chunk-YJ4HM25H.js} +2 -2
- package/dist/{chunk-TVO5STZB.js → chunk-YQ6TNHAC.js} +3 -3
- package/dist/{chunk-BNNSO4MC.js → chunk-YTOYMJPM.js} +5 -5
- package/dist/{chunk-MCRIT46W.js → chunk-ZIYMBR7K.js} +5 -5
- package/dist/{chunk-SAHQLXNN.js → chunk-ZKR5B6YJ.js} +5 -5
- package/dist/data-display/Alert.js +4 -4
- package/dist/data-display/AsyncStateContainer.js +7 -7
- package/dist/data-display/Avatar.js +2 -2
- package/dist/data-display/Badge.js +3 -3
- package/dist/data-display/CardKit.js +21 -21
- package/dist/data-display/Carousel.js +2 -2
- package/dist/data-display/Chart.js +6 -6
- package/dist/data-display/DataGrid.js +2 -2
- package/dist/data-display/DataViews.js +84 -80
- package/dist/data-display/DescriptionItem.js +3 -3
- package/dist/data-display/EmptyState.js +2 -2
- package/dist/data-display/ErrorState.js +2 -2
- package/dist/data-display/HoverCard.js +2 -2
- package/dist/data-display/LazyImage.js +4 -4
- package/dist/data-display/Lightbox.js +3 -3
- package/dist/data-display/LoadingState.js +4 -4
- package/dist/data-display/MapPreview.js +9 -9
- package/dist/data-display/Progress.js +2 -2
- package/dist/data-display/SectionOnboarding.js +3 -3
- package/dist/data-display/Sheet.js +3 -3
- package/dist/data-display/StatCard.js +4 -4
- package/dist/data-display/Table.js +3 -3
- package/dist/feedback/ConfirmAction.js +7 -7
- package/dist/feedback/Dialog.js +6 -2
- package/dist/feedback/Modal.js +2 -2
- package/dist/feedback/StackedModal.js +2 -2
- package/dist/feedback/TutorialOverlay.js +2 -2
- package/dist/form/AddressAutocomplete.js +5 -5
- package/dist/form/Autocomplete.js +2 -2
- package/dist/form/Button.js +3 -3
- package/dist/form/Calendar.js +4 -4
- package/dist/form/CategorySelect.js +10 -10
- package/dist/form/CepField.js +4 -4
- package/dist/form/Checkbox.js +2 -2
- package/dist/form/CodeEditor.js +2 -2
- package/dist/form/DateRangePicker.js +7 -7
- package/dist/form/Input.js +3 -3
- package/dist/form/Label.js +2 -2
- package/dist/form/Menubar.js +5 -5
- package/dist/form/Select.js +2 -2
- package/dist/form/Switch.js +2 -2
- package/dist/form/total-form.js +30 -30
- package/dist/icons.js +2 -2
- package/dist/layout/Box.js +2 -2
- package/dist/layout/Card.js +6 -3
- package/dist/layout/Container.js +2 -2
- package/dist/layout/ContentToolbar.js +3 -3
- package/dist/layout/Skeleton.js +3 -3
- package/dist/layout/Spacer.js +2 -2
- package/dist/layout/Stack.js +3 -3
- package/dist/native/chunks/{chunk-HSIND52T.js → chunk-2UFNPDYT.js} +2 -1
- package/dist/native/chunks/chunk-2UFNPDYT.js.map +1 -0
- package/dist/native/chunks/{chunk-OGWPPQL4.js → chunk-75JQYVDZ.js} +3 -3
- package/dist/native/chunks/{chunk-WKMDCNIN.js → chunk-7LTVGW23.js} +2 -2
- package/dist/native/chunks/{chunk-QZAUOHDQ.js → chunk-AR5O4BEY.js} +6 -2
- package/dist/native/chunks/{chunk-QZAUOHDQ.js.map → chunk-AR5O4BEY.js.map} +1 -1
- package/dist/native/chunks/{chunk-RJVM5YDE.js → chunk-ATS7STZJ.js} +4 -4
- package/dist/native/chunks/{chunk-YTHR4Y5P.js → chunk-GWGIWQO7.js} +2 -2
- package/dist/native/chunks/{chunk-P3PL4WBO.js → chunk-LEMMXZFN.js} +24 -24
- package/dist/native/chunks/{chunk-P3PL4WBO.js.map → chunk-LEMMXZFN.js.map} +1 -1
- package/dist/native/chunks/chunk-NRN37A5K.js +67 -0
- package/dist/native/chunks/chunk-NRN37A5K.js.map +1 -0
- package/dist/native/chunks/{chunk-D4EYAXNG.js → chunk-QYUD3S6F.js} +5 -5
- package/dist/native/data-display/Alert.js +8 -8
- package/dist/native/data-display/Avatar.js +7 -7
- package/dist/native/data-display/Badge.js +8 -8
- package/dist/native/data-display/Chip.js +4 -4
- package/dist/native/data-display/EmptyState.js +11 -11
- package/dist/native/data-display/ErrorState.js +11 -11
- package/dist/native/data-display/LoadingState.js +7 -7
- package/dist/native/data-display/Progress.js +3 -3
- package/dist/native/feedback/Dialog.js +496 -0
- package/dist/native/feedback/Dialog.js.map +1 -0
- package/dist/native/form/Button.js +4 -4
- package/dist/native/form/Checkbox.js +5 -5
- package/dist/native/form/Input.js +5 -5
- package/dist/native/form/Select.js +6 -6
- package/dist/native/form/Switch.js +3 -3
- package/dist/native/icons.js +4 -4
- package/dist/native/layout/Box.js +4 -4
- package/dist/native/layout/Card.js +494 -0
- package/dist/native/layout/Card.js.map +1 -0
- package/dist/native/layout/Container.js +3 -3
- package/dist/native/layout/Skeleton.js +6 -6
- package/dist/native/layout/Spacer.js +3 -3
- package/dist/native/layout/Stack.js +4 -4
- package/dist/native/provider.js +2 -2
- package/dist/native/tokens.js +1 -1
- package/dist/native/typography/Heading.js +3 -3
- package/dist/native/typography/Paragraph.js +3 -3
- package/dist/native/typography/Text.js +3 -3
- package/dist/navigation/AppHeader.js +12 -9
- package/dist/navigation/CommandPalette.js +2 -2
- package/dist/social-login-button.js +11 -9
- package/dist/types/components/feedback/Dialog/Dialog.base.d.ts +64 -0
- package/dist/types/components/feedback/Dialog/Dialog.base.d.ts.map +1 -0
- package/dist/types/components/feedback/Dialog/Dialog.d.ts.map +1 -1
- package/dist/types/components/feedback/Dialog/Dialog.helpers.d.ts +35 -0
- package/dist/types/components/feedback/Dialog/Dialog.helpers.d.ts.map +1 -0
- package/dist/types/components/feedback/Dialog/Dialog.metrics.d.ts +133 -0
- package/dist/types/components/feedback/Dialog/Dialog.metrics.d.ts.map +1 -0
- package/dist/types/components/feedback/Dialog/Dialog.styles.d.ts +4 -4
- package/dist/types/components/feedback/Dialog/Dialog.styles.d.ts.map +1 -1
- package/dist/types/components/feedback/Dialog/Dialog.types.d.ts +8 -41
- package/dist/types/components/feedback/Dialog/Dialog.types.d.ts.map +1 -1
- package/dist/types/components/feedback/Dialog/index.d.ts +1 -1
- package/dist/types/components/feedback/Dialog/index.d.ts.map +1 -1
- package/dist/types/components/layout/Card/Card.base.d.ts +77 -0
- package/dist/types/components/layout/Card/Card.base.d.ts.map +1 -0
- package/dist/types/components/layout/Card/Card.d.ts.map +1 -1
- package/dist/types/components/layout/Card/Card.helpers.d.ts +8 -3
- package/dist/types/components/layout/Card/Card.helpers.d.ts.map +1 -1
- package/dist/types/components/layout/Card/Card.metrics.d.ts +182 -0
- package/dist/types/components/layout/Card/Card.metrics.d.ts.map +1 -0
- package/dist/types/components/layout/Card/Card.styles.d.ts +2 -2
- package/dist/types/components/layout/Card/Card.styles.d.ts.map +1 -1
- package/dist/types/components/layout/Card/Card.types.d.ts +10 -44
- package/dist/types/components/layout/Card/Card.types.d.ts.map +1 -1
- package/dist/types/components/layout/Card/index.d.ts +1 -1
- package/dist/types/components/layout/Card/index.d.ts.map +1 -1
- package/dist/types/platform/test-id.d.ts +14 -0
- package/dist/types/platform/test-id.d.ts.map +1 -1
- package/dist/types/tokens/mui-type.d.ts +1 -1
- package/dist/types/tokens/mui-type.d.ts.map +1 -1
- package/dist/types/tokens/shadow.d.ts +40 -0
- package/dist/types/tokens/shadow.d.ts.map +1 -0
- package/dist/types-native/components/feedback/Dialog/Dialog.base.d.ts +64 -0
- package/dist/types-native/components/feedback/Dialog/Dialog.base.d.ts.map +1 -0
- package/dist/types-native/components/feedback/Dialog/Dialog.helpers.d.ts +35 -0
- package/dist/types-native/components/feedback/Dialog/Dialog.helpers.d.ts.map +1 -0
- package/dist/types-native/components/feedback/Dialog/Dialog.look.native.d.ts +44 -0
- package/dist/types-native/components/feedback/Dialog/Dialog.look.native.d.ts.map +1 -0
- package/dist/types-native/components/feedback/Dialog/Dialog.metrics.d.ts +133 -0
- package/dist/types-native/components/feedback/Dialog/Dialog.metrics.d.ts.map +1 -0
- package/dist/types-native/components/feedback/Dialog/Dialog.native.d.ts +8 -0
- package/dist/types-native/components/feedback/Dialog/Dialog.native.d.ts.map +1 -0
- package/dist/types-native/components/feedback/Dialog/Dialog.types.native.d.ts +25 -0
- package/dist/types-native/components/feedback/Dialog/Dialog.types.native.d.ts.map +1 -0
- package/dist/types-native/components/feedback/Dialog/DialogParts.native.d.ts +39 -0
- package/dist/types-native/components/feedback/Dialog/DialogParts.native.d.ts.map +1 -0
- package/dist/types-native/components/feedback/Dialog/index.native.d.ts +4 -0
- package/dist/types-native/components/feedback/Dialog/index.native.d.ts.map +1 -0
- package/dist/types-native/components/layout/Card/Card.base.d.ts +77 -0
- package/dist/types-native/components/layout/Card/Card.base.d.ts.map +1 -0
- package/dist/types-native/components/layout/Card/Card.helpers.d.ts +11 -0
- package/dist/types-native/components/layout/Card/Card.helpers.d.ts.map +1 -0
- package/dist/types-native/components/layout/Card/Card.look.native.d.ts +57 -0
- package/dist/types-native/components/layout/Card/Card.look.native.d.ts.map +1 -0
- package/dist/types-native/components/layout/Card/Card.metrics.d.ts +182 -0
- package/dist/types-native/components/layout/Card/Card.metrics.d.ts.map +1 -0
- package/dist/types-native/components/layout/Card/Card.native.d.ts +11 -0
- package/dist/types-native/components/layout/Card/Card.native.d.ts.map +1 -0
- package/dist/types-native/components/layout/Card/Card.types.native.d.ts +28 -0
- package/dist/types-native/components/layout/Card/Card.types.native.d.ts.map +1 -0
- package/dist/types-native/components/layout/Card/CardParts.native.d.ts +55 -0
- package/dist/types-native/components/layout/Card/CardParts.native.d.ts.map +1 -0
- package/dist/types-native/components/layout/Card/index.native.d.ts +4 -0
- package/dist/types-native/components/layout/Card/index.native.d.ts.map +1 -0
- package/dist/types-native/platform/pulse-ring.native.d.ts +35 -0
- package/dist/types-native/platform/pulse-ring.native.d.ts.map +1 -0
- package/dist/types-native/platform/test-id.d.ts +14 -0
- package/dist/types-native/platform/test-id.d.ts.map +1 -1
- package/dist/types-native/tokens/mui-type.d.ts +1 -1
- package/dist/types-native/tokens/mui-type.d.ts.map +1 -1
- package/dist/types-native/tokens/shadow.d.ts +40 -0
- package/dist/types-native/tokens/shadow.d.ts.map +1 -0
- package/dist/typography/Heading.js +2 -2
- package/dist/typography/Paragraph.js +2 -2
- package/dist/typography/Text.js +2 -2
- package/dist/user-avatar.js +12 -10
- package/dist/utility/InfiniteScroll.js +2 -2
- package/dist/utility/InstallPrompt.js +2 -2
- package/package.json +9 -1
- package/src/components/data-display/CardKit/NATIVE-NOTES.md +48 -0
- package/src/components/feedback/Dialog/Dialog.base.ts +69 -0
- package/src/components/feedback/Dialog/Dialog.helpers.ts +75 -0
- package/src/components/feedback/Dialog/Dialog.look.native.ts +159 -0
- package/src/components/feedback/Dialog/Dialog.metrics.ts +140 -0
- package/src/components/feedback/Dialog/Dialog.native.tsx +149 -0
- package/src/components/feedback/Dialog/Dialog.styles.ts +63 -41
- package/src/components/feedback/Dialog/Dialog.tsx +58 -74
- package/src/components/feedback/Dialog/Dialog.types.native.ts +46 -0
- package/src/components/feedback/Dialog/Dialog.types.ts +24 -41
- package/src/components/feedback/Dialog/DialogParts.native.tsx +257 -0
- package/src/components/feedback/Dialog/NATIVE-NOTES.md +16 -0
- package/src/components/feedback/Dialog/index.native.ts +16 -0
- package/src/components/feedback/Dialog/index.ts +8 -2
- package/src/components/layout/Card/Card.base.ts +92 -0
- package/src/components/layout/Card/Card.helpers.ts +13 -7
- package/src/components/layout/Card/Card.look.native.ts +204 -0
- package/src/components/layout/Card/Card.metrics.ts +171 -0
- package/src/components/layout/Card/Card.native.tsx +130 -0
- package/src/components/layout/Card/Card.styles.ts +88 -48
- package/src/components/layout/Card/Card.tsx +41 -25
- package/src/components/layout/Card/Card.types.native.ts +59 -0
- package/src/components/layout/Card/Card.types.ts +30 -45
- package/src/components/layout/Card/CardParts.native.tsx +262 -0
- package/src/components/layout/Card/NATIVE-NOTES.md +15 -0
- package/src/components/layout/Card/index.native.ts +18 -0
- package/src/components/layout/Card/index.ts +9 -0
- package/src/platform/pulse-ring.native.tsx +82 -0
- package/src/platform/test-id.ts +17 -0
- package/src/tokens/mui-type.ts +2 -1
- package/src/tokens/shadow.ts +59 -0
- package/dist/chunk-6PRA45LC.js.map +0 -1
- package/dist/chunk-D2IASECY.js.map +0 -1
- package/dist/chunk-RI5JZLZL.js.map +0 -1
- package/dist/chunk-S5LE2ARG.js.map +0 -1
- package/dist/chunk-VMF3UXM4.js +0 -137
- package/dist/chunk-VMF3UXM4.js.map +0 -1
- package/dist/native/chunks/chunk-HSIND52T.js.map +0 -1
- /package/dist/{chunk-P7FQUGED.js.map → chunk-23FCBIUN.js.map} +0 -0
- /package/dist/{chunk-NUE774AN.js.map → chunk-25R3ITGZ.js.map} +0 -0
- /package/dist/{chunk-Z6UEOSL7.js.map → chunk-2FDBR77W.js.map} +0 -0
- /package/dist/{chunk-IFNK5TPI.js.map → chunk-2HPP6RVC.js.map} +0 -0
- /package/dist/{chunk-6RGWDKUL.js.map → chunk-2MMEIN4T.js.map} +0 -0
- /package/dist/{chunk-YRUCIKPO.js.map → chunk-2UYR2OOE.js.map} +0 -0
- /package/dist/{chunk-26Z7QWID.js.map → chunk-343TTIHD.js.map} +0 -0
- /package/dist/{chunk-BRSF5NRT.js.map → chunk-3FLVIVOK.js.map} +0 -0
- /package/dist/{chunk-BDVNAU2C.js.map → chunk-4523RYE7.js.map} +0 -0
- /package/dist/{chunk-4ETQRBZC.js.map → chunk-46UPILLK.js.map} +0 -0
- /package/dist/{chunk-I3MDKPGG.js.map → chunk-4IVOHL32.js.map} +0 -0
- /package/dist/{chunk-TLX66HCW.js.map → chunk-4OHRZW7U.js.map} +0 -0
- /package/dist/{chunk-2QFTAGDH.js.map → chunk-4X4KM4ZB.js.map} +0 -0
- /package/dist/{chunk-CXVMD6FE.js.map → chunk-5NKUYCZD.js.map} +0 -0
- /package/dist/{chunk-77F36LQQ.js.map → chunk-5OIH36KX.js.map} +0 -0
- /package/dist/{chunk-4MLDWACO.js.map → chunk-5ZTUP65G.js.map} +0 -0
- /package/dist/{chunk-GDEXYUPF.js.map → chunk-67L7HMEP.js.map} +0 -0
- /package/dist/{chunk-ZFPJBKVZ.js.map → chunk-6JGPPTLX.js.map} +0 -0
- /package/dist/{chunk-PF5HDFYY.js.map → chunk-6NZTYZP5.js.map} +0 -0
- /package/dist/{chunk-I7HYGIEJ.js.map → chunk-7BYFC2MR.js.map} +0 -0
- /package/dist/{chunk-D4T646G4.js.map → chunk-7NSX7A5H.js.map} +0 -0
- /package/dist/{chunk-OH3YGJT5.js.map → chunk-7TZ6OC5T.js.map} +0 -0
- /package/dist/{chunk-QS7ZGRNS.js.map → chunk-7VN7LFBA.js.map} +0 -0
- /package/dist/{chunk-GBNOYRLP.js.map → chunk-AEGXHZQT.js.map} +0 -0
- /package/dist/{chunk-G2IPK2XE.js.map → chunk-AGSBIUPV.js.map} +0 -0
- /package/dist/{chunk-65DLYC4S.js.map → chunk-AVGTTWTE.js.map} +0 -0
- /package/dist/{chunk-PXH24VIP.js.map → chunk-B6IURHSZ.js.map} +0 -0
- /package/dist/{chunk-B3BK2SNS.js.map → chunk-C3CMEDSO.js.map} +0 -0
- /package/dist/{chunk-JIINGMEB.js.map → chunk-CHPZTF34.js.map} +0 -0
- /package/dist/{chunk-PWXL3QQ6.js.map → chunk-CJBBGMIA.js.map} +0 -0
- /package/dist/{chunk-BPYPUEM5.js.map → chunk-CZJLWCEG.js.map} +0 -0
- /package/dist/{chunk-BEGWE5O4.js.map → chunk-DTC224UJ.js.map} +0 -0
- /package/dist/{chunk-UB76PBDF.js.map → chunk-DVFIE54C.js.map} +0 -0
- /package/dist/{chunk-KT6HWAEN.js.map → chunk-DVUPIVI2.js.map} +0 -0
- /package/dist/{chunk-GO4MVQGC.js.map → chunk-DW5FRWRQ.js.map} +0 -0
- /package/dist/{chunk-6Z4H2Y77.js.map → chunk-E27Y7FF2.js.map} +0 -0
- /package/dist/{chunk-PANMJFDS.js.map → chunk-E55CJV65.js.map} +0 -0
- /package/dist/{chunk-TPIBJP4S.js.map → chunk-EOHKZGOZ.js.map} +0 -0
- /package/dist/{chunk-SHDIZSN5.js.map → chunk-EXJBPKGW.js.map} +0 -0
- /package/dist/{chunk-DH75UNF3.js.map → chunk-FGK2C7JR.js.map} +0 -0
- /package/dist/{chunk-OOGEYCJH.js.map → chunk-FL54G7PV.js.map} +0 -0
- /package/dist/{chunk-AD776JPA.js.map → chunk-FR67FG2U.js.map} +0 -0
- /package/dist/{chunk-SHQWIDD5.js.map → chunk-GJQYM3PM.js.map} +0 -0
- /package/dist/{chunk-WROCSDVL.js.map → chunk-GSFNH4C5.js.map} +0 -0
- /package/dist/{chunk-Z5ABJLTM.js.map → chunk-HFXTAEYY.js.map} +0 -0
- /package/dist/{chunk-BLBOYCOV.js.map → chunk-HKV4MQ2W.js.map} +0 -0
- /package/dist/{chunk-FOMK3WPG.js.map → chunk-HLYPI5CO.js.map} +0 -0
- /package/dist/{chunk-GBRKP5GZ.js.map → chunk-I5SBTNV2.js.map} +0 -0
- /package/dist/{chunk-V5P5Q6HM.js.map → chunk-J4W4TQPC.js.map} +0 -0
- /package/dist/{chunk-RRO2EOJB.js.map → chunk-JB67KPGM.js.map} +0 -0
- /package/dist/{chunk-5ZOJLYD2.js.map → chunk-JE6RZ5L6.js.map} +0 -0
- /package/dist/{chunk-4HYXEMBP.js.map → chunk-JIKWZDNK.js.map} +0 -0
- /package/dist/{chunk-2QLVUVVR.js.map → chunk-JSH3HFDQ.js.map} +0 -0
- /package/dist/{chunk-TZ4SFX3M.js.map → chunk-JWW2Z3RH.js.map} +0 -0
- /package/dist/{chunk-QFHH2NU5.js.map → chunk-JXNT5TUP.js.map} +0 -0
- /package/dist/{chunk-OCXCH2ZW.js.map → chunk-KTK4A3IF.js.map} +0 -0
- /package/dist/{chunk-ZXLIWOXC.js.map → chunk-LS4FMSHY.js.map} +0 -0
- /package/dist/{chunk-SFAP5EH5.js.map → chunk-LUMF63BM.js.map} +0 -0
- /package/dist/{chunk-CZPU5TW3.js.map → chunk-LYSSO6WC.js.map} +0 -0
- /package/dist/{chunk-736HP6BL.js.map → chunk-M4LQRQFL.js.map} +0 -0
- /package/dist/{chunk-426FTCMF.js.map → chunk-MESRKY67.js.map} +0 -0
- /package/dist/{chunk-B5PYBEXO.js.map → chunk-MP4VSWHK.js.map} +0 -0
- /package/dist/{chunk-VWGR5XUP.js.map → chunk-NWNSUHEB.js.map} +0 -0
- /package/dist/{chunk-4K7FDVAB.js.map → chunk-O3336DJ6.js.map} +0 -0
- /package/dist/{chunk-YCCKY5VW.js.map → chunk-OFOYMZRY.js.map} +0 -0
- /package/dist/{chunk-QZDBWXZG.js.map → chunk-OP65D4UR.js.map} +0 -0
- /package/dist/{chunk-BQQONDW5.js.map → chunk-OVLNF4AZ.js.map} +0 -0
- /package/dist/{chunk-ZTZ6S5Q6.js.map → chunk-OXQP3N6X.js.map} +0 -0
- /package/dist/{chunk-3UOHKHOT.js.map → chunk-PFV6RL4Q.js.map} +0 -0
- /package/dist/{chunk-DF2FFYZ7.js.map → chunk-PMS3H3OO.js.map} +0 -0
- /package/dist/{chunk-AGYGNNOM.js.map → chunk-PQECNGDE.js.map} +0 -0
- /package/dist/{chunk-IIROZKW5.js.map → chunk-PRUSQQDT.js.map} +0 -0
- /package/dist/{chunk-IPE5FFFD.js.map → chunk-PUBPZOQJ.js.map} +0 -0
- /package/dist/{chunk-7KTU6YMQ.js.map → chunk-Q75SJ35X.js.map} +0 -0
- /package/dist/{chunk-FINCVAAR.js.map → chunk-QFJRB27Q.js.map} +0 -0
- /package/dist/{chunk-FB36IHCE.js.map → chunk-QFVFHIHE.js.map} +0 -0
- /package/dist/{chunk-IH4RSRQA.js.map → chunk-QKIJ6YXZ.js.map} +0 -0
- /package/dist/{chunk-UOPQOBQZ.js.map → chunk-QWDEOITU.js.map} +0 -0
- /package/dist/{chunk-WBKWIFXA.js.map → chunk-QYNCPS5W.js.map} +0 -0
- /package/dist/{chunk-XEE7PLDR.js.map → chunk-QZBUGUOY.js.map} +0 -0
- /package/dist/{chunk-STH66VLA.js.map → chunk-R7R3LOKW.js.map} +0 -0
- /package/dist/{chunk-OLZTGVBT.js.map → chunk-REMK55JI.js.map} +0 -0
- /package/dist/{chunk-VWBWKLXX.js.map → chunk-SX3V2DLV.js.map} +0 -0
- /package/dist/{chunk-THZ2NAA4.js.map → chunk-TLMLEC4F.js.map} +0 -0
- /package/dist/{chunk-WTIOCG4M.js.map → chunk-TOYEP23N.js.map} +0 -0
- /package/dist/{chunk-ZGHIHEND.js.map → chunk-TW3BXVEU.js.map} +0 -0
- /package/dist/{chunk-5RQ7N63M.js.map → chunk-TZDDL3DR.js.map} +0 -0
- /package/dist/{chunk-BEH4DN63.js.map → chunk-U2YJCNRU.js.map} +0 -0
- /package/dist/{chunk-RPQ3W2C6.js.map → chunk-U2ZDN2AL.js.map} +0 -0
- /package/dist/{chunk-WPZT2JD4.js.map → chunk-U7Q2Y6WG.js.map} +0 -0
- /package/dist/{chunk-XLJJ2ZAP.js.map → chunk-UU3QAKG6.js.map} +0 -0
- /package/dist/{chunk-TP4N3X2Q.js.map → chunk-UVGRRI7N.js.map} +0 -0
- /package/dist/{chunk-GCXYCDOA.js.map → chunk-VLHGBFR6.js.map} +0 -0
- /package/dist/{chunk-QRX5BYUQ.js.map → chunk-VNDOQEJ7.js.map} +0 -0
- /package/dist/{chunk-P6IPJYCS.js.map → chunk-VNNG46TS.js.map} +0 -0
- /package/dist/{chunk-7ZH7ZB33.js.map → chunk-VQAM2XZV.js.map} +0 -0
- /package/dist/{chunk-2SWQ6HIK.js.map → chunk-W3FAKT3D.js.map} +0 -0
- /package/dist/{chunk-JDMYD6QC.js.map → chunk-W4SDVTZC.js.map} +0 -0
- /package/dist/{chunk-7MAOQIWA.js.map → chunk-W4YWU7LQ.js.map} +0 -0
- /package/dist/{chunk-Y46RBFBV.js.map → chunk-W7Y6RA6W.js.map} +0 -0
- /package/dist/{chunk-XFU2S6XT.js.map → chunk-WGRS4PGY.js.map} +0 -0
- /package/dist/{chunk-JXAYT6LX.js.map → chunk-WLQTHPMX.js.map} +0 -0
- /package/dist/{chunk-J2KSG754.js.map → chunk-WRDPWEIC.js.map} +0 -0
- /package/dist/{chunk-RPWEXIAW.js.map → chunk-X5MPHXG5.js.map} +0 -0
- /package/dist/{chunk-UEIVXFUC.js.map → chunk-XELVDPKL.js.map} +0 -0
- /package/dist/{chunk-EPNUVSNK.js.map → chunk-XFUNJYFT.js.map} +0 -0
- /package/dist/{chunk-RRZBATXK.js.map → chunk-XKV5ZIBG.js.map} +0 -0
- /package/dist/{chunk-ZKFYBC6G.js.map → chunk-XSF6AXEU.js.map} +0 -0
- /package/dist/{chunk-VPHOSIPB.js.map → chunk-XT7HMNBW.js.map} +0 -0
- /package/dist/{chunk-R6RVBYTU.js.map → chunk-XUJG2HFW.js.map} +0 -0
- /package/dist/{chunk-FRQ4HNGF.js.map → chunk-YJ4HM25H.js.map} +0 -0
- /package/dist/{chunk-TVO5STZB.js.map → chunk-YQ6TNHAC.js.map} +0 -0
- /package/dist/{chunk-BNNSO4MC.js.map → chunk-YTOYMJPM.js.map} +0 -0
- /package/dist/{chunk-MCRIT46W.js.map → chunk-ZIYMBR7K.js.map} +0 -0
- /package/dist/{chunk-SAHQLXNN.js.map → chunk-ZKR5B6YJ.js.map} +0 -0
- /package/dist/native/chunks/{chunk-OGWPPQL4.js.map → chunk-75JQYVDZ.js.map} +0 -0
- /package/dist/native/chunks/{chunk-WKMDCNIN.js.map → chunk-7LTVGW23.js.map} +0 -0
- /package/dist/native/chunks/{chunk-RJVM5YDE.js.map → chunk-ATS7STZJ.js.map} +0 -0
- /package/dist/native/chunks/{chunk-YTHR4Y5P.js.map → chunk-GWGIWQO7.js.map} +0 -0
- /package/dist/native/chunks/{chunk-D4EYAXNG.js.map → chunk-QYUD3S6F.js.map} +0 -0
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import {
|
|
3
|
+
Image,
|
|
4
|
+
StyleSheet,
|
|
5
|
+
Text as RNText,
|
|
6
|
+
View,
|
|
7
|
+
type DimensionValue,
|
|
8
|
+
type TextStyle,
|
|
9
|
+
type ViewStyle,
|
|
10
|
+
} from 'react-native';
|
|
11
|
+
|
|
12
|
+
import {
|
|
13
|
+
CARD_ACTIONS,
|
|
14
|
+
CARD_CONTENT_PADDING_UNITS,
|
|
15
|
+
CARD_HEADER,
|
|
16
|
+
CARD_HEADER_CHILDREN_PADDING_UNITS,
|
|
17
|
+
CARD_MEDIA_HEIGHT,
|
|
18
|
+
} from './Card.metrics';
|
|
19
|
+
import type {
|
|
20
|
+
CardActionsAlignment,
|
|
21
|
+
CardActionsProps,
|
|
22
|
+
CardContentProps,
|
|
23
|
+
CardHeaderProps,
|
|
24
|
+
CardMediaProps,
|
|
25
|
+
} from './Card.types.native';
|
|
26
|
+
import { childTestId, resolveTestId, withoutTestIdProps } from '../../../platform/test-id';
|
|
27
|
+
import { renderTextChildren } from '../../../platform/text-children';
|
|
28
|
+
import { useUiTheme } from '../../../provider/use-ui-theme.native';
|
|
29
|
+
import { muiTypeStyle } from '../../../tokens/mui-type';
|
|
30
|
+
import type { UiTheme } from '../../../tokens/theme';
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* THE FOUR SLOTS A CARD IS BUILT OUT OF, ON REACT NATIVE.
|
|
34
|
+
*
|
|
35
|
+
* Each one is a `View` carrying the padding MUI's own `CardHeader`,
|
|
36
|
+
* `CardContent`, `CardActions` and `CardMedia` declare in px — the web half
|
|
37
|
+
* overrides only `padding` and `justify-content`, so the rest of the numbers
|
|
38
|
+
* come from MUI and are restated in `Card.metrics.ts` rather than re-invented.
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* THE INK A CARD PUBLISHES TO ITS SLOTS.
|
|
43
|
+
*
|
|
44
|
+
* `Card.styles.ts` puts `color: primary.contrastText` on the gradient card
|
|
45
|
+
* ITSELF and lets CSS inheritance carry it into the header and the body. React
|
|
46
|
+
* Native inherits nothing across views, so the card publishes its ink here and
|
|
47
|
+
* every slot reads it — which is the difference between a legible gradient card
|
|
48
|
+
* and near-black text on indigo.
|
|
49
|
+
*
|
|
50
|
+
* `null` is "no card above me": a slot rendered on its own falls back to the
|
|
51
|
+
* body ink, exactly as it would on the web.
|
|
52
|
+
*/
|
|
53
|
+
export const CardInkContext = React.createContext<string | null>(null);
|
|
54
|
+
|
|
55
|
+
/** The body text of a slot, in MUI's `body1`, so a bare string is not unstyled. */
|
|
56
|
+
const slotTextStyle = (theme: UiTheme, ink: string | null): TextStyle => ({
|
|
57
|
+
...muiTypeStyle(theme, 'body1'),
|
|
58
|
+
color: ink ?? theme.palette.text.primary,
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
/** MUI's header title: `h5`, or `body2` when an avatar shares the row. */
|
|
62
|
+
export const cardTitleStyle = (
|
|
63
|
+
theme: UiTheme,
|
|
64
|
+
hasAvatar: boolean,
|
|
65
|
+
ink: string | null = null,
|
|
66
|
+
): TextStyle => ({
|
|
67
|
+
...muiTypeStyle(theme, hasAvatar ? 'body2' : 'h5'),
|
|
68
|
+
color: ink ?? theme.palette.text.primary,
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* MUI's header subheader: `body1` (or `body2` beside an avatar), in the muted
|
|
73
|
+
* ink — which does NOT follow the card's own ink, because MUI's `CardHeader`
|
|
74
|
+
* pins the subheader to `textSecondary` explicitly rather than inheriting.
|
|
75
|
+
*/
|
|
76
|
+
export const cardSubtitleStyle = (theme: UiTheme, hasAvatar: boolean): TextStyle => ({
|
|
77
|
+
...muiTypeStyle(theme, hasAvatar ? 'body2' : 'body1'),
|
|
78
|
+
color: theme.palette.text.secondary,
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
export function CardHeader({
|
|
82
|
+
title,
|
|
83
|
+
subtitle,
|
|
84
|
+
action,
|
|
85
|
+
avatar,
|
|
86
|
+
children,
|
|
87
|
+
...others
|
|
88
|
+
}: CardHeaderProps): React.JSX.Element {
|
|
89
|
+
const theme = useUiTheme();
|
|
90
|
+
const ink = React.useContext(CardInkContext);
|
|
91
|
+
const testID = resolveTestId(others, 'card-header');
|
|
92
|
+
const { style, ...viewProps } = withoutTestIdProps(others);
|
|
93
|
+
|
|
94
|
+
if (children) {
|
|
95
|
+
return (
|
|
96
|
+
<View
|
|
97
|
+
testID={testID}
|
|
98
|
+
style={[{ padding: theme.spacing(CARD_HEADER_CHILDREN_PADDING_UNITS) }, style]}
|
|
99
|
+
{...viewProps}
|
|
100
|
+
>
|
|
101
|
+
{renderTextChildren(children, slotTextStyle(theme, ink))}
|
|
102
|
+
</View>
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const hasAvatar = avatar != null;
|
|
107
|
+
return (
|
|
108
|
+
<View testID={testID} style={[styles.header, style]} {...viewProps}>
|
|
109
|
+
{hasAvatar ? <View style={styles.headerAvatar}>{avatar}</View> : null}
|
|
110
|
+
<View style={styles.headerContent}>
|
|
111
|
+
{title != null ? (
|
|
112
|
+
<RNText testID={childTestId(others, 'title', 'card')} style={cardTitleStyle(theme, hasAvatar, ink)}>
|
|
113
|
+
{title}
|
|
114
|
+
</RNText>
|
|
115
|
+
) : null}
|
|
116
|
+
{subtitle != null ? (
|
|
117
|
+
<RNText
|
|
118
|
+
testID={childTestId(others, 'subtitle', 'card')}
|
|
119
|
+
style={cardSubtitleStyle(theme, hasAvatar)}
|
|
120
|
+
>
|
|
121
|
+
{subtitle}
|
|
122
|
+
</RNText>
|
|
123
|
+
) : null}
|
|
124
|
+
</View>
|
|
125
|
+
{action != null ? <View style={styles.headerAction}>{action}</View> : null}
|
|
126
|
+
</View>
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
CardHeader.displayName = 'CardHeader';
|
|
131
|
+
|
|
132
|
+
export function CardContent({
|
|
133
|
+
children,
|
|
134
|
+
dense = false,
|
|
135
|
+
...others
|
|
136
|
+
}: CardContentProps): React.JSX.Element {
|
|
137
|
+
const theme = useUiTheme();
|
|
138
|
+
const ink = React.useContext(CardInkContext);
|
|
139
|
+
const testID = resolveTestId(others, 'card-content');
|
|
140
|
+
const { style, ...viewProps } = withoutTestIdProps(others);
|
|
141
|
+
const padding = theme.spacing(
|
|
142
|
+
dense ? CARD_CONTENT_PADDING_UNITS.dense : CARD_CONTENT_PADDING_UNITS.normal,
|
|
143
|
+
);
|
|
144
|
+
|
|
145
|
+
return (
|
|
146
|
+
<View testID={testID} style={[{ padding }, style]} {...viewProps}>
|
|
147
|
+
{renderTextChildren(children, slotTextStyle(theme, ink))}
|
|
148
|
+
</View>
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
CardContent.displayName = 'CardContent';
|
|
153
|
+
|
|
154
|
+
const JUSTIFY: Record<CardActionsAlignment, NonNullable<ViewStyle['justifyContent']>> = {
|
|
155
|
+
left: 'flex-start',
|
|
156
|
+
center: 'center',
|
|
157
|
+
right: 'flex-end',
|
|
158
|
+
'space-between': 'space-between',
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
export function CardActions({
|
|
162
|
+
children,
|
|
163
|
+
disableSpacing = false,
|
|
164
|
+
alignment = 'left',
|
|
165
|
+
...others
|
|
166
|
+
}: CardActionsProps): React.JSX.Element {
|
|
167
|
+
const theme = useUiTheme();
|
|
168
|
+
const ink = React.useContext(CardInkContext);
|
|
169
|
+
const testID = resolveTestId(others, 'card-actions');
|
|
170
|
+
const { style, ...viewProps } = withoutTestIdProps(others);
|
|
171
|
+
|
|
172
|
+
return (
|
|
173
|
+
<View
|
|
174
|
+
testID={testID}
|
|
175
|
+
style={[
|
|
176
|
+
styles.actions,
|
|
177
|
+
{ justifyContent: JUSTIFY[alignment], gap: disableSpacing ? undefined : CARD_ACTIONS.gap },
|
|
178
|
+
style,
|
|
179
|
+
]}
|
|
180
|
+
{...viewProps}
|
|
181
|
+
>
|
|
182
|
+
{renderTextChildren(children, slotTextStyle(theme, ink))}
|
|
183
|
+
</View>
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
CardActions.displayName = 'CardActions';
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* `height` accepts the web's spellings: a number, a numeric string (`"200"`, as
|
|
191
|
+
* an `<img height>` takes) or a percentage.
|
|
192
|
+
*/
|
|
193
|
+
export function mediaHeight(height: number | string): DimensionValue {
|
|
194
|
+
if (typeof height === 'number') return height;
|
|
195
|
+
const parsed = Number(height);
|
|
196
|
+
return Number.isFinite(parsed) ? parsed : (height as DimensionValue);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
export function CardMedia({
|
|
200
|
+
image,
|
|
201
|
+
title,
|
|
202
|
+
height = CARD_MEDIA_HEIGHT,
|
|
203
|
+
children,
|
|
204
|
+
...others
|
|
205
|
+
}: CardMediaProps): React.JSX.Element {
|
|
206
|
+
const testID = resolveTestId(others, 'card-media');
|
|
207
|
+
const { style, ...viewProps } = withoutTestIdProps(others);
|
|
208
|
+
|
|
209
|
+
return (
|
|
210
|
+
<View
|
|
211
|
+
testID={testID}
|
|
212
|
+
style={[{ height: mediaHeight(height), width: '100%', overflow: 'hidden' }, style]}
|
|
213
|
+
{...viewProps}
|
|
214
|
+
>
|
|
215
|
+
{image != null ? (
|
|
216
|
+
<Image
|
|
217
|
+
source={{ uri: image }}
|
|
218
|
+
accessibilityLabel={title}
|
|
219
|
+
resizeMode="cover"
|
|
220
|
+
style={StyleSheet.absoluteFill}
|
|
221
|
+
/>
|
|
222
|
+
) : null}
|
|
223
|
+
{children}
|
|
224
|
+
</View>
|
|
225
|
+
);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
CardMedia.displayName = 'CardMedia';
|
|
229
|
+
|
|
230
|
+
const styles = StyleSheet.create({
|
|
231
|
+
header: {
|
|
232
|
+
flexDirection: 'row',
|
|
233
|
+
alignItems: 'center',
|
|
234
|
+
padding: CARD_HEADER.padding,
|
|
235
|
+
},
|
|
236
|
+
headerAvatar: {
|
|
237
|
+
flexGrow: 0,
|
|
238
|
+
flexShrink: 0,
|
|
239
|
+
flexBasis: 'auto',
|
|
240
|
+
marginRight: CARD_HEADER.avatarGap,
|
|
241
|
+
},
|
|
242
|
+
headerContent: {
|
|
243
|
+
flexGrow: 1,
|
|
244
|
+
flexShrink: 1,
|
|
245
|
+
flexBasis: 'auto',
|
|
246
|
+
minWidth: 0,
|
|
247
|
+
},
|
|
248
|
+
headerAction: {
|
|
249
|
+
flexGrow: 0,
|
|
250
|
+
flexShrink: 0,
|
|
251
|
+
flexBasis: 'auto',
|
|
252
|
+
alignSelf: 'flex-start',
|
|
253
|
+
marginTop: CARD_HEADER.action.marginTop,
|
|
254
|
+
marginRight: CARD_HEADER.action.marginRight,
|
|
255
|
+
marginBottom: CARD_HEADER.action.marginBottom,
|
|
256
|
+
},
|
|
257
|
+
actions: {
|
|
258
|
+
flexDirection: 'row',
|
|
259
|
+
alignItems: 'center',
|
|
260
|
+
padding: CARD_ACTIONS.padding,
|
|
261
|
+
},
|
|
262
|
+
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Card on React Native
|
|
2
|
+
|
|
3
|
+
Known rendering gaps, one bullet each; `pnpm native:ledger` reads them.
|
|
4
|
+
|
|
5
|
+
- `glass` paints its 0.1 paper wash and primary hairline without the 20px backdrop blur — React Native has no backdrop filter.
|
|
6
|
+
- `gradient` paints the gradient's first stop flat (`primary.main`, `primary.dark` under a press) — React Native core has no gradient fill.
|
|
7
|
+
- Hover has no touch equivalent: what a variant changes on `:hover` (border colour, wash, shadow) is applied while PRESSED, and the 2px lift is not — the web itself returns an interactive card to `translateY(0)` under the pointer, which is where a finger leaves it.
|
|
8
|
+
- The pulse ring is an expanding hollow border rather than a `box-shadow` spread behind the paper: React Native cannot paint a child behind its parent's own background, so the ring grows outward from the card's edge instead of from under it, and its corner radius stays the card's rather than widening with the ring.
|
|
9
|
+
- A `glow`ing card stops clipping its children to its corners: a view's own shadow is clipped by its own overflow on a device, so the halo the caller asked for would not paint. The web keeps `overflow: hidden` there and shows both.
|
|
10
|
+
- `elevated` restates MUI's `shadows[1]`, the elevation every card inherits from `Paper` on the web, because React Native has no Paper to inherit it from; the variant's own `elevation: 4`/`8` are not CSS properties and paint nothing on either renderer.
|
|
11
|
+
- The loading spinner is the platform's `ActivityIndicator` at MUI's 40px `CircularProgress` diameter, not MUI's arc; on iOS the built-in `large` stands in for the exact size.
|
|
12
|
+
- `CardMedia` draws its image with `resizeMode="cover"` inside the sized box. MUI's `component` and the DOM `title` attribute are web-only — a device names the image through `accessibilityLabel`.
|
|
13
|
+
- `CardActions` spaces its children with `gap` where MUI uses `& > :not(style) ~ :not(style) { margin-left: 8px }`: the same 8px, applied by the container rather than by a sibling selector.
|
|
14
|
+
- A `gradient` card's `primary.contrastText` reaches its own text children and the house slots (`CardHeader`'s title, `CardContent`, `CardActions`) through a context; the web puts one `color` on the card and lets CSS inherit it into everything below. So a consumer's own `Text` nested inside a gradient card keeps the body ink unless it reads that colour itself. The header's SUBTITLE stays `text.secondary` on both, because MUI's `CardHeader` pins the subheader to `textSecondary` rather than inheriting.
|
|
15
|
+
- Title, subtitle and raw text children are set in MUI's default `h5`/`body1`/`body2` numbers; a host that re-themes MUI's typography variants moves the web only.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export { Card } from './Card.native';
|
|
2
|
+
export { CardActions, CardContent, CardHeader, CardMedia } from './CardParts.native';
|
|
3
|
+
export type {
|
|
4
|
+
CardActionsAlignment,
|
|
5
|
+
CardActionsBaseProps,
|
|
6
|
+
CardActionsProps,
|
|
7
|
+
CardBaseProps,
|
|
8
|
+
CardBorderRadius,
|
|
9
|
+
CardContentBaseProps,
|
|
10
|
+
CardContentProps,
|
|
11
|
+
CardEntranceAnimation,
|
|
12
|
+
CardHeaderBaseProps,
|
|
13
|
+
CardHeaderProps,
|
|
14
|
+
CardMediaBaseProps,
|
|
15
|
+
CardMediaProps,
|
|
16
|
+
CardProps,
|
|
17
|
+
CardVariant,
|
|
18
|
+
} from './Card.types.native';
|
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
export { Card, CardActions, CardContent, CardHeader, CardMedia } from './Card';
|
|
2
2
|
export type {
|
|
3
|
+
CardActionsAlignment,
|
|
4
|
+
CardActionsBaseProps,
|
|
3
5
|
CardActionsProps,
|
|
6
|
+
CardBaseProps,
|
|
7
|
+
CardBorderRadius,
|
|
8
|
+
CardContentBaseProps,
|
|
4
9
|
CardContentProps,
|
|
10
|
+
CardEntranceAnimation,
|
|
11
|
+
CardHeaderBaseProps,
|
|
5
12
|
CardHeaderProps,
|
|
13
|
+
CardMediaBaseProps,
|
|
6
14
|
CardMediaProps,
|
|
7
15
|
CardProps,
|
|
16
|
+
CardVariant,
|
|
8
17
|
} from './Card.types';
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Animated, Easing } from 'react-native';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* THE `::after` PULSE, AS A REACT NATIVE VIEW.
|
|
6
|
+
*
|
|
7
|
+
* `Card` and `Dialog` pulse the same way on the web: an `::after` that fills
|
|
8
|
+
* the element, carries `box-shadow: 0 0 0 <spread>px currentColor` and animates
|
|
9
|
+
* that spread out and back while fading, once every two seconds, from BEHIND
|
|
10
|
+
* the element (`z-index: -1`). Those two read this; `Button.native.tsx` still
|
|
11
|
+
* carries its own `Pulse`, a filled overlay that scales and fades rather than a
|
|
12
|
+
* ring, and folding it onto this is a `form/Button` change.
|
|
13
|
+
*
|
|
14
|
+
* React Native cannot paint a child behind its parent's own background, so a
|
|
15
|
+
* filled overlay would wash the surface instead of haloing it. This draws a
|
|
16
|
+
* HOLLOW ring instead: the view is inset by the current spread and carries a
|
|
17
|
+
* border of exactly that width, so the band it paints is precisely the region
|
|
18
|
+
* from the surface's edge to `spread` outside it — the same band the box-shadow
|
|
19
|
+
* spread covers, and nothing over the surface itself.
|
|
20
|
+
*
|
|
21
|
+
* Layout props cannot run on the native driver, so this animates on the JS one.
|
|
22
|
+
*/
|
|
23
|
+
export interface PulseRingProps {
|
|
24
|
+
color: string;
|
|
25
|
+
/** The surface's own corner radius, which the ring follows. */
|
|
26
|
+
radius: number | string;
|
|
27
|
+
/** How far out of the edge the ring grows, in px. */
|
|
28
|
+
spread: number;
|
|
29
|
+
durationMs: number;
|
|
30
|
+
/** The fraction of the cycle the ring is still visible for. */
|
|
31
|
+
fadeAt: number;
|
|
32
|
+
/** The ring's opacity at the start of a cycle. */
|
|
33
|
+
opacity: number;
|
|
34
|
+
testID: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function PulseRing({
|
|
38
|
+
color,
|
|
39
|
+
radius,
|
|
40
|
+
spread,
|
|
41
|
+
durationMs,
|
|
42
|
+
fadeAt,
|
|
43
|
+
opacity,
|
|
44
|
+
testID,
|
|
45
|
+
}: PulseRingProps): React.JSX.Element {
|
|
46
|
+
const progress = React.useRef(new Animated.Value(0)).current;
|
|
47
|
+
|
|
48
|
+
React.useEffect(() => {
|
|
49
|
+
const loop = Animated.loop(
|
|
50
|
+
Animated.timing(progress, {
|
|
51
|
+
toValue: 1,
|
|
52
|
+
duration: durationMs,
|
|
53
|
+
easing: Easing.linear,
|
|
54
|
+
useNativeDriver: false,
|
|
55
|
+
}),
|
|
56
|
+
);
|
|
57
|
+
loop.start();
|
|
58
|
+
return () => loop.stop();
|
|
59
|
+
}, [durationMs, progress]);
|
|
60
|
+
|
|
61
|
+
const grow = progress.interpolate({ inputRange: [0, fadeAt, 1], outputRange: [0, spread, 0] });
|
|
62
|
+
const inset = Animated.multiply(grow, -1);
|
|
63
|
+
|
|
64
|
+
return (
|
|
65
|
+
<Animated.View
|
|
66
|
+
testID={testID}
|
|
67
|
+
aria-hidden
|
|
68
|
+
style={{
|
|
69
|
+
position: 'absolute',
|
|
70
|
+
pointerEvents: 'none',
|
|
71
|
+
top: inset,
|
|
72
|
+
left: inset,
|
|
73
|
+
right: inset,
|
|
74
|
+
bottom: inset,
|
|
75
|
+
borderWidth: grow,
|
|
76
|
+
borderColor: color,
|
|
77
|
+
borderRadius: radius,
|
|
78
|
+
opacity: progress.interpolate({ inputRange: [0, fadeAt, 1], outputRange: [opacity, 0, 0] }),
|
|
79
|
+
}}
|
|
80
|
+
/>
|
|
81
|
+
);
|
|
82
|
+
}
|
package/src/platform/test-id.ts
CHANGED
|
@@ -45,3 +45,20 @@ export function withoutTestIdProps<P extends TestIdProps>(props: P): Omit<P, key
|
|
|
45
45
|
const { testID: _testID, dataTestId: _dataTestId, 'data-testid': _dataTestid, ...rest } = props;
|
|
46
46
|
return rest;
|
|
47
47
|
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* A SLOT's own test id, where a raw id means "this element" and `dataTestId`
|
|
51
|
+
* means "the surface I belong to".
|
|
52
|
+
*
|
|
53
|
+
* `Dialog` names its parts by derivation — `d` gives `d-title`, `d-content`,
|
|
54
|
+
* `d-actions` — and a slot receives the DIALOG's id in `dataTestId` to derive
|
|
55
|
+
* from. A raw `data-testid` (or React Native's `testID`) is something else: it
|
|
56
|
+
* is the id the caller wants ON THIS ELEMENT, which is how the shared stories
|
|
57
|
+
* address a `DialogContent`, so it is taken verbatim and no suffix is added.
|
|
58
|
+
*
|
|
59
|
+
* Both renderers read this one function, which is the only way the web and the
|
|
60
|
+
* native slot can agree about what `<DialogContent data-testid="x">` is called.
|
|
61
|
+
*/
|
|
62
|
+
export function slotTestId(props: TestIdProps, suffix: string, fallback: string): string {
|
|
63
|
+
return props.testID ?? props['data-testid'] ?? childTestId(props, suffix, fallback);
|
|
64
|
+
}
|
package/src/tokens/mui-type.ts
CHANGED
|
@@ -15,7 +15,7 @@ import type { UiTheme } from './theme';
|
|
|
15
15
|
* halves and not these; each component that reads this records that as a
|
|
16
16
|
* known gap in its `NATIVE-NOTES.md`.
|
|
17
17
|
*/
|
|
18
|
-
export type MuiTypeVariantName = 'h6' | 'body1' | 'body2' | 'caption';
|
|
18
|
+
export type MuiTypeVariantName = 'h5' | 'h6' | 'body1' | 'body2' | 'caption';
|
|
19
19
|
|
|
20
20
|
export interface MuiTypeVariant {
|
|
21
21
|
fontSize: number;
|
|
@@ -25,6 +25,7 @@ export interface MuiTypeVariant {
|
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
export const MUI_TYPE: Record<MuiTypeVariantName, MuiTypeVariant> = {
|
|
28
|
+
h5: { fontSize: 24, lineHeight: 1.334, fontWeight: 400, letterSpacingEm: 0 },
|
|
28
29
|
h6: { fontSize: 20, lineHeight: 1.6, fontWeight: 500, letterSpacingEm: 0.0075 },
|
|
29
30
|
body1: { fontSize: 16, lineHeight: 1.5, fontWeight: 400, letterSpacingEm: 0.00938 },
|
|
30
31
|
body2: { fontSize: 14, lineHeight: 1.43, fontWeight: 400, letterSpacingEm: 0.01071 },
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ONE SHADOW, IN THE SHAPE BOTH RENDERERS READ.
|
|
3
|
+
*
|
|
4
|
+
* A drop shadow is one of the few decorations the two sides express in the same
|
|
5
|
+
* numbers and different syntax: CSS wants `0 8px 32px rgba(…)`, React Native
|
|
6
|
+
* wants `{ offsetX, offsetY, blurRadius, spreadDistance, color }` (its
|
|
7
|
+
* `BoxShadowValue`, which `boxShadow` takes an array of). So the numbers live in
|
|
8
|
+
* a component's `*.metrics.ts` as this object, native passes it straight
|
|
9
|
+
* through, and the web renders it with {@link shadowCss}.
|
|
10
|
+
*
|
|
11
|
+
* {@link shadowCss} reproduces the text the web components already wrote by
|
|
12
|
+
* hand: a bare `0` for a zero length, and no spread at all when the spread is
|
|
13
|
+
* zero. That is what makes moving a shadow into a metrics table a refactor
|
|
14
|
+
* rather than a restyle.
|
|
15
|
+
*/
|
|
16
|
+
export interface UiShadow {
|
|
17
|
+
offsetX: number;
|
|
18
|
+
offsetY: number;
|
|
19
|
+
blurRadius: number;
|
|
20
|
+
spreadDistance: number;
|
|
21
|
+
color: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** A length the way the web writes it: a bare `0`, otherwise px. */
|
|
25
|
+
const len = (value: number): string => (value === 0 ? '0' : `${value}px`);
|
|
26
|
+
|
|
27
|
+
/** One shadow as CSS. A zero spread is omitted, as the web has always written it. */
|
|
28
|
+
export const shadowCss = (shadow: UiShadow): string =>
|
|
29
|
+
[
|
|
30
|
+
len(shadow.offsetX),
|
|
31
|
+
len(shadow.offsetY),
|
|
32
|
+
len(shadow.blurRadius),
|
|
33
|
+
...(shadow.spreadDistance === 0 ? [] : [len(shadow.spreadDistance)]),
|
|
34
|
+
shadow.color,
|
|
35
|
+
].join(' ');
|
|
36
|
+
|
|
37
|
+
/** Several shadows as one CSS declaration. */
|
|
38
|
+
export const shadowListCss = (shadows: readonly UiShadow[]): string =>
|
|
39
|
+
shadows.map(shadowCss).join(', ');
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* MUI's `palette.common`, which `UiTheme` has no slot for.
|
|
43
|
+
*
|
|
44
|
+
* Here rather than beside each caller because the neumorphic, glass and scrim
|
|
45
|
+
* arithmetic in more than one component mixes from exactly these two, and a
|
|
46
|
+
* per-component copy is a per-component chance to write `#000000`.
|
|
47
|
+
*/
|
|
48
|
+
export const BLACK = '#000';
|
|
49
|
+
export const WHITE = '#fff';
|
|
50
|
+
|
|
51
|
+
/** A shadow with no offset — a halo all round, which is how `glow` reads. */
|
|
52
|
+
export const halo = (blurRadius: number, color: string): UiShadow[] => [
|
|
53
|
+
{ offsetX: 0, offsetY: 0, blurRadius, spreadDistance: 0, color },
|
|
54
|
+
];
|
|
55
|
+
|
|
56
|
+
/** A dropped shadow straight down, which is how a lifted surface sits. */
|
|
57
|
+
export const drop = (offsetY: number, blurRadius: number, color: string): UiShadow[] => [
|
|
58
|
+
{ offsetX: 0, offsetY, blurRadius, spreadDistance: 0, color },
|
|
59
|
+
];
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/feedback/Dialog/Dialog.styles.ts"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material/styles/index.js';\nimport { alpha, keyframes } from '@mui/material/styles/index.js';\n\nimport { dynamicViewportHeight } from '../../../utils/viewport';\nimport type { DialogProps } from './Dialog.types';\n\n/**\n * Paper/backdrop styling for the Dialog component (FUT-181 gate cleanup):\n * pure helpers so `Dialog.tsx` stays within the size/complexity budget.\n */\n\n// Define pulse animation\nconst pulseAnimation = keyframes`\n 0% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 1;\n }\n 70% {\n box-shadow: 0 0 0 20px currentColor;\n opacity: 0;\n }\n 100% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 0;\n }\n`;\n\n/** Style toggles that shape the dialog paper (extracted so each fn stays small). */\ninterface VariantStyleOptions {\n variant: NonNullable<DialogProps['variant']>;\n size: NonNullable<DialogProps['size']>;\n borderRadius: NonNullable<DialogProps['borderRadius']>;\n glass: boolean;\n gradient: boolean;\n glow: boolean;\n pulse: boolean;\n}\n\nfunction borderRadiusOf(theme: Theme, borderRadius: VariantStyleOptions['borderRadius']) {\n switch (borderRadius) {\n case 'none': return 0;\n case 'sm': return theme.spacing(0.5);\n case 'md': return theme.spacing(1);\n case 'xl': return theme.spacing(3);\n case 'lg':\n default: return theme.spacing(2);\n }\n}\n\nfunction maxWidthOf(size: VariantStyleOptions['size']): number {\n switch (size) {\n case 'xs': return 400;\n case 'sm': return 600;\n case 'lg': return 1000;\n case 'xl': return 1200;\n case 'md':\n default: return 800;\n }\n}\n\nfunction baseStylesOf(theme: Theme, opts: VariantStyleOptions) {\n return {\n borderRadius: borderRadiusOf(theme, opts.borderRadius),\n maxWidth: maxWidthOf(opts.size),\n width: '90vw',\n margin: theme.spacing(2),\n transition: theme.transitions.create(\n ['box-shadow', 'background-color', 'backdrop-filter'],\n { duration: theme.transitions.duration.standard },\n ),\n };\n}\n\nfunction glowStylesOf(theme: Theme, glow: boolean) {\n return glow ? { boxShadow: `0 0 40px ${alpha(theme.palette.primary.main, 0.3)}` } : {};\n}\n\nfunction pulseStylesOf(theme: Theme, pulse: boolean) {\n if (!pulse) return {};\n return {\n position: 'relative' as const,\n '&::after': {\n content: '\"\"',\n position: 'absolute' as const,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n borderRadius: 'inherit',\n backgroundColor: theme.palette.primary.main,\n opacity: 0.3,\n animation: `${pulseAnimation} 2s infinite`,\n pointerEvents: 'none' as const,\n zIndex: -1,\n },\n };\n}\n\n/** The default variant's paper: optional gradient/glass over the base styles. */\nfunction defaultVariantStyles(theme: Theme, opts: VariantStyleOptions) {\n const gradientStyles = opts.gradient\n ? {\n background: `linear-gradient(135deg, ${alpha(theme.palette.primary.main, 0.1)}, ${alpha(theme.palette.secondary.main, 0.1)})`,\n backdropFilter: 'blur(10px)',\n }\n : {};\n return {\n ...gradientStyles,\n backgroundColor: opts.glass\n ? alpha(theme.palette.background.paper, 0.1)\n : theme.palette.background.paper,\n backdropFilter: opts.glass ? 'blur(20px)' : 'none',\n border: opts.glass ? `1px solid ${alpha(theme.palette.primary.main, 0.2)}` : 'none',\n };\n}\n\nexport function variantStylesOf(theme: Theme, opts: VariantStyleOptions): SxProps<Theme> {\n const decorations = {\n ...glowStylesOf(theme, opts.glow),\n ...pulseStylesOf(theme, opts.pulse),\n };\n switch (opts.variant) {\n case 'glass':\n return {\n ...baseStylesOf(theme, opts),\n ...decorations,\n backgroundColor: alpha(theme.palette.background.paper, 0.1),\n backdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(theme.palette.primary.main, 0.2)}`,\n boxShadow: `0 8px 32px ${alpha(theme.palette.common.black, 0.1)}`,\n };\n case 'fullscreen':\n return {\n borderRadius: 0,\n margin: 0,\n width: '100vw',\n // `100dvh`, not `100vh` — see `dynamicViewportHeight`.\n ...dynamicViewportHeight('height'),\n maxWidth: 'none',\n maxHeight: 'none',\n ...decorations,\n };\n case 'drawer': {\n const radius = borderRadiusOf(theme, opts.borderRadius);\n return {\n borderRadius: `${radius}px 0 0 ${radius}px`,\n margin: 0,\n width: maxWidthOf(opts.size),\n ...dynamicViewportHeight('height'),\n maxHeight: 'none',\n position: 'absolute' as const,\n right: 0,\n ...decorations,\n };\n }\n default:\n return {\n ...baseStylesOf(theme, opts),\n ...decorations,\n ...defaultVariantStyles(theme, opts),\n };\n }\n}\n\nexport function backdropSxOf(theme: Theme, glass: boolean) {\n return {\n backgroundColor: glass\n ? alpha(theme.palette.common.black, 0.2)\n : alpha(theme.palette.common.black, 0.5),\n backdropFilter: glass ? 'blur(8px)' : 'none',\n };\n}\n\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/Card/Card.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport MuiCard from '@mui/material/Card/index.js';\nimport MuiCardActions from '@mui/material/CardActions/index.js';\nimport MuiCardContent from '@mui/material/CardContent/index.js';\nimport MuiCardHeader from '@mui/material/CardHeader/index.js';\nimport MuiCardMedia from '@mui/material/CardMedia/index.js';\nimport CircularProgress from '@mui/material/CircularProgress/index.js';\nimport { useTheme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { resolveCardProps } from './Card.helpers';\nimport { cardStyles } from './Card.styles';\nimport type {\n CardActionsProps,\n CardContentProps,\n CardHeaderProps,\n CardMediaProps,\n CardProps,\n} from './Card.types';\n\nexport const Card: React.FC<CardProps> = (rawProps) => {\n const {\n children,\n variant,\n interactive,\n glow,\n pulse,\n borderRadius,\n loading,\n onClick,\n onFocus,\n onBlur,\n sx,\n dataTestId,\n // These props are reserved for future implementation but need to be extracted\n // to prevent them from being passed to the underlying MuiCard\n expandable: _expandable,\n expanded: _expanded,\n onExpandToggle: _onExpandToggle,\n entranceAnimation: _entranceAnimation,\n animationDelay: _animationDelay,\n skeleton: _skeleton,\n hoverScale: _hoverScale,\n ...restProps\n } = resolveCardProps(rawProps);\n\n const theme = useTheme();\n\n // A loading card is inert: no handlers fire and pointer events are off, so a\n // half-rendered card cannot be clicked through.\n const idle = !loading;\n\n return (\n <MuiCard\n data-testid={dataTestId || 'card'}\n onClick={idle ? onClick : undefined}\n onFocus={idle ? onFocus : undefined}\n onBlur={idle ? onBlur : undefined}\n sx={{\n ...cardStyles(theme, { variant, interactive, glow, pulse, borderRadius }),\n position: 'relative',\n opacity: loading ? 0.6 : 1,\n pointerEvents: loading ? 'none' : 'auto',\n ...sx,\n }}\n {...restProps}\n >\n {loading && (\n <Box\n sx={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n zIndex: 10,\n }}\n >\n <CircularProgress />\n </Box>\n )}\n {children}\n </MuiCard>\n );\n};\n\nexport const CardHeader: React.FC<CardHeaderProps> = ({\n title,\n subtitle,\n action,\n avatar,\n children,\n dataTestId,\n ...props\n}) => {\n if (children) {\n return <Box sx={{ p: 2 }} data-testid={dataTestId || 'card-header'}>{children}</Box>;\n }\n\n return (\n <MuiCardHeader\n data-testid={dataTestId || 'card-header'}\n avatar={avatar}\n action={action}\n title={title}\n subheader={subtitle}\n titleTypographyProps={{\n 'data-testid': dataTestId ? `${dataTestId}-title` : 'card-title',\n } as Record<string, unknown>}\n subheaderTypographyProps={{\n 'data-testid': dataTestId ? `${dataTestId}-subtitle` : 'card-subtitle',\n } as Record<string, unknown>}\n {...props}\n />\n );\n};\n\nexport const CardContent: React.FC<CardContentProps> = ({ children, dense = false, dataTestId, ...props }) => (\n <MuiCardContent\n data-testid={dataTestId || 'card-content'}\n sx={{\n padding: dense ? 1 : 2,\n '&:last-child': {\n paddingBottom: dense ? 1 : 2,\n },\n }}\n {...props}\n >\n {children}\n </MuiCardContent>\n );\n\nexport const CardActions: React.FC<CardActionsProps> = ({\n children,\n disableSpacing = false,\n alignment = 'left',\n dataTestId,\n ...props\n}) => {\n const getJustifyContent = () => {\n switch (alignment) {\n case 'center':\n return 'center';\n case 'right':\n return 'flex-end';\n case 'space-between':\n return 'space-between';\n default:\n return 'flex-start';\n }\n };\n\n return (\n <MuiCardActions\n data-testid={dataTestId || 'card-actions'}\n disableSpacing={disableSpacing}\n sx={{\n justifyContent: getJustifyContent(),\n }}\n {...props}\n >\n {children}\n </MuiCardActions>\n );\n};\n\nexport const CardMedia: React.FC<CardMediaProps> = ({\n component = 'div',\n image,\n title,\n height = 200,\n children,\n dataTestId,\n ...props\n}) => (\n <MuiCardMedia\n data-testid={dataTestId || 'card-media'}\n component={component}\n height={height}\n image={image}\n title={title}\n {...props}\n >\n {children}\n </MuiCardMedia>\n );\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/Card/Card.helpers.ts"],"sourcesContent":["import type { CardProps } from './Card.types';\n\ntype CardDefaultedKeys =\n | 'variant'\n | 'interactive'\n | 'glow'\n | 'pulse'\n | 'borderRadius'\n | 'loading';\n\ntype ResolvedCardProps = CardProps & Required<Pick<CardProps, CardDefaultedKeys>>;\n\nconst CARD_DEFAULTS: Pick<CardProps, CardDefaultedKeys> = {\n variant: 'elevated',\n interactive: false,\n glow: false,\n pulse: false,\n borderRadius: 'md',\n loading: false,\n};\n\n// Strips explicitly-undefined props before the merge, so `glow={undefined}` still\n// falls back to the default exactly as a destructuring default would.\nconst definedProps = (props: CardProps): Partial<CardProps> =>\n Object.fromEntries(\n Object.entries(props).filter(([, value]) => value !== undefined),\n ) as Partial<CardProps>;\n\nexport const resolveCardProps = (props: CardProps): ResolvedCardProps =>\n ({ ...CARD_DEFAULTS, ...definedProps(props) }) as ResolvedCardProps;\n"],"mappings":";AAYA,IAAM,gBAAoD;AAAA,EACxD,SAAS;AAAA,EACT,aAAa;AAAA,EACb,MAAM;AAAA,EACN,OAAO;AAAA,EACP,cAAc;AAAA,EACd,SAAS;AACX;AAIA,IAAM,eAAe,CAAC,UACpB,OAAO;AAAA,EACL,OAAO,QAAQ,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,UAAU,MAAS;AACjE;AAEK,IAAM,mBAAmB,CAAC,WAC9B,EAAE,GAAG,eAAe,GAAG,aAAa,KAAK,EAAE;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/feedback/Dialog/Dialog.tsx"],"sourcesContent":["import CloseIcon from '@mui/icons-material/Close';\nimport Backdrop from '@mui/material/Backdrop/index.js';\nimport Box from '@mui/material/Box/index.js';\nimport MuiDialog from '@mui/material/Dialog/index.js';\nimport MuiDialogActions from '@mui/material/DialogActions/index.js';\nimport MuiDialogContent from '@mui/material/DialogContent/index.js';\nimport MuiDialogTitle from '@mui/material/DialogTitle/index.js';\nimport Drawer from '@mui/material/Drawer/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { useTheme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { backdropSxOf, variantStylesOf } from './Dialog.styles';\nimport type {\n DialogActionsProps,\n DialogContentProps,\n DialogHeaderProps,\n DialogProps,\n} from './Dialog.types';\n\n/**\n * Does this hand us a spacing slot? Fragments are transparent: `<>` is a way of\n * passing several children, not a child that owns them, and a consumer who\n * groups a `DialogContent` and a `DialogActions` in one has still passed both.\n *\n * Only the slots themselves count, and only at the top. A `DialogContent`\n * genuinely nested inside a `<div>` is that div's content, and the dialog\n * padding the div is right.\n */\nfunction hasSpacingSlot(children: React.ReactNode): boolean {\n return React.Children.toArray(children).some((child) => {\n if (!React.isValidElement(child)) return false;\n if (child.type === DialogContent || child.type === DialogActions) return true;\n if (child.type !== React.Fragment) return false;\n return hasSpacingSlot((child.props as { children?: React.ReactNode }).children);\n });\n}\n\n/**\n * The padding a dialog gives children that are not managing their own — and the\n * rule that takes it back when it turns out they are.\n *\n * `:has()` is doing what {@link hasSpacingSlot} cannot. A slot passed through a\n * COMPONENT (`<Body />` rendering a `DialogContent`) is invisible to any check\n * on element type: React does not know what a component renders until it has\n * rendered it, and by then the wrapper is already in the tree. The selector\n * asks the question one step later, of the DOM, where the answer exists.\n *\n * `display: contents` rather than `padding: 0`, because the padding is only\n * half of what a wrapper does. The other half is standing between the paper and\n * its children: MUI's `scroll=\"paper\"` makes the paper a flex column with\n * `overflow-y: auto`, so a `DialogContent` that is no longer its direct child\n * cannot be the thing that scrolls — the whole dialog scrolls instead and\n * carries the `DialogActions` off the bottom with it. An element with\n * `display: contents` generates no box at all: its children become the paper's\n * flex items, and its padding is never applied. Both halves, one declaration.\n *\n * A browser without `:has()` falls back to the padded box — the layout this\n * had before, not a broken one.\n */\nconst BODY_SX = {\n px: 3,\n pb: 2.5,\n '&:has(> .MuiDialogContent-root), &:has(> .MuiDialogActions-root)': {\n display: 'contents',\n },\n} as const;\n\n/**\n * The dialog body. Consumers that pass raw children (no <DialogContent>) used\n * to render them flush against the paper edges — give them comfortable default\n * padding; <DialogContent>/<DialogActions> users keep managing their own\n * spacing.\n */\nfunction bodyOf(children: React.ReactNode, hasTitle: boolean): React.ReactNode {\n if (hasSpacingSlot(children)) return children;\n return <Box sx={{ ...BODY_SX, pt: hasTitle ? 0.5 : 2.5 }}>{children}</Box>;\n}\n\nconst DIALOG_DEFAULTS = {\n variant: 'default',\n size: 'md',\n showCloseButton: true,\n backdrop: true,\n persistent: false,\n glass: false,\n gradient: false,\n glow: false,\n pulse: false,\n borderRadius: 'lg',\n} as const satisfies Partial<DialogProps>;\n\n/** DialogProps with every defaulted field guaranteed present (wide types). */\ntype DialogPropsWithDefaults = DialogProps &\n Required<Pick<DialogProps, keyof typeof DIALOG_DEFAULTS>>;\n\n/**\n * Apply {@link DIALOG_DEFAULTS} exactly like parameter defaults would: only a\n * missing/`undefined` prop falls back (a loop, so the component's cyclomatic\n * complexity doesn't pay one branch per defaulted prop).\n */\nfunction withDialogDefaults(props: DialogProps): DialogPropsWithDefaults {\n const merged: Record<string, unknown> = { ...props };\n for (const [key, value] of Object.entries(DIALOG_DEFAULTS)) {\n if (merged[key] === undefined) merged[key] = value;\n }\n return merged as unknown as DialogPropsWithDefaults;\n}\n\nexport const Dialog: React.FC<DialogProps> = (rawProps) => {\n const {\n children,\n variant,\n size,\n title,\n description,\n showCloseButton,\n backdrop,\n persistent,\n glass,\n gradient,\n glow,\n pulse,\n borderRadius,\n onClose,\n open,\n dataTestId,\n ...props\n } = withDialogDefaults(rawProps);\n const theme = useTheme();\n const testId = dataTestId || 'dialog';\n const paperSx = variantStylesOf(theme, {\n variant, size, borderRadius, glass, gradient, glow, pulse,\n });\n\n const handleClose = (event: object, reason: 'backdropClick' | 'escapeKeyDown') => {\n if (persistent && (reason === 'backdropClick' || reason === 'escapeKeyDown')) {\n return;\n }\n onClose?.();\n };\n\n const header = title ? (\n <DialogHeader\n title={title}\n subtitle={description}\n showCloseButton={showCloseButton}\n onClose={onClose}\n dataTestId={dataTestId}\n />\n ) : null;\n const body = bodyOf(children, Boolean(title));\n\n if (variant === 'drawer') {\n return (\n <Drawer\n anchor=\"right\"\n open={open}\n onClose={onClose}\n data-testid={testId}\n {...props}\n >\n <Box sx={{ ...paperSx, display: 'flex', flexDirection: 'column', overflow: 'hidden' }}>\n {header}\n {body}\n </Box>\n </Drawer>\n );\n }\n\n return (\n <MuiDialog\n open={open}\n onClose={handleClose}\n fullScreen={variant === 'fullscreen'}\n BackdropComponent={backdrop ? Backdrop : undefined}\n BackdropProps={{ sx: backdropSxOf(theme, glass) }}\n PaperProps={{ sx: paperSx, 'data-testid': testId }}\n {...props}\n >\n {header}\n {body}\n </MuiDialog>\n );\n};\n\nexport const DialogHeader: React.FC<DialogHeaderProps> = ({\n children,\n title,\n subtitle,\n showCloseButton = true,\n onClose,\n dataTestId,\n}) => {\n if (children) {\n return (\n <Box sx={{ p: 2, borderBottom: '1px solid', borderColor: 'divider' }}>\n {children}\n </Box>\n );\n }\n\n return (\n <MuiDialogTitle\n data-testid={dataTestId ? `${dataTestId}-title` : 'dialog-title'}\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n pb: subtitle ? 1 : 2,\n }}\n >\n <Box>\n <Typography variant=\"h6\" component=\"div\">\n {title}\n </Typography>\n {subtitle && (\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ mt: 0.5 }}>\n {subtitle}\n </Typography>\n )}\n </Box>\n {showCloseButton && onClose && (\n <IconButton\n aria-label=\"close\"\n onClick={onClose}\n data-testid={dataTestId ? `${dataTestId}-close` : 'dialog-close'}\n sx={{\n color: 'text.secondary',\n '&:hover': {\n backgroundColor: 'action.hover',\n },\n }}\n >\n <CloseIcon />\n </IconButton>\n )}\n </MuiDialogTitle>\n );\n};\n\n/**\n * Top padding for a body that sits directly under the title.\n *\n * MUI zeroes it there (`.MuiDialogTitle-root + &` on a non-`dividers` content),\n * assuming the title's own bottom padding is the whole gap. That assumption\n * breaks for a body opening with an outlined field: a filled field floats its\n * label ABOVE the input's border box, and `DialogContent` is `overflow-y: auto`\n * — a clipping box — so the label gets sliced in half (FUT-544: \"Tipo\" in the\n * \"Novo insumo\" dialog).\n *\n * Reserve the overhang rather than restore the full 24px: the title already\n * contributes its bottom padding, so a shrunk label's `translate(…, -9px)` is\n * all that is missing. 12px clears it and leaves the gap visually tight.\n */\nconst TITLED_BODY_PADDING_TOP = 1.5;\n\n/**\n * `.MuiDialogTitle-root + &` is `(0,2,0)`-specific and a plain `sx` entry is\n * `(0,1,0)`, so the padding above only survives the cascade by naming the class\n * again — `(0,3,0)`. Scoped to the title-following case so an untitled dialog\n * keeps MUI's roomier default.\n */\nconst TITLED_BODY_SELECTOR = '.MuiDialogTitle-root + &.MuiDialogContent-root';\n\nexport const DialogContent: React.FC<DialogContentProps> = ({\n children,\n dividers = false,\n dense = false,\n dataTestId,\n ...props\n}) => (\n <MuiDialogContent\n data-testid={dataTestId ? `${dataTestId}-content` : 'dialog-content'}\n dividers={dividers}\n sx={{\n padding: dense ? 1.5 : 3,\n [TITLED_BODY_SELECTOR]: { paddingTop: TITLED_BODY_PADDING_TOP },\n '&.MuiDialogContent-dividers': {\n borderTop: dividers ? '1px solid' : 'none',\n borderBottom: dividers ? '1px solid' : 'none',\n borderColor: 'divider',\n },\n }}\n {...props}\n >\n {children}\n </MuiDialogContent>\n );\n\nexport const DialogActions: React.FC<DialogActionsProps> = ({\n children,\n alignment = 'right',\n spacing = 1,\n dataTestId,\n ...props\n}) => {\n const getJustifyContent = () => {\n switch (alignment) {\n case 'left': return 'flex-start';\n case 'center': return 'center';\n case 'right': return 'flex-end';\n case 'space-between': return 'space-between';\n default: return 'flex-end';\n }\n };\n\n return (\n <MuiDialogActions\n data-testid={dataTestId ? `${dataTestId}-actions` : 'dialog-actions'}\n sx={{\n justifyContent: getJustifyContent(),\n gap: spacing,\n p: 2,\n }}\n {...props}\n >\n {children}\n </MuiDialogActions>\n );\n};"],"mappings":"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","names":[]}
|