@12-apps/ui 6.78.4 → 6.79.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/dist/_internal/components/data-display/Alert/Alert.js +3 -3
- package/dist/_internal/components/data-display/AlertDialog/AlertDialog.js +2 -1
- package/dist/_internal/components/data-display/AsyncStateContainer/AsyncStateContainer.js +3 -3
- package/dist/_internal/components/data-display/Avatar/Avatar.js +4 -4
- package/dist/_internal/components/data-display/Avatar/Avatar.view.js +2 -2
- package/dist/_internal/components/data-display/CardKit/card-actions-context.js +4 -4
- package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +11 -10
- package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +7 -6
- package/dist/_internal/components/data-display/Carousel/Carousel.chrome.js +5 -2
- package/dist/_internal/components/data-display/Carousel/Carousel.js +7 -4
- package/dist/_internal/components/data-display/Carousel/Carousel.parts.js +4 -1
- package/dist/_internal/components/data-display/Chart/Chart.js +3 -3
- package/dist/_internal/components/data-display/Chart/SpecChart.js +6 -6
- package/dist/_internal/components/data-display/Chart/chart-renderers.js +2 -2
- package/dist/_internal/components/data-display/Chart/chart-spec.js +2 -2
- package/dist/_internal/components/data-display/DataGrid/DataGrid.js +2 -2
- package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +50 -49
- package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +70 -69
- package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +4 -3
- package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +9 -8
- package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +8 -7
- package/dist/_internal/components/data-display/DataViews/base-card.js +5 -5
- package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +3 -3
- package/dist/_internal/components/data-display/DataViews/base-list-card-gutters.js +3 -3
- package/dist/_internal/components/data-display/DataViews/base-list-card-layout.js +3 -3
- package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +2 -2
- package/dist/_internal/components/data-display/DataViews/base-list-card.js +10 -10
- package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +15 -14
- package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +21 -20
- package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +6 -6
- package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +45 -44
- package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +22 -21
- package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +19 -18
- package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +20 -19
- 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-shell-toolbar.js +9 -8
- package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +22 -21
- package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +8 -7
- package/dist/_internal/components/data-display/DataViews/list-card-rails.js +2 -2
- package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +4 -4
- package/dist/_internal/components/data-display/EmptyState/EmptyState.js +2 -2
- package/dist/_internal/components/data-display/FleetMap/FleetBody.js +11 -8
- package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +10 -7
- package/dist/_internal/components/data-display/FleetMap/FleetMap.fixtures.js +1 -1
- package/dist/_internal/components/data-display/FleetMap/FleetMap.js +15 -12
- package/dist/_internal/components/data-display/HoverCard/HoverCard.js +2 -2
- package/dist/_internal/components/data-display/InteractiveTooltip/InteractiveTooltip.js +2 -2
- package/dist/_internal/components/data-display/LazyImage/LazyImage.hooks.js +1 -1
- package/dist/_internal/components/data-display/LazyImage/LazyImage.js +3 -2
- package/dist/_internal/components/data-display/Lightbox/Lightbox.js +6 -6
- package/dist/_internal/components/data-display/MapPreview/MapControlBar.js +5 -1
- package/dist/_internal/components/data-display/MapPreview/MapLayers.js +7 -3
- package/dist/_internal/components/data-display/MapPreview/MapMarkers.js +5 -1
- package/dist/_internal/components/data-display/MapPreview/MapPreview.helpers.js +6 -1
- package/dist/_internal/components/data-display/MapPreview/MapPreview.js +9 -6
- package/dist/_internal/components/data-display/Progress/Progress.js +2 -2
- package/dist/_internal/components/data-display/SectionOnboarding/SectionOnboarding.js +6 -4
- package/dist/_internal/components/data-display/Sheet/Sheet.hooks.js +2 -2
- package/dist/_internal/components/data-display/Sheet/Sheet.js +4 -4
- package/dist/_internal/components/data-display/Stepper/Stepper.js +3 -1
- package/dist/_internal/components/data-display/Table/Table.helpers.js +1 -1
- package/dist/_internal/components/data-display/Table/Table.js +6 -4
- package/dist/_internal/components/data-display/Table/TableParts.hooks.js +4 -2
- package/dist/_internal/components/data-display/Table/TableParts.js +4 -2
- package/dist/_internal/components/data-display/Timeline/Timeline.js +4 -2
- package/dist/_internal/components/data-display/Timeline/TimelineRow.js +1 -1
- package/dist/_internal/components/data-display/index.js +69 -64
- package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.js +4 -3
- package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.parts.js +3 -2
- package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +5 -4
- package/dist/_internal/components/feedback/ConfirmAction/with-confirmation.js +4 -3
- package/dist/_internal/components/feedback/Dialog/Dialog.js +3 -2
- package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +4 -4
- package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.js +12 -11
- package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.parts.js +6 -6
- package/dist/_internal/components/feedback/Sonner/Sonner.js +3 -2
- package/dist/_internal/components/feedback/Sonner/SonnerToast.js +1 -1
- package/dist/_internal/components/feedback/StackedModal/StackedModal.js +7 -6
- package/dist/_internal/components/feedback/StackedModal/StackedModal.parts.js +2 -1
- package/dist/_internal/components/feedback/Toast/Toast.js +2 -1
- package/dist/_internal/components/feedback/TutorialOverlay/TutorialOverlay.js +3 -2
- package/dist/_internal/components/feedback/TutorialOverlay/TutorialStepBody.js +2 -1
- package/dist/_internal/components/feedback/index.js +33 -31
- package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.helpers.js +3 -1
- package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.hooks.js +8 -6
- package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +12 -10
- package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +4 -2
- package/dist/_internal/components/form/AddressAutocomplete/useAddressPredictions.js +4 -2
- package/dist/_internal/components/form/AddressAutocomplete/useAddressSelection.js +1 -1
- package/dist/_internal/components/form/AddressAutocomplete/useCurrentLocation.js +1 -1
- package/dist/_internal/components/form/AddressAutocomplete/useGoogleMapsAPI.js +1 -1
- package/dist/_internal/components/form/Autocomplete/Autocomplete.js +2 -2
- package/dist/_internal/components/form/Calendar/Calendar.hooks.js +2 -2
- package/dist/_internal/components/form/Calendar/Calendar.js +6 -6
- 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 +5 -5
- 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 +9 -9
- package/dist/_internal/components/form/Checkbox/Checkbox.js +2 -2
- package/dist/_internal/components/form/CodeEditor/CodeEditor.js +3 -3
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +9 -9
- package/dist/_internal/components/form/InputOTP/InputOTP.js +2 -2
- package/dist/_internal/components/form/Menubar/Menubar.js +2 -2
- package/dist/_internal/components/form/PhoneInput/PhoneInput.hooks.js +2 -2
- package/dist/_internal/components/form/PhoneInput/PhoneInput.js +3 -3
- package/dist/_internal/components/form/PhoneInput/countries.js +7 -3
- package/dist/_internal/components/form/PickerSheet/PickerSheet.js +4 -4
- package/dist/_internal/components/form/RichTextEditor/RichTextEditor.dom.js +2 -1
- package/dist/_internal/components/form/RichTextEditor/RichTextEditor.format.js +3 -2
- package/dist/_internal/components/form/RichTextEditor/RichTextEditor.hooks.js +4 -3
- package/dist/_internal/components/form/RichTextEditor/RichTextEditor.js +7 -5
- package/dist/_internal/components/form/RichTextEditor/RichTextEditorToolbar.js +1 -1
- 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/Textarea/Textarea.js +1 -1
- package/dist/_internal/components/form/Textarea/TextareaRichEditor.js +4 -1
- package/dist/_internal/components/form/Textarea/TextareaRichEditor.js.map +1 -1
- package/dist/_internal/components/form/UploadButton/UploadButton.hooks.js +2 -1
- package/dist/_internal/components/form/UploadButton/UploadButton.js +3 -2
- package/dist/_internal/components/form/index.js +48 -45
- package/dist/_internal/components/form/total-form/Fields/CategoryField.js +10 -10
- package/dist/_internal/components/form/total-form/Fields/index.js +13 -13
- package/dist/_internal/components/form/total-form/FormErrorSnackbar.js +3 -2
- package/dist/_internal/components/index.js +196 -188
- package/dist/_internal/components/layout/Card/Card.js +2 -2
- package/dist/_internal/components/layout/ContentToolbar/FilterTrigger.js +2 -1
- package/dist/_internal/components/layout/ContentToolbar/ViewSelector.js +2 -1
- package/dist/_internal/components/layout/Dashboard/Dashboard.js +2 -1
- package/dist/_internal/components/layout/ScrollArea/ScrollArea.js +3 -3
- package/dist/_internal/components/layout/SettingCard/SettingCard.js +4 -4
- package/dist/_internal/components/layout/SettingCard/SettingCard.summary.js +3 -3
- package/dist/_internal/components/layout/SettingCard/SettingGroup.js +10 -10
- package/dist/_internal/components/layout/SettingCard/SettingSwitch.js +8 -8
- package/dist/_internal/components/layout/SettingCard/SettingToggle.js +10 -10
- package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +6 -6
- 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/index.js +34 -33
- package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +8 -7
- package/dist/_internal/components/navigation/CommandPalette/CommandPalette.helpers.js +2 -1
- package/dist/_internal/components/navigation/CommandPalette/CommandPalette.hooks.js +3 -2
- package/dist/_internal/components/navigation/CommandPalette/CommandPalette.js +6 -4
- package/dist/_internal/components/navigation/CommandPalette/CommandPaletteResults.js +3 -1
- package/dist/_internal/components/navigation/NavigationMenu/NavigationMegaSection.js +4 -4
- package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.js +7 -6
- package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.shell.js +1 -1
- package/dist/_internal/components/navigation/NavigationMenu/NavigationMenuItem.js +2 -2
- package/dist/_internal/components/navigation/NavigationMenu/NavigationStandardBody.js +5 -4
- 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 +4 -4
- package/dist/_internal/components/navigation/index.js +29 -26
- package/dist/_internal/components/typography/Code/Code.js +2 -1
- package/dist/_internal/components/typography/index.js +2 -1
- package/dist/_internal/components/utility/InstallPrompt/InstallPrompt.js +2 -2
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.helpers.js +7 -3
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.js +6 -4
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.parts.js +4 -2
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStepRow.js +5 -3
- package/dist/_internal/components/utility/index.js +8 -6
- package/dist/_internal/copy/labels.js +1 -0
- package/dist/_internal/en-US.data-display.js +1 -1
- package/dist/_internal/en-US.feedback.js +1 -1
- package/dist/_internal/en-US.form.js +1 -1
- package/dist/_internal/en-US.labels.js +8 -0
- package/dist/_internal/en-US.navigation.js +1 -1
- package/dist/_internal/en-US.utility.js +1 -1
- package/dist/_internal/pt-BR.data-display.js +1 -1
- package/dist/_internal/pt-BR.feedback.js +1 -1
- package/dist/_internal/pt-BR.form.js +1 -1
- package/dist/_internal/pt-BR.labels.js +8 -0
- package/dist/_internal/pt-BR.labels.js.map +1 -0
- package/dist/_internal/pt-BR.navigation.js +1 -1
- package/dist/_internal/pt-BR.utility.js +1 -1
- package/dist/_internal/social-login-button/social-login-button.js +4 -4
- package/dist/_internal/user-avatar/user-avatar.js +8 -7
- package/dist/_internal/utils/resolve-labels.js +8 -0
- package/dist/_internal/utils/resolve-labels.js.map +1 -0
- package/dist/charts.js +11 -11
- package/dist/{chunk-2ILXXBMG.js → chunk-25HBYY4O.js} +12 -6
- package/dist/chunk-25HBYY4O.js.map +1 -0
- package/dist/{chunk-OPP6USJC.js → chunk-2FQF4CNE.js} +2 -2
- package/dist/{chunk-BWFQEASG.js → chunk-2P5ZBBTL.js} +5 -5
- package/dist/{chunk-QVO4SIS7.js → chunk-3W2B7IZG.js} +2 -2
- package/dist/{chunk-PMRLFNBT.js → chunk-3XLSA3YB.js} +4 -4
- package/dist/{chunk-7P5PNRBT.js → chunk-3YCV4EP7.js} +6 -6
- package/dist/{chunk-AYP6ICAY.js → chunk-44FY2YZL.js} +11 -10
- package/dist/chunk-44FY2YZL.js.map +1 -0
- package/dist/chunk-47IAX6PI.js +119 -0
- package/dist/chunk-47IAX6PI.js.map +1 -0
- package/dist/{chunk-Q6PRGXR2.js → chunk-4HBCWKIX.js} +4 -4
- package/dist/{chunk-HN3PZTUK.js → chunk-4MKVGSHX.js} +5 -5
- package/dist/{chunk-EERUSI52.js → chunk-4N3I7ZHQ.js} +2 -2
- package/dist/{chunk-O6SAU5JA.js → chunk-4OTJ66ID.js} +4 -4
- package/dist/{chunk-LG52LMAM.js → chunk-556LO6KA.js} +3 -3
- package/dist/{chunk-LBZEPWYK.js → chunk-5GLOEGOM.js} +4 -4
- package/dist/{chunk-KZXOIRUP.js → chunk-5MAD6ZEI.js} +43 -12
- package/dist/chunk-5MAD6ZEI.js.map +1 -0
- package/dist/{chunk-XICRCPEQ.js → chunk-5U7LBO2V.js} +5 -4
- package/dist/chunk-5U7LBO2V.js.map +1 -0
- package/dist/{chunk-JE6RZ5L6.js → chunk-5ZOJLYD2.js} +4 -4
- package/dist/{chunk-GSXYXMCV.js → chunk-66BRUS2M.js} +2 -2
- package/dist/{chunk-ALREWFRX.js → chunk-6DGNMASB.js} +4 -4
- package/dist/{chunk-MA6SUE7F.js → chunk-6EZQLNPK.js} +5 -3
- package/dist/chunk-6EZQLNPK.js.map +1 -0
- package/dist/{chunk-VRPCZ3IE.js → chunk-6JKECOZ2.js} +7 -6
- package/dist/chunk-6JKECOZ2.js.map +1 -0
- package/dist/{chunk-XKSA4L2X.js → chunk-6MGYPTAL.js} +11 -3
- package/dist/chunk-6MGYPTAL.js.map +1 -0
- package/dist/{chunk-5752357K.js → chunk-6N2U67KF.js} +4 -4
- package/dist/{chunk-UZOG6HNN.js → chunk-6SFJIW54.js} +5 -4
- package/dist/chunk-6SFJIW54.js.map +1 -0
- package/dist/{chunk-VD72JGHA.js → chunk-73OYC22L.js} +2 -2
- package/dist/{chunk-6DAIC2MG.js → chunk-775LIZXS.js} +4 -4
- package/dist/{chunk-C5JCARNE.js → chunk-7HKXTRTK.js} +7 -4
- package/dist/chunk-7HKXTRTK.js.map +1 -0
- package/dist/{chunk-S4JXSC4D.js → chunk-7HZ6TJRH.js} +6 -6
- package/dist/{chunk-33LAPBYB.js → chunk-7S25RDE4.js} +9 -5
- package/dist/chunk-7S25RDE4.js.map +1 -0
- package/dist/{chunk-CSD6SWBZ.js → chunk-A3Z7ZXLM.js} +6 -6
- package/dist/{chunk-LI6XSM5D.js → chunk-A6V7KE45.js} +3 -3
- package/dist/{chunk-YJBWDDW7.js → chunk-AAWVAQI2.js} +12 -12
- package/dist/{chunk-44PBCQ7E.js → chunk-ABQZFK7M.js} +6 -6
- package/dist/{chunk-EIMFA7KP.js → chunk-ANUO67JQ.js} +2 -2
- package/dist/{chunk-PTQRJEPN.js → chunk-AOBQ3KYY.js} +2 -2
- package/dist/{chunk-LODYTVOO.js → chunk-B25SHVWP.js} +4 -4
- package/dist/{chunk-GTT5UKKO.js → chunk-BDJIP4HG.js} +4 -4
- package/dist/{chunk-RS576GOH.js → chunk-BIUT3K6A.js} +4 -4
- package/dist/{chunk-4NQXHPQR.js → chunk-BJ7NWZWO.js} +11 -2
- package/dist/chunk-BJ7NWZWO.js.map +1 -0
- package/dist/{chunk-A5NXBOWS.js → chunk-BLHSLB5D.js} +5 -5
- package/dist/{chunk-DYHOBKPU.js → chunk-BLZDSCIZ.js} +6 -6
- package/dist/{chunk-E53MMMDA.js → chunk-BX6CF2UG.js} +3 -3
- package/dist/{chunk-WVZBYTIK.js → chunk-C465AAD5.js} +29 -19
- package/dist/chunk-C465AAD5.js.map +1 -0
- package/dist/{chunk-7HA7UH7O.js → chunk-C4OETF7K.js} +4 -4
- package/dist/{chunk-64AOS2WA.js → chunk-CAHN7AMY.js} +5 -5
- package/dist/{chunk-Z24VOTA7.js → chunk-CCWE6DBC.js} +4 -2
- package/dist/{chunk-Z24VOTA7.js.map → chunk-CCWE6DBC.js.map} +1 -1
- package/dist/{chunk-YLSDFW5O.js → chunk-CN4JS57H.js} +35 -5
- package/dist/chunk-CN4JS57H.js.map +1 -0
- package/dist/{chunk-MSC43MCJ.js → chunk-CRFOAKQL.js} +5 -5
- package/dist/{chunk-IQ2U5MVO.js → chunk-CSQWPDQV.js} +9 -9
- package/dist/{chunk-B2JYQBO4.js → chunk-CXTRDTNM.js} +11 -6
- package/dist/chunk-CXTRDTNM.js.map +1 -0
- package/dist/{chunk-TTCVYY2B.js → chunk-CYKINZKO.js} +22 -7
- package/dist/chunk-CYKINZKO.js.map +1 -0
- package/dist/{chunk-FT6HBP5E.js → chunk-DE7E2GBP.js} +11 -8
- package/dist/chunk-DE7E2GBP.js.map +1 -0
- package/dist/{chunk-QWVETTIY.js → chunk-DJMVBIFD.js} +21 -12
- package/dist/chunk-DJMVBIFD.js.map +1 -0
- package/dist/{chunk-3HLKTBEO.js → chunk-DQ22UKMZ.js} +4 -2
- package/dist/{chunk-3HLKTBEO.js.map → chunk-DQ22UKMZ.js.map} +1 -1
- package/dist/{chunk-INGPH3YQ.js → chunk-DVRNW33K.js} +28 -5
- package/dist/chunk-DVRNW33K.js.map +1 -0
- package/dist/{chunk-VQYR64QB.js → chunk-DX5PLJKN.js} +8 -3
- package/dist/chunk-DX5PLJKN.js.map +1 -0
- package/dist/{chunk-7XSCEHGA.js → chunk-EOQ6EKTS.js} +7 -7
- package/dist/{chunk-UGH2DDST.js → chunk-ETSASQXI.js} +4 -2
- package/dist/chunk-ETSASQXI.js.map +1 -0
- package/dist/{chunk-3VXS7O3X.js → chunk-EVYLJ5JB.js} +17 -3
- package/dist/chunk-EVYLJ5JB.js.map +1 -0
- package/dist/chunk-FB4GLQQO.js +102 -0
- package/dist/chunk-FB4GLQQO.js.map +1 -0
- package/dist/{chunk-WC3W36AM.js → chunk-FKUVFPQZ.js} +26 -12
- package/dist/chunk-FKUVFPQZ.js.map +1 -0
- package/dist/{chunk-VEKTKCSB.js → chunk-FLJ3RIRP.js} +5 -5
- package/dist/{chunk-LH4VKUZC.js → chunk-FLTXJWOC.js} +13 -7
- package/dist/chunk-FLTXJWOC.js.map +1 -0
- package/dist/{chunk-2ARVNCVU.js → chunk-FZUAB2KS.js} +8 -6
- package/dist/chunk-FZUAB2KS.js.map +1 -0
- package/dist/{chunk-PY3RW5LC.js → chunk-G2IVONJD.js} +24 -10
- package/dist/chunk-G2IVONJD.js.map +1 -0
- package/dist/{chunk-Z5WUSI47.js → chunk-G3JFESKD.js} +6 -6
- package/dist/{chunk-XRDH24J7.js → chunk-G6ET2DRL.js} +2 -2
- package/dist/{chunk-KIL3OVLI.js → chunk-G76PIGF7.js} +6 -2
- package/dist/chunk-G76PIGF7.js.map +1 -0
- package/dist/{chunk-XQWUVQ2F.js → chunk-GHGZI7PK.js} +6 -2
- package/dist/chunk-GHGZI7PK.js.map +1 -0
- package/dist/{chunk-4MQ6XTIJ.js → chunk-GJMWQUAD.js} +24 -13
- package/dist/chunk-GJMWQUAD.js.map +1 -0
- package/dist/{chunk-U4G3KY6L.js → chunk-GMU5AA3R.js} +8 -7
- package/dist/chunk-GMU5AA3R.js.map +1 -0
- package/dist/{chunk-ZFBFQK2Y.js → chunk-GPPUKDA6.js} +11 -12
- package/dist/chunk-GPPUKDA6.js.map +1 -0
- package/dist/{chunk-O36MIQIO.js → chunk-GPQ22MPR.js} +2 -2
- package/dist/{chunk-GRMBCJS6.js → chunk-H6R2L7VI.js} +4 -4
- package/dist/{chunk-AMLHEKSV.js → chunk-HI7JPDD6.js} +5 -5
- package/dist/{chunk-CW6Y32N2.js → chunk-I2CT4XIP.js} +6 -6
- package/dist/{chunk-N34AOGK3.js → chunk-I3OKAQ5L.js} +7 -7
- package/dist/{chunk-AEYLFBZT.js → chunk-I4NDZFTB.js} +2 -2
- package/dist/{chunk-5J7SA4CZ.js → chunk-IASPZGYB.js} +28 -10
- package/dist/chunk-IASPZGYB.js.map +1 -0
- package/dist/{chunk-2ZRZTGWP.js → chunk-ISW5K72V.js} +5 -5
- package/dist/{chunk-KARMRTTM.js → chunk-J2RUDZVJ.js} +7 -7
- package/dist/{chunk-FTPTPASD.js → chunk-JBYFBPI6.js} +2 -5
- package/dist/{chunk-FTPTPASD.js.map → chunk-JBYFBPI6.js.map} +1 -1
- package/dist/{chunk-4M5GEKPM.js → chunk-JL4I7OQE.js} +4 -4
- package/dist/chunk-JQLQOIB3.js +1 -0
- package/dist/chunk-JQLQOIB3.js.map +1 -0
- package/dist/{chunk-NBXG3SQ3.js → chunk-JSY234NY.js} +5 -5
- package/dist/{chunk-HQCZT6TO.js → chunk-JVOEVTCZ.js} +5 -5
- package/dist/{chunk-MBMZNSBP.js → chunk-JW7MN4DG.js} +3 -3
- package/dist/{chunk-ZPACE34U.js → chunk-K53XSVQO.js} +10 -10
- package/dist/{chunk-RUF7TOAZ.js → chunk-KE74C2SM.js} +3 -2
- package/dist/{chunk-RUF7TOAZ.js.map → chunk-KE74C2SM.js.map} +1 -1
- package/dist/{chunk-GBVNY2LG.js → chunk-KTXJQ4YJ.js} +6 -6
- package/dist/{chunk-FCVPVEAS.js → chunk-KYE7I6NT.js} +7 -7
- package/dist/{chunk-MM7BPTVV.js → chunk-KYT5G4K7.js} +2 -2
- package/dist/{chunk-4VRDFZ4G.js → chunk-KYTFGW4R.js} +7 -3
- package/dist/chunk-KYTFGW4R.js.map +1 -0
- package/dist/chunk-L35TCXFA.js +74 -0
- package/dist/chunk-L35TCXFA.js.map +1 -0
- package/dist/{chunk-3V3Z4EML.js → chunk-L4FWEI2P.js} +5 -5
- package/dist/{chunk-7VRCGWQL.js → chunk-L7N4AFZD.js} +6 -5
- package/dist/chunk-L7N4AFZD.js.map +1 -0
- package/dist/{chunk-2TSGRQ2J.js → chunk-LHJJZ462.js} +4 -2
- package/dist/chunk-LHJJZ462.js.map +1 -0
- package/dist/{chunk-SV6IQ2YO.js → chunk-LIWONEAU.js} +6 -4
- package/dist/chunk-LIWONEAU.js.map +1 -0
- package/dist/chunk-LL2BWQPM.js +11 -0
- package/dist/chunk-LL2BWQPM.js.map +1 -0
- package/dist/{chunk-XYFBJH6F.js → chunk-LR473BUT.js} +19 -9
- package/dist/chunk-LR473BUT.js.map +1 -0
- package/dist/{chunk-56JF5PZK.js → chunk-LYVTJLCF.js} +4 -4
- package/dist/{chunk-M3DSPEZ3.js → chunk-M3ZNQTS5.js} +5 -5
- package/dist/{chunk-AYJ44VTJ.js → chunk-MBY7DWGT.js} +15 -13
- package/dist/chunk-MBY7DWGT.js.map +1 -0
- package/dist/{chunk-GBKIGUNP.js → chunk-MGDCGNLC.js} +3 -3
- package/dist/{chunk-BGYLL467.js → chunk-N3W6FZOC.js} +4 -4
- package/dist/{chunk-BWFUZ4N2.js → chunk-NA3M7KDE.js} +4 -4
- package/dist/{chunk-MTGEJRE4.js → chunk-NNKIM73H.js} +17 -4
- package/dist/chunk-NNKIM73H.js.map +1 -0
- package/dist/{chunk-OHXAJUO5.js → chunk-NPPO7G2B.js} +5 -3
- package/dist/{chunk-OHXAJUO5.js.map → chunk-NPPO7G2B.js.map} +1 -1
- package/dist/{chunk-FIOBPQL2.js → chunk-NUUX4BBR.js} +10 -3
- package/dist/chunk-NUUX4BBR.js.map +1 -0
- package/dist/{chunk-7JOLSD2W.js → chunk-P3QFJJJY.js} +3 -3
- package/dist/{chunk-RCTHCXS6.js → chunk-PJNIJIE6.js} +2 -2
- package/dist/{chunk-DXFKPY2K.js → chunk-PU3FQG7T.js} +4 -4
- package/dist/{chunk-6ATXOJVQ.js → chunk-QADTI63U.js} +4 -4
- package/dist/{chunk-FRGNTTPA.js → chunk-QDRHIK2R.js} +15 -10
- package/dist/chunk-QDRHIK2R.js.map +1 -0
- package/dist/{chunk-SUZXPDUQ.js → chunk-QJLOWBFW.js} +12 -6
- package/dist/chunk-QJLOWBFW.js.map +1 -0
- package/dist/chunk-QNAB53N3.js +1 -0
- package/dist/chunk-QNAB53N3.js.map +1 -0
- package/dist/{chunk-7ZROYGUG.js → chunk-QOTMQLMW.js} +2 -2
- package/dist/{chunk-NQCTANF3.js → chunk-QVDEGBME.js} +7 -7
- package/dist/{chunk-HEBZ7Q7O.js → chunk-QVYBRD6U.js} +7 -6
- package/dist/chunk-QVYBRD6U.js.map +1 -0
- package/dist/{chunk-VNVV6Y2X.js → chunk-RECD3XOL.js} +4 -2
- package/dist/chunk-RECD3XOL.js.map +1 -0
- package/dist/{chunk-JJVIZR6C.js → chunk-RIPG3QIN.js} +24 -13
- package/dist/chunk-RIPG3QIN.js.map +1 -0
- package/dist/{chunk-T743IIER.js → chunk-RNQA7MDM.js} +8 -4
- package/dist/chunk-RNQA7MDM.js.map +1 -0
- package/dist/{chunk-YNDTLBOH.js → chunk-RQMYEPRR.js} +2 -2
- package/dist/{chunk-3JDP5OUR.js → chunk-RQY5ONSF.js} +6 -2
- package/dist/chunk-RQY5ONSF.js.map +1 -0
- package/dist/{chunk-Y7YJYUNV.js → chunk-RRSLH2FV.js} +10 -3
- package/dist/chunk-RRSLH2FV.js.map +1 -0
- package/dist/{chunk-3Z3WIQ5M.js → chunk-RZ3QMKM7.js} +5 -5
- package/dist/{chunk-WA6F4NOO.js → chunk-SMANO5OD.js} +4 -4
- package/dist/{chunk-5M2NWXN4.js → chunk-SRNBD6EV.js} +2 -2
- package/dist/{chunk-7SYYGXC7.js → chunk-SSCEX5NY.js} +6 -2
- package/dist/chunk-SSCEX5NY.js.map +1 -0
- package/dist/{chunk-PU3HEWSG.js → chunk-SYSR2K2M.js} +13 -4
- package/dist/chunk-SYSR2K2M.js.map +1 -0
- package/dist/{chunk-NDGA7ZE6.js → chunk-TGMMUKOF.js} +3 -3
- package/dist/{chunk-SB2SEGR6.js → chunk-TIM4PXWN.js} +3 -3
- package/dist/{chunk-555TUQ7E.js → chunk-TPGFR24B.js} +5 -5
- package/dist/{chunk-MHLYX6QW.js → chunk-TRAMTVIO.js} +5 -5
- package/dist/{chunk-QO7UJXXO.js → chunk-TVMSXL3R.js} +2 -2
- package/dist/{chunk-OE3SQOZV.js → chunk-U6XXAVBO.js} +13 -7
- package/dist/chunk-U6XXAVBO.js.map +1 -0
- package/dist/{chunk-CZV6NVCA.js → chunk-UG4EMHMW.js} +10 -7
- package/dist/chunk-UG4EMHMW.js.map +1 -0
- package/dist/{chunk-VEBNL5MG.js → chunk-UGYBN6OO.js} +2 -2
- package/dist/{chunk-HHPJXK4Z.js → chunk-UHQZ5XPW.js} +2 -2
- package/dist/{chunk-2QO3BKUQ.js → chunk-UJT6AQHL.js} +4 -4
- package/dist/{chunk-FTDGFWB5.js → chunk-UK3DSFMK.js} +5 -5
- package/dist/{chunk-NYWAAXDX.js → chunk-URAXAKUI.js} +3 -3
- package/dist/{chunk-XODBYGTH.js → chunk-V37QIB7B.js} +2 -2
- package/dist/{chunk-7K23NEZO.js → chunk-V45JGJ3W.js} +8 -8
- package/dist/{chunk-RA6W37NZ.js → chunk-V64USPG3.js} +11 -8
- package/dist/chunk-V64USPG3.js.map +1 -0
- package/dist/{chunk-HZK4DRGF.js → chunk-V7INHV5V.js} +6 -4
- package/dist/chunk-V7INHV5V.js.map +1 -0
- package/dist/{chunk-RZCXYKY4.js → chunk-VFVATUC6.js} +6 -2
- package/dist/chunk-VFVATUC6.js.map +1 -0
- package/dist/{chunk-2MYSXWZQ.js → chunk-VKTF3GAP.js} +9 -9
- package/dist/{chunk-ICRVLGWD.js → chunk-VMU52I5D.js} +8 -2
- package/dist/chunk-VMU52I5D.js.map +1 -0
- package/dist/{chunk-MNZ6MCOK.js → chunk-VQ6UB4MN.js} +8 -8
- package/dist/{chunk-LTTYUSJ2.js → chunk-VTDZUO2J.js} +4 -2
- package/dist/chunk-VTDZUO2J.js.map +1 -0
- package/dist/{chunk-4HUSG5MR.js → chunk-VZVAP2ZR.js} +2 -2
- package/dist/{chunk-4XBAEKQQ.js → chunk-W2RXXF7K.js} +4 -4
- package/dist/chunk-W5PRZHLU.js +74 -0
- package/dist/chunk-W5PRZHLU.js.map +1 -0
- package/dist/{chunk-A2YLFKQU.js → chunk-W5WYTVLS.js} +2 -2
- package/dist/{chunk-EUACQR6N.js → chunk-WE43PZ4P.js} +7 -5
- package/dist/chunk-WE43PZ4P.js.map +1 -0
- package/dist/{chunk-RHKQ2RSY.js → chunk-WUW6NDXC.js} +15 -15
- package/dist/{chunk-EBCEDBHX.js → chunk-XDDKRACZ.js} +3 -3
- package/dist/{chunk-SLSED46V.js → chunk-Y3DV7LGC.js} +2 -1
- package/dist/{chunk-SLSED46V.js.map → chunk-Y3DV7LGC.js.map} +1 -1
- package/dist/{chunk-ASZGMKB4.js → chunk-Y3TD7HOY.js} +2 -2
- package/dist/{chunk-HBHBRRSW.js → chunk-YBAK2WN5.js} +7 -7
- package/dist/{chunk-LOLYI6PS.js → chunk-YCZGYYUX.js} +11 -8
- package/dist/chunk-YCZGYYUX.js.map +1 -0
- package/dist/{chunk-KT3TF2LT.js → chunk-YJ6UQDA6.js} +7 -5
- package/dist/chunk-YJ6UQDA6.js.map +1 -0
- package/dist/{chunk-6RTE4UNO.js → chunk-YV4O7KDR.js} +1 -1
- package/dist/{chunk-Z5V5E3JW.js → chunk-ZIHSCBMN.js} +10 -10
- package/dist/data-display/Alert.js +3 -3
- package/dist/data-display/AlertDialog.js +2 -1
- package/dist/data-display/AsyncStateContainer.js +3 -3
- package/dist/data-display/Avatar.js +4 -4
- package/dist/data-display/CardKit.js +18 -17
- package/dist/data-display/Carousel.js +7 -4
- package/dist/data-display/Chart.js +11 -11
- package/dist/data-display/DataGrid.js +2 -2
- package/dist/data-display/DataViews.js +86 -85
- package/dist/data-display/EmptyState.js +2 -2
- package/dist/data-display/FleetMap.js +15 -12
- package/dist/data-display/HoverCard.js +2 -2
- package/dist/data-display/InteractiveTooltip.js +2 -2
- package/dist/data-display/LazyImage.js +3 -2
- package/dist/data-display/Lightbox.js +6 -6
- package/dist/data-display/MapPreview.js +9 -6
- package/dist/data-display/Progress.js +2 -2
- package/dist/data-display/SectionOnboarding.js +6 -4
- package/dist/data-display/Sheet.js +4 -4
- package/dist/data-display/Stepper.js +3 -1
- package/dist/data-display/Table.js +6 -4
- package/dist/data-display/Timeline.js +4 -2
- package/dist/en-US.js +16 -12
- package/dist/feedback/ConfirmAction.js +9 -8
- package/dist/feedback/Dialog.js +3 -2
- package/dist/feedback/NotificationStatusNotice.js +4 -4
- package/dist/feedback/SequenceResolver.js +12 -11
- package/dist/feedback/Sonner.js +3 -2
- package/dist/feedback/StackedModal.js +7 -6
- package/dist/feedback/Toast.js +2 -1
- package/dist/feedback/TutorialOverlay.js +3 -2
- package/dist/form/AddressAutocomplete.js +12 -10
- package/dist/form/Autocomplete.js +2 -2
- package/dist/form/Calendar.js +6 -6
- package/dist/form/CategorySelect.js +9 -9
- package/dist/form/Checkbox.js +2 -2
- package/dist/form/CodeEditor.js +3 -3
- package/dist/form/DateRangePicker.js +9 -9
- package/dist/form/InputOTP.js +2 -2
- package/dist/form/Menubar.js +2 -2
- package/dist/form/PhoneInput.js +3 -3
- package/dist/form/PickerSheet.js +4 -4
- package/dist/form/RichTextEditor.js +7 -5
- package/dist/form/Switch.js +4 -4
- package/dist/form/Textarea.js +1 -1
- package/dist/form/UploadButton.js +3 -2
- package/dist/form/total-form.js +18 -17
- package/dist/layout/Card.js +2 -2
- package/dist/layout/ContentToolbar.js +11 -10
- package/dist/layout/Dashboard.js +2 -1
- package/dist/layout/ScrollArea.js +3 -3
- package/dist/layout/SettingCard.js +17 -17
- package/dist/layout/SettingsLayout.js +6 -6
- package/dist/locales.js +36 -28
- package/dist/locales.js.map +1 -1
- package/dist/native/chunks/{chunk-BXNZHDXK.js → chunk-4SP3BDPZ.js} +12 -5
- package/dist/native/chunks/chunk-4SP3BDPZ.js.map +1 -0
- package/dist/native/chunks/{chunk-AVHGS66L.js → chunk-FGAX5BRS.js} +2 -2
- package/dist/native/chunks/chunk-SPK34J7Y.js +74 -0
- package/dist/native/chunks/chunk-SPK34J7Y.js.map +1 -0
- package/dist/native/data-display/Badge.js +9 -3
- package/dist/native/data-display/Badge.js.map +1 -1
- package/dist/native/data-display/Chip.js +9 -1
- package/dist/native/data-display/Chip.js.map +1 -1
- package/dist/native/data-display/EmptyState.js +3 -2
- package/dist/native/data-display/ErrorState.js +2 -1
- package/dist/native/data-display/ErrorState.js.map +1 -1
- package/dist/native/data-display/FleetMap.js +3 -2
- package/dist/native/data-display/FleetMap.js.map +1 -1
- package/dist/native/feedback/Dialog.js +20 -3
- package/dist/native/feedback/Dialog.js.map +1 -1
- package/dist/native/form/Button.js +2 -1
- package/dist/native/form/Checkbox.js +6 -1
- package/dist/native/form/Checkbox.js.map +1 -1
- package/dist/native/form/Input.js +11 -3
- package/dist/native/form/Input.js.map +1 -1
- package/dist/native/form/Switch.js +5 -1
- package/dist/native/form/Switch.js.map +1 -1
- package/dist/navigation/AppHeader.js +10 -9
- package/dist/navigation/CommandPalette.js +6 -4
- package/dist/navigation/NavigationMenu.js +7 -6
- package/dist/navigation/Pagination.js +2 -2
- package/dist/navigation/SectionNav.js +5 -5
- package/dist/pt-BR.js +10 -6
- package/dist/social-login-button.js +4 -4
- package/dist/types/components/data-display/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/types/components/data-display/AlertDialog/AlertDialog.types.d.ts +5 -0
- package/dist/types/components/data-display/AlertDialog/AlertDialog.types.d.ts.map +1 -1
- package/dist/types/components/data-display/Carousel/Carousel.chrome.d.ts.map +1 -1
- package/dist/types/components/data-display/Carousel/Carousel.parts.d.ts.map +1 -1
- package/dist/types/components/data-display/Carousel/Carousel.types.d.ts +2 -0
- package/dist/types/components/data-display/Carousel/Carousel.types.d.ts.map +1 -1
- package/dist/types/components/data-display/LazyImage/LazyImage.d.ts.map +1 -1
- package/dist/types/components/data-display/LazyImage/LazyImage.types.d.ts +10 -0
- package/dist/types/components/data-display/LazyImage/LazyImage.types.d.ts.map +1 -1
- package/dist/types/components/data-display/MapPreview/MapControlBar.d.ts.map +1 -1
- package/dist/types/components/data-display/MapPreview/MapLayers.d.ts +1 -1
- package/dist/types/components/data-display/MapPreview/MapLayers.d.ts.map +1 -1
- package/dist/types/components/data-display/MapPreview/MapMarkers.d.ts +2 -0
- package/dist/types/components/data-display/MapPreview/MapMarkers.d.ts.map +1 -1
- package/dist/types/components/data-display/MapPreview/MapPreview.d.ts.map +1 -1
- package/dist/types/components/data-display/MapPreview/MapPreview.helpers.d.ts +7 -1
- package/dist/types/components/data-display/MapPreview/MapPreview.helpers.d.ts.map +1 -1
- package/dist/types/components/data-display/Stepper/Stepper.d.ts.map +1 -1
- package/dist/types/components/data-display/Stepper/Stepper.types.d.ts +4 -0
- package/dist/types/components/data-display/Stepper/Stepper.types.d.ts.map +1 -1
- package/dist/types/components/data-display/Table/Table.d.ts.map +1 -1
- package/dist/types/components/data-display/Table/Table.helpers.d.ts.map +1 -1
- package/dist/types/components/data-display/Table/Table.types.d.ts +11 -0
- package/dist/types/components/data-display/Table/Table.types.d.ts.map +1 -1
- package/dist/types/components/data-display/Table/TableParts.d.ts +2 -1
- package/dist/types/components/data-display/Table/TableParts.d.ts.map +1 -1
- package/dist/types/components/data-display/Table/TableParts.hooks.d.ts +2 -2
- package/dist/types/components/data-display/Table/TableParts.hooks.d.ts.map +1 -1
- package/dist/types/components/data-display/Timeline/Timeline.d.ts.map +1 -1
- package/dist/types/components/data-display/Timeline/Timeline.types.d.ts +3 -0
- package/dist/types/components/data-display/Timeline/Timeline.types.d.ts.map +1 -1
- package/dist/types/components/data-display/Timeline/TimelineRow.d.ts +2 -0
- package/dist/types/components/data-display/Timeline/TimelineRow.d.ts.map +1 -1
- package/dist/types/components/feedback/Dialog/Dialog.base.d.ts +10 -0
- package/dist/types/components/feedback/Dialog/Dialog.base.d.ts.map +1 -1
- package/dist/types/components/feedback/Dialog/Dialog.d.ts.map +1 -1
- package/dist/types/components/feedback/Sonner/Sonner.d.ts +6 -0
- package/dist/types/components/feedback/Sonner/Sonner.d.ts.map +1 -1
- package/dist/types/components/feedback/Sonner/SonnerToast.d.ts.map +1 -1
- package/dist/types/components/feedback/StackedModal/StackedModal.d.ts.map +1 -1
- package/dist/types/components/feedback/StackedModal/StackedModal.parts.d.ts +2 -0
- package/dist/types/components/feedback/StackedModal/StackedModal.parts.d.ts.map +1 -1
- package/dist/types/components/feedback/StackedModal/StackedModal.types.d.ts +5 -0
- package/dist/types/components/feedback/StackedModal/StackedModal.types.d.ts.map +1 -1
- package/dist/types/components/feedback/Toast/Toast.d.ts.map +1 -1
- package/dist/types/components/feedback/Toast/Toast.types.d.ts +5 -0
- package/dist/types/components/feedback/Toast/Toast.types.d.ts.map +1 -1
- package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.d.ts.map +1 -1
- package/dist/types/components/feedback/TutorialOverlay/TutorialStepBody.d.ts.map +1 -1
- package/dist/types/components/form/AddressAutocomplete/AddressAutocomplete.d.ts.map +1 -1
- package/dist/types/components/form/AddressAutocomplete/AddressAutocomplete.helpers.d.ts +1 -1
- package/dist/types/components/form/AddressAutocomplete/AddressAutocomplete.helpers.d.ts.map +1 -1
- package/dist/types/components/form/AddressAutocomplete/AddressAutocomplete.hooks.d.ts +3 -1
- package/dist/types/components/form/AddressAutocomplete/AddressAutocomplete.hooks.d.ts.map +1 -1
- package/dist/types/components/form/AddressAutocomplete/AddressAutocompleteField.d.ts.map +1 -1
- package/dist/types/components/form/AddressAutocomplete/useAddressPredictions.d.ts +2 -1
- package/dist/types/components/form/AddressAutocomplete/useAddressPredictions.d.ts.map +1 -1
- package/dist/types/components/form/AddressAutocomplete/useAddressSelection.d.ts +3 -1
- package/dist/types/components/form/AddressAutocomplete/useAddressSelection.d.ts.map +1 -1
- package/dist/types/components/form/AddressAutocomplete/useCurrentLocation.d.ts +3 -1
- package/dist/types/components/form/AddressAutocomplete/useCurrentLocation.d.ts.map +1 -1
- package/dist/types/components/form/AddressAutocomplete/useGoogleMapsAPI.d.ts +4 -1
- package/dist/types/components/form/AddressAutocomplete/useGoogleMapsAPI.d.ts.map +1 -1
- package/dist/types/components/form/Button/Button.native.loading.d.ts +2 -1
- package/dist/types/components/form/Button/Button.native.loading.d.ts.map +1 -1
- package/dist/types/components/form/PhoneInput/PhoneInput.d.ts.map +1 -1
- package/dist/types/components/form/PhoneInput/PhoneInput.types.d.ts +1 -0
- package/dist/types/components/form/PhoneInput/PhoneInput.types.d.ts.map +1 -1
- package/dist/types/components/form/PhoneInput/countries.d.ts +6 -0
- package/dist/types/components/form/PhoneInput/countries.d.ts.map +1 -1
- package/dist/types/components/form/RichTextEditor/RichTextEditor.d.ts.map +1 -1
- package/dist/types/components/form/RichTextEditor/RichTextEditor.dom.d.ts +1 -1
- package/dist/types/components/form/RichTextEditor/RichTextEditor.dom.d.ts.map +1 -1
- package/dist/types/components/form/RichTextEditor/RichTextEditor.format.d.ts +2 -1
- package/dist/types/components/form/RichTextEditor/RichTextEditor.format.d.ts.map +1 -1
- package/dist/types/components/form/RichTextEditor/RichTextEditor.hooks.d.ts +2 -1
- package/dist/types/components/form/RichTextEditor/RichTextEditor.hooks.d.ts.map +1 -1
- package/dist/types/components/form/RichTextEditor/RichTextEditor.types.d.ts +7 -1
- package/dist/types/components/form/RichTextEditor/RichTextEditor.types.d.ts.map +1 -1
- package/dist/types/components/form/RichTextEditor/RichTextEditorToolbar.d.ts +2 -0
- package/dist/types/components/form/RichTextEditor/RichTextEditorToolbar.d.ts.map +1 -1
- package/dist/types/components/form/Textarea/TextareaRichEditor.d.ts.map +1 -1
- package/dist/types/components/form/UploadButton/UploadButton.hooks.d.ts.map +1 -1
- package/dist/types/components/layout/ContentToolbar/ContentToolbar.types.d.ts +14 -0
- package/dist/types/components/layout/ContentToolbar/ContentToolbar.types.d.ts.map +1 -1
- package/dist/types/components/layout/ContentToolbar/FilterTrigger.d.ts +1 -1
- package/dist/types/components/layout/ContentToolbar/FilterTrigger.d.ts.map +1 -1
- package/dist/types/components/layout/ContentToolbar/ViewSelector.d.ts +1 -1
- package/dist/types/components/layout/ContentToolbar/ViewSelector.d.ts.map +1 -1
- package/dist/types/components/layout/Dashboard/Dashboard.d.ts +1 -1
- package/dist/types/components/layout/Dashboard/Dashboard.d.ts.map +1 -1
- package/dist/types/components/layout/Dashboard/Dashboard.types.d.ts +5 -0
- package/dist/types/components/layout/Dashboard/Dashboard.types.d.ts.map +1 -1
- package/dist/types/components/navigation/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/types/components/navigation/CommandPalette/CommandPalette.helpers.d.ts +1 -1
- package/dist/types/components/navigation/CommandPalette/CommandPalette.helpers.d.ts.map +1 -1
- package/dist/types/components/navigation/CommandPalette/CommandPalette.hooks.d.ts +2 -1
- package/dist/types/components/navigation/CommandPalette/CommandPalette.hooks.d.ts.map +1 -1
- package/dist/types/components/navigation/CommandPalette/CommandPaletteResults.d.ts.map +1 -1
- package/dist/types/components/navigation/NavigationMenu/NavigationMenu.d.ts.map +1 -1
- package/dist/types/components/navigation/NavigationMenu/NavigationMenu.shell.d.ts +1 -0
- package/dist/types/components/navigation/NavigationMenu/NavigationMenu.shell.d.ts.map +1 -1
- package/dist/types/components/navigation/NavigationMenu/NavigationMenu.types.d.ts +11 -0
- package/dist/types/components/navigation/NavigationMenu/NavigationMenu.types.d.ts.map +1 -1
- package/dist/types/components/navigation/NavigationMenu/NavigationMenuItem.d.ts.map +1 -1
- package/dist/types/components/navigation/NavigationMenu/NavigationStandardBody.d.ts +4 -0
- package/dist/types/components/navigation/NavigationMenu/NavigationStandardBody.d.ts.map +1 -1
- package/dist/types/components/typography/Code/Code.d.ts.map +1 -1
- package/dist/types/components/typography/Code/Code.types.d.ts +4 -0
- package/dist/types/components/typography/Code/Code.types.d.ts.map +1 -1
- package/dist/types/components/utility/WorkflowStep/WorkflowStep.d.ts.map +1 -1
- package/dist/types/components/utility/WorkflowStep/WorkflowStep.helpers.d.ts +4 -1
- package/dist/types/components/utility/WorkflowStep/WorkflowStep.helpers.d.ts.map +1 -1
- package/dist/types/components/utility/WorkflowStep/WorkflowStep.parts.d.ts.map +1 -1
- package/dist/types/components/utility/WorkflowStep/WorkflowStep.types.d.ts +9 -0
- package/dist/types/components/utility/WorkflowStep/WorkflowStep.types.d.ts.map +1 -1
- package/dist/types/components/utility/WorkflowStep/WorkflowStepRow.d.ts +1 -0
- package/dist/types/components/utility/WorkflowStep/WorkflowStepRow.d.ts.map +1 -1
- package/dist/types/copy/data-display.d.ts +24 -0
- package/dist/types/copy/data-display.d.ts.map +1 -1
- package/dist/types/copy/feedback.d.ts +4 -0
- package/dist/types/copy/feedback.d.ts.map +1 -1
- package/dist/types/copy/form.d.ts +58 -0
- package/dist/types/copy/form.d.ts.map +1 -1
- package/dist/types/copy/labels.d.ts +108 -0
- package/dist/types/copy/labels.d.ts.map +1 -0
- package/dist/types/copy/navigation.d.ts +12 -0
- package/dist/types/copy/navigation.d.ts.map +1 -1
- package/dist/types/copy/utility.d.ts +8 -1
- package/dist/types/copy/utility.d.ts.map +1 -1
- package/dist/types/copy.d.ts +1 -0
- package/dist/types/copy.d.ts.map +1 -1
- package/dist/types/en-US.d.ts +1 -0
- package/dist/types/en-US.d.ts.map +1 -1
- package/dist/types/en-US.data-display.d.ts +2 -2
- package/dist/types/en-US.data-display.d.ts.map +1 -1
- package/dist/types/en-US.feedback.d.ts +1 -1
- package/dist/types/en-US.feedback.d.ts.map +1 -1
- package/dist/types/en-US.form.d.ts +4 -4
- package/dist/types/en-US.form.d.ts.map +1 -1
- package/dist/types/en-US.labels.d.ts +9 -0
- package/dist/types/en-US.labels.d.ts.map +1 -0
- package/dist/types/en-US.navigation.d.ts +1 -1
- package/dist/types/en-US.navigation.d.ts.map +1 -1
- package/dist/types/en-US.utility.d.ts +1 -1
- package/dist/types/en-US.utility.d.ts.map +1 -1
- package/dist/types/locales.d.ts +2 -1
- package/dist/types/locales.d.ts.map +1 -1
- package/dist/types/pt-BR.d.ts +1 -0
- package/dist/types/pt-BR.d.ts.map +1 -1
- package/dist/types/pt-BR.data-display.d.ts +2 -2
- package/dist/types/pt-BR.data-display.d.ts.map +1 -1
- package/dist/types/pt-BR.feedback.d.ts +1 -1
- package/dist/types/pt-BR.feedback.d.ts.map +1 -1
- package/dist/types/pt-BR.form.d.ts +4 -4
- package/dist/types/pt-BR.form.d.ts.map +1 -1
- package/dist/types/pt-BR.labels.d.ts +8 -0
- package/dist/types/pt-BR.labels.d.ts.map +1 -0
- package/dist/types/pt-BR.navigation.d.ts +1 -1
- package/dist/types/pt-BR.navigation.d.ts.map +1 -1
- package/dist/types/pt-BR.utility.d.ts +1 -1
- package/dist/types/pt-BR.utility.d.ts.map +1 -1
- package/dist/types/user-avatar/user-avatar.d.ts +6 -1
- package/dist/types/user-avatar/user-avatar.d.ts.map +1 -1
- package/dist/types/utils/resolve-labels.d.ts +9 -0
- package/dist/types/utils/resolve-labels.d.ts.map +1 -0
- package/dist/types-native/components/data-display/Badge/Badge.native.d.ts +1 -0
- package/dist/types-native/components/data-display/Badge/Badge.native.d.ts.map +1 -1
- package/dist/types-native/components/data-display/Badge/Badge.types.native.d.ts +2 -0
- package/dist/types-native/components/data-display/Badge/Badge.types.native.d.ts.map +1 -1
- package/dist/types-native/components/data-display/Badge/BadgeContent.native.d.ts +2 -1
- package/dist/types-native/components/data-display/Badge/BadgeContent.native.d.ts.map +1 -1
- package/dist/types-native/components/data-display/Chip/Chip.native.d.ts +1 -0
- package/dist/types-native/components/data-display/Chip/Chip.native.d.ts.map +1 -1
- package/dist/types-native/components/data-display/Chip/Chip.types.native.d.ts +2 -0
- package/dist/types-native/components/data-display/Chip/Chip.types.native.d.ts.map +1 -1
- package/dist/types-native/components/feedback/Dialog/Dialog.base.d.ts +10 -0
- package/dist/types-native/components/feedback/Dialog/Dialog.base.d.ts.map +1 -1
- package/dist/types-native/components/feedback/Dialog/Dialog.native.d.ts.map +1 -1
- package/dist/types-native/components/feedback/Dialog/DialogParts.native.d.ts +1 -1
- package/dist/types-native/components/feedback/Dialog/DialogParts.native.d.ts.map +1 -1
- package/dist/types-native/components/form/Button/Button.native.d.ts +1 -0
- package/dist/types-native/components/form/Button/Button.native.d.ts.map +1 -1
- package/dist/types-native/components/form/Button/Button.native.loading.d.ts +2 -1
- package/dist/types-native/components/form/Button/Button.native.loading.d.ts.map +1 -1
- package/dist/types-native/components/form/Button/Button.types.native.d.ts +2 -0
- package/dist/types-native/components/form/Button/Button.types.native.d.ts.map +1 -1
- package/dist/types-native/components/form/Checkbox/Checkbox.native.d.ts +1 -0
- package/dist/types-native/components/form/Checkbox/Checkbox.native.d.ts.map +1 -1
- package/dist/types-native/components/form/Checkbox/Checkbox.types.native.d.ts +2 -0
- package/dist/types-native/components/form/Checkbox/Checkbox.types.native.d.ts.map +1 -1
- package/dist/types-native/components/form/Input/Input.native.d.ts +1 -0
- package/dist/types-native/components/form/Input/Input.native.d.ts.map +1 -1
- package/dist/types-native/components/form/Input/Input.types.native.d.ts +2 -0
- package/dist/types-native/components/form/Input/Input.types.native.d.ts.map +1 -1
- package/dist/types-native/components/form/Switch/Switch.native.d.ts +1 -0
- package/dist/types-native/components/form/Switch/Switch.native.d.ts.map +1 -1
- package/dist/types-native/components/form/Switch/Switch.types.native.d.ts +2 -0
- package/dist/types-native/components/form/Switch/Switch.types.native.d.ts.map +1 -1
- package/dist/types-native/copy/data-display.d.ts +119 -0
- package/dist/types-native/copy/data-display.d.ts.map +1 -0
- package/dist/types-native/copy/labels.d.ts +108 -0
- package/dist/types-native/copy/labels.d.ts.map +1 -0
- package/dist/types-native/en-US.labels.d.ts +9 -0
- package/dist/types-native/en-US.labels.d.ts.map +1 -0
- package/dist/typography/Code.js +2 -1
- package/dist/user-avatar.js +8 -7
- package/dist/utility/InstallPrompt.js +2 -2
- package/dist/utility/WorkflowStep.js +6 -4
- package/package.json +2 -2
- package/src/components/data-display/AlertDialog/AlertDialog.tsx +3 -1
- package/src/components/data-display/AlertDialog/AlertDialog.types.ts +6 -0
- package/src/components/data-display/Badge/Badge.native.tsx +2 -0
- package/src/components/data-display/Badge/Badge.types.native.ts +2 -0
- package/src/components/data-display/Badge/BadgeContent.native.tsx +4 -1
- package/src/components/data-display/Carousel/Carousel.chrome.tsx +1 -0
- package/src/components/data-display/Carousel/Carousel.parts.tsx +13 -9
- package/src/components/data-display/Carousel/Carousel.types.ts +2 -0
- package/src/components/data-display/Chip/Chip.native.tsx +9 -1
- package/src/components/data-display/Chip/Chip.types.native.ts +2 -0
- package/src/components/data-display/LazyImage/LazyImage.hooks.ts +1 -1
- package/src/components/data-display/LazyImage/LazyImage.tsx +4 -4
- package/src/components/data-display/LazyImage/LazyImage.types.ts +12 -0
- package/src/components/data-display/MapPreview/MapControlBar.tsx +7 -3
- package/src/components/data-display/MapPreview/MapLayers.tsx +2 -2
- package/src/components/data-display/MapPreview/MapMarkers.tsx +13 -4
- package/src/components/data-display/MapPreview/MapPreview.helpers.ts +13 -2
- package/src/components/data-display/MapPreview/MapPreview.tsx +7 -3
- package/src/components/data-display/Stepper/Stepper.tsx +41 -7
- package/src/components/data-display/Stepper/Stepper.types.ts +4 -0
- package/src/components/data-display/Table/Table.helpers.ts +1 -0
- package/src/components/data-display/Table/Table.tsx +4 -5
- package/src/components/data-display/Table/Table.types.ts +12 -0
- package/src/components/data-display/Table/TableParts.hooks.tsx +8 -1
- package/src/components/data-display/Table/TableParts.tsx +19 -5
- package/src/components/data-display/Timeline/Timeline.tsx +6 -1
- package/src/components/data-display/Timeline/Timeline.types.ts +3 -0
- package/src/components/data-display/Timeline/TimelineRow.tsx +11 -4
- package/src/components/feedback/Dialog/Dialog.base.ts +10 -0
- package/src/components/feedback/Dialog/Dialog.native.tsx +2 -0
- package/src/components/feedback/Dialog/Dialog.tsx +5 -1
- package/src/components/feedback/Dialog/DialogParts.native.tsx +17 -3
- package/src/components/feedback/Sonner/Sonner.tsx +16 -6
- package/src/components/feedback/Sonner/SonnerToast.tsx +4 -2
- package/src/components/feedback/StackedModal/StackedModal.parts.tsx +24 -3
- package/src/components/feedback/StackedModal/StackedModal.tsx +2 -1
- package/src/components/feedback/StackedModal/StackedModal.types.ts +5 -0
- package/src/components/feedback/Toast/Toast.tsx +5 -2
- package/src/components/feedback/Toast/Toast.types.ts +5 -0
- package/src/components/feedback/TutorialOverlay/TutorialOverlay.tsx +3 -1
- package/src/components/feedback/TutorialOverlay/TutorialStepBody.tsx +12 -3
- package/src/components/form/AddressAutocomplete/AddressAutocomplete.helpers.ts +12 -6
- package/src/components/form/AddressAutocomplete/AddressAutocomplete.hooks.ts +15 -2
- package/src/components/form/AddressAutocomplete/AddressAutocomplete.tsx +1 -0
- package/src/components/form/AddressAutocomplete/AddressAutocompleteField.tsx +9 -3
- package/src/components/form/AddressAutocomplete/useAddressPredictions.ts +6 -3
- package/src/components/form/AddressAutocomplete/useAddressSelection.ts +8 -4
- package/src/components/form/AddressAutocomplete/useCurrentLocation.ts +12 -8
- package/src/components/form/AddressAutocomplete/useGoogleMapsAPI.ts +8 -4
- package/src/components/form/Button/Button.native.loading.tsx +11 -2
- package/src/components/form/Button/Button.native.tsx +2 -2
- package/src/components/form/Button/Button.types.native.ts +2 -0
- package/src/components/form/Checkbox/Checkbox.native.tsx +5 -2
- package/src/components/form/Checkbox/Checkbox.types.native.ts +2 -0
- package/src/components/form/Input/Input.native.tsx +13 -4
- package/src/components/form/Input/Input.types.native.ts +2 -0
- package/src/components/form/PhoneInput/PhoneInput.md +2 -2
- package/src/components/form/PhoneInput/PhoneInput.tsx +21 -10
- package/src/components/form/PhoneInput/PhoneInput.types.ts +1 -0
- package/src/components/form/PhoneInput/countries.ts +18 -1
- package/src/components/form/RichTextEditor/RichTextEditor.dom.ts +5 -3
- package/src/components/form/RichTextEditor/RichTextEditor.format.ts +3 -1
- package/src/components/form/RichTextEditor/RichTextEditor.hooks.ts +4 -1
- package/src/components/form/RichTextEditor/RichTextEditor.tsx +10 -4
- package/src/components/form/RichTextEditor/RichTextEditor.types.ts +7 -1
- package/src/components/form/RichTextEditor/RichTextEditorToolbar.tsx +29 -19
- package/src/components/form/Switch/Switch.native.tsx +4 -3
- package/src/components/form/Switch/Switch.types.native.ts +2 -0
- package/src/components/form/Textarea/TextareaRichEditor.tsx +2 -1
- package/src/components/form/UploadButton/UploadButton.hooks.ts +16 -6
- package/src/components/layout/ContentToolbar/ContentToolbar.types.ts +14 -0
- package/src/components/layout/ContentToolbar/FilterTrigger.tsx +10 -1
- package/src/components/layout/ContentToolbar/ViewSelector.tsx +15 -5
- package/src/components/layout/Dashboard/Dashboard.tsx +3 -1
- package/src/components/layout/Dashboard/Dashboard.types.ts +5 -0
- package/src/components/navigation/CommandPalette/CommandPalette.helpers.ts +6 -2
- package/src/components/navigation/CommandPalette/CommandPalette.hooks.ts +9 -1
- package/src/components/navigation/CommandPalette/CommandPalette.tsx +16 -6
- package/src/components/navigation/CommandPalette/CommandPaletteResults.tsx +3 -1
- package/src/components/navigation/NavigationMenu/NavigationMenu.shell.tsx +7 -4
- package/src/components/navigation/NavigationMenu/NavigationMenu.tsx +4 -0
- package/src/components/navigation/NavigationMenu/NavigationMenu.types.ts +13 -0
- package/src/components/navigation/NavigationMenu/NavigationMenuItem.tsx +2 -0
- package/src/components/navigation/NavigationMenu/NavigationStandardBody.tsx +24 -4
- package/src/components/typography/Code/Code.tsx +28 -6
- package/src/components/typography/Code/Code.types.ts +4 -0
- package/src/components/utility/WorkflowStep/WorkflowStep.helpers.ts +9 -1
- package/src/components/utility/WorkflowStep/WorkflowStep.parts.tsx +3 -2
- package/src/components/utility/WorkflowStep/WorkflowStep.tsx +3 -1
- package/src/components/utility/WorkflowStep/WorkflowStep.types.ts +10 -0
- package/src/components/utility/WorkflowStep/WorkflowStepRow.tsx +3 -0
- package/src/copy/data-display.ts +19 -0
- package/src/copy/feedback.ts +4 -0
- package/src/copy/form.ts +58 -0
- package/src/copy/labels.ts +120 -0
- package/src/copy/navigation.ts +12 -0
- package/src/copy/utility.ts +8 -1
- package/src/copy.ts +1 -0
- package/src/en-US.data-display.ts +9 -2
- package/src/en-US.feedback.ts +3 -1
- package/src/en-US.form.ts +27 -4
- package/src/en-US.labels.ts +76 -0
- package/src/en-US.navigation.ts +5 -1
- package/src/en-US.ts +1 -0
- package/src/en-US.utility.ts +3 -1
- package/src/locales.ts +4 -0
- package/src/pt-BR.data-display.ts +9 -2
- package/src/pt-BR.feedback.ts +3 -1
- package/src/pt-BR.form.ts +40 -4
- package/src/pt-BR.labels.ts +75 -0
- package/src/pt-BR.navigation.ts +5 -1
- package/src/pt-BR.ts +1 -0
- package/src/pt-BR.utility.ts +3 -1
- package/src/user-avatar/user-avatar.tsx +11 -2
- package/src/utils/resolve-labels.ts +12 -0
- package/dist/chunk-2ARVNCVU.js.map +0 -1
- package/dist/chunk-2ILXXBMG.js.map +0 -1
- package/dist/chunk-2TSGRQ2J.js.map +0 -1
- package/dist/chunk-33LAPBYB.js.map +0 -1
- package/dist/chunk-3JDP5OUR.js.map +0 -1
- package/dist/chunk-3VXS7O3X.js.map +0 -1
- package/dist/chunk-4MQ6XTIJ.js.map +0 -1
- package/dist/chunk-4NQXHPQR.js.map +0 -1
- package/dist/chunk-4VRDFZ4G.js.map +0 -1
- package/dist/chunk-5J7SA4CZ.js.map +0 -1
- package/dist/chunk-7QXEEZFO.js +0 -92
- package/dist/chunk-7QXEEZFO.js.map +0 -1
- package/dist/chunk-7SYYGXC7.js.map +0 -1
- package/dist/chunk-7VRCGWQL.js.map +0 -1
- package/dist/chunk-AYJ44VTJ.js.map +0 -1
- package/dist/chunk-AYP6ICAY.js.map +0 -1
- package/dist/chunk-B2JYQBO4.js.map +0 -1
- package/dist/chunk-BWZKLKDT.js +0 -1
- package/dist/chunk-C5JCARNE.js.map +0 -1
- package/dist/chunk-CZV6NVCA.js.map +0 -1
- package/dist/chunk-EUACQR6N.js.map +0 -1
- package/dist/chunk-FIOBPQL2.js.map +0 -1
- package/dist/chunk-FRGNTTPA.js.map +0 -1
- package/dist/chunk-FT6HBP5E.js.map +0 -1
- package/dist/chunk-HEBZ7Q7O.js.map +0 -1
- package/dist/chunk-HZK4DRGF.js.map +0 -1
- package/dist/chunk-ICRVLGWD.js.map +0 -1
- package/dist/chunk-INGPH3YQ.js.map +0 -1
- package/dist/chunk-JJVIZR6C.js.map +0 -1
- package/dist/chunk-KIL3OVLI.js.map +0 -1
- package/dist/chunk-KT3TF2LT.js.map +0 -1
- package/dist/chunk-KZXOIRUP.js.map +0 -1
- package/dist/chunk-LH4VKUZC.js.map +0 -1
- package/dist/chunk-LOLYI6PS.js.map +0 -1
- package/dist/chunk-LTTYUSJ2.js.map +0 -1
- package/dist/chunk-MA6SUE7F.js.map +0 -1
- package/dist/chunk-MTGEJRE4.js.map +0 -1
- package/dist/chunk-OE3SQOZV.js.map +0 -1
- package/dist/chunk-PU3HEWSG.js.map +0 -1
- package/dist/chunk-PY3RW5LC.js.map +0 -1
- package/dist/chunk-QWVETTIY.js.map +0 -1
- package/dist/chunk-RA6W37NZ.js.map +0 -1
- package/dist/chunk-RZCXYKY4.js.map +0 -1
- package/dist/chunk-SUZXPDUQ.js.map +0 -1
- package/dist/chunk-SV6IQ2YO.js.map +0 -1
- package/dist/chunk-T743IIER.js.map +0 -1
- package/dist/chunk-TTCVYY2B.js.map +0 -1
- package/dist/chunk-U4G3KY6L.js.map +0 -1
- package/dist/chunk-UGH2DDST.js.map +0 -1
- package/dist/chunk-UZOG6HNN.js.map +0 -1
- package/dist/chunk-VNOFFVRQ.js +0 -113
- package/dist/chunk-VNOFFVRQ.js.map +0 -1
- package/dist/chunk-VNVV6Y2X.js.map +0 -1
- package/dist/chunk-VQYR64QB.js.map +0 -1
- package/dist/chunk-VRPCZ3IE.js.map +0 -1
- package/dist/chunk-WC3W36AM.js.map +0 -1
- package/dist/chunk-WVZBYTIK.js.map +0 -1
- package/dist/chunk-XICRCPEQ.js.map +0 -1
- package/dist/chunk-XKSA4L2X.js.map +0 -1
- package/dist/chunk-XQWUVQ2F.js.map +0 -1
- package/dist/chunk-XYFBJH6F.js.map +0 -1
- package/dist/chunk-Y7YJYUNV.js.map +0 -1
- package/dist/chunk-YICNA5LG.js +0 -1
- package/dist/chunk-YLSDFW5O.js.map +0 -1
- package/dist/chunk-ZFBFQK2Y.js.map +0 -1
- package/dist/native/chunks/chunk-BXNZHDXK.js.map +0 -1
- /package/dist/{chunk-BWZKLKDT.js.map → _internal/copy/labels.js.map} +0 -0
- /package/dist/{chunk-YICNA5LG.js.map → _internal/en-US.labels.js.map} +0 -0
- /package/dist/{chunk-OPP6USJC.js.map → chunk-2FQF4CNE.js.map} +0 -0
- /package/dist/{chunk-BWFQEASG.js.map → chunk-2P5ZBBTL.js.map} +0 -0
- /package/dist/{chunk-QVO4SIS7.js.map → chunk-3W2B7IZG.js.map} +0 -0
- /package/dist/{chunk-PMRLFNBT.js.map → chunk-3XLSA3YB.js.map} +0 -0
- /package/dist/{chunk-7P5PNRBT.js.map → chunk-3YCV4EP7.js.map} +0 -0
- /package/dist/{chunk-Q6PRGXR2.js.map → chunk-4HBCWKIX.js.map} +0 -0
- /package/dist/{chunk-HN3PZTUK.js.map → chunk-4MKVGSHX.js.map} +0 -0
- /package/dist/{chunk-EERUSI52.js.map → chunk-4N3I7ZHQ.js.map} +0 -0
- /package/dist/{chunk-O6SAU5JA.js.map → chunk-4OTJ66ID.js.map} +0 -0
- /package/dist/{chunk-LG52LMAM.js.map → chunk-556LO6KA.js.map} +0 -0
- /package/dist/{chunk-LBZEPWYK.js.map → chunk-5GLOEGOM.js.map} +0 -0
- /package/dist/{chunk-JE6RZ5L6.js.map → chunk-5ZOJLYD2.js.map} +0 -0
- /package/dist/{chunk-GSXYXMCV.js.map → chunk-66BRUS2M.js.map} +0 -0
- /package/dist/{chunk-ALREWFRX.js.map → chunk-6DGNMASB.js.map} +0 -0
- /package/dist/{chunk-5752357K.js.map → chunk-6N2U67KF.js.map} +0 -0
- /package/dist/{chunk-VD72JGHA.js.map → chunk-73OYC22L.js.map} +0 -0
- /package/dist/{chunk-6DAIC2MG.js.map → chunk-775LIZXS.js.map} +0 -0
- /package/dist/{chunk-S4JXSC4D.js.map → chunk-7HZ6TJRH.js.map} +0 -0
- /package/dist/{chunk-CSD6SWBZ.js.map → chunk-A3Z7ZXLM.js.map} +0 -0
- /package/dist/{chunk-LI6XSM5D.js.map → chunk-A6V7KE45.js.map} +0 -0
- /package/dist/{chunk-YJBWDDW7.js.map → chunk-AAWVAQI2.js.map} +0 -0
- /package/dist/{chunk-44PBCQ7E.js.map → chunk-ABQZFK7M.js.map} +0 -0
- /package/dist/{chunk-EIMFA7KP.js.map → chunk-ANUO67JQ.js.map} +0 -0
- /package/dist/{chunk-PTQRJEPN.js.map → chunk-AOBQ3KYY.js.map} +0 -0
- /package/dist/{chunk-LODYTVOO.js.map → chunk-B25SHVWP.js.map} +0 -0
- /package/dist/{chunk-GTT5UKKO.js.map → chunk-BDJIP4HG.js.map} +0 -0
- /package/dist/{chunk-RS576GOH.js.map → chunk-BIUT3K6A.js.map} +0 -0
- /package/dist/{chunk-A5NXBOWS.js.map → chunk-BLHSLB5D.js.map} +0 -0
- /package/dist/{chunk-DYHOBKPU.js.map → chunk-BLZDSCIZ.js.map} +0 -0
- /package/dist/{chunk-E53MMMDA.js.map → chunk-BX6CF2UG.js.map} +0 -0
- /package/dist/{chunk-7HA7UH7O.js.map → chunk-C4OETF7K.js.map} +0 -0
- /package/dist/{chunk-64AOS2WA.js.map → chunk-CAHN7AMY.js.map} +0 -0
- /package/dist/{chunk-MSC43MCJ.js.map → chunk-CRFOAKQL.js.map} +0 -0
- /package/dist/{chunk-IQ2U5MVO.js.map → chunk-CSQWPDQV.js.map} +0 -0
- /package/dist/{chunk-7XSCEHGA.js.map → chunk-EOQ6EKTS.js.map} +0 -0
- /package/dist/{chunk-VEKTKCSB.js.map → chunk-FLJ3RIRP.js.map} +0 -0
- /package/dist/{chunk-Z5WUSI47.js.map → chunk-G3JFESKD.js.map} +0 -0
- /package/dist/{chunk-XRDH24J7.js.map → chunk-G6ET2DRL.js.map} +0 -0
- /package/dist/{chunk-O36MIQIO.js.map → chunk-GPQ22MPR.js.map} +0 -0
- /package/dist/{chunk-GRMBCJS6.js.map → chunk-H6R2L7VI.js.map} +0 -0
- /package/dist/{chunk-AMLHEKSV.js.map → chunk-HI7JPDD6.js.map} +0 -0
- /package/dist/{chunk-CW6Y32N2.js.map → chunk-I2CT4XIP.js.map} +0 -0
- /package/dist/{chunk-N34AOGK3.js.map → chunk-I3OKAQ5L.js.map} +0 -0
- /package/dist/{chunk-AEYLFBZT.js.map → chunk-I4NDZFTB.js.map} +0 -0
- /package/dist/{chunk-2ZRZTGWP.js.map → chunk-ISW5K72V.js.map} +0 -0
- /package/dist/{chunk-KARMRTTM.js.map → chunk-J2RUDZVJ.js.map} +0 -0
- /package/dist/{chunk-4M5GEKPM.js.map → chunk-JL4I7OQE.js.map} +0 -0
- /package/dist/{chunk-NBXG3SQ3.js.map → chunk-JSY234NY.js.map} +0 -0
- /package/dist/{chunk-HQCZT6TO.js.map → chunk-JVOEVTCZ.js.map} +0 -0
- /package/dist/{chunk-MBMZNSBP.js.map → chunk-JW7MN4DG.js.map} +0 -0
- /package/dist/{chunk-ZPACE34U.js.map → chunk-K53XSVQO.js.map} +0 -0
- /package/dist/{chunk-GBVNY2LG.js.map → chunk-KTXJQ4YJ.js.map} +0 -0
- /package/dist/{chunk-FCVPVEAS.js.map → chunk-KYE7I6NT.js.map} +0 -0
- /package/dist/{chunk-MM7BPTVV.js.map → chunk-KYT5G4K7.js.map} +0 -0
- /package/dist/{chunk-3V3Z4EML.js.map → chunk-L4FWEI2P.js.map} +0 -0
- /package/dist/{chunk-56JF5PZK.js.map → chunk-LYVTJLCF.js.map} +0 -0
- /package/dist/{chunk-M3DSPEZ3.js.map → chunk-M3ZNQTS5.js.map} +0 -0
- /package/dist/{chunk-GBKIGUNP.js.map → chunk-MGDCGNLC.js.map} +0 -0
- /package/dist/{chunk-BGYLL467.js.map → chunk-N3W6FZOC.js.map} +0 -0
- /package/dist/{chunk-BWFUZ4N2.js.map → chunk-NA3M7KDE.js.map} +0 -0
- /package/dist/{chunk-7JOLSD2W.js.map → chunk-P3QFJJJY.js.map} +0 -0
- /package/dist/{chunk-RCTHCXS6.js.map → chunk-PJNIJIE6.js.map} +0 -0
- /package/dist/{chunk-DXFKPY2K.js.map → chunk-PU3FQG7T.js.map} +0 -0
- /package/dist/{chunk-6ATXOJVQ.js.map → chunk-QADTI63U.js.map} +0 -0
- /package/dist/{chunk-7ZROYGUG.js.map → chunk-QOTMQLMW.js.map} +0 -0
- /package/dist/{chunk-NQCTANF3.js.map → chunk-QVDEGBME.js.map} +0 -0
- /package/dist/{chunk-YNDTLBOH.js.map → chunk-RQMYEPRR.js.map} +0 -0
- /package/dist/{chunk-3Z3WIQ5M.js.map → chunk-RZ3QMKM7.js.map} +0 -0
- /package/dist/{chunk-WA6F4NOO.js.map → chunk-SMANO5OD.js.map} +0 -0
- /package/dist/{chunk-5M2NWXN4.js.map → chunk-SRNBD6EV.js.map} +0 -0
- /package/dist/{chunk-NDGA7ZE6.js.map → chunk-TGMMUKOF.js.map} +0 -0
- /package/dist/{chunk-SB2SEGR6.js.map → chunk-TIM4PXWN.js.map} +0 -0
- /package/dist/{chunk-555TUQ7E.js.map → chunk-TPGFR24B.js.map} +0 -0
- /package/dist/{chunk-MHLYX6QW.js.map → chunk-TRAMTVIO.js.map} +0 -0
- /package/dist/{chunk-QO7UJXXO.js.map → chunk-TVMSXL3R.js.map} +0 -0
- /package/dist/{chunk-VEBNL5MG.js.map → chunk-UGYBN6OO.js.map} +0 -0
- /package/dist/{chunk-HHPJXK4Z.js.map → chunk-UHQZ5XPW.js.map} +0 -0
- /package/dist/{chunk-2QO3BKUQ.js.map → chunk-UJT6AQHL.js.map} +0 -0
- /package/dist/{chunk-FTDGFWB5.js.map → chunk-UK3DSFMK.js.map} +0 -0
- /package/dist/{chunk-NYWAAXDX.js.map → chunk-URAXAKUI.js.map} +0 -0
- /package/dist/{chunk-XODBYGTH.js.map → chunk-V37QIB7B.js.map} +0 -0
- /package/dist/{chunk-7K23NEZO.js.map → chunk-V45JGJ3W.js.map} +0 -0
- /package/dist/{chunk-2MYSXWZQ.js.map → chunk-VKTF3GAP.js.map} +0 -0
- /package/dist/{chunk-MNZ6MCOK.js.map → chunk-VQ6UB4MN.js.map} +0 -0
- /package/dist/{chunk-4HUSG5MR.js.map → chunk-VZVAP2ZR.js.map} +0 -0
- /package/dist/{chunk-4XBAEKQQ.js.map → chunk-W2RXXF7K.js.map} +0 -0
- /package/dist/{chunk-A2YLFKQU.js.map → chunk-W5WYTVLS.js.map} +0 -0
- /package/dist/{chunk-RHKQ2RSY.js.map → chunk-WUW6NDXC.js.map} +0 -0
- /package/dist/{chunk-EBCEDBHX.js.map → chunk-XDDKRACZ.js.map} +0 -0
- /package/dist/{chunk-ASZGMKB4.js.map → chunk-Y3TD7HOY.js.map} +0 -0
- /package/dist/{chunk-HBHBRRSW.js.map → chunk-YBAK2WN5.js.map} +0 -0
- /package/dist/{chunk-6RTE4UNO.js.map → chunk-YV4O7KDR.js.map} +0 -0
- /package/dist/{chunk-Z5V5E3JW.js.map → chunk-ZIHSCBMN.js.map} +0 -0
- /package/dist/native/chunks/{chunk-AVHGS66L.js.map → chunk-FGAX5BRS.js.map} +0 -0
|
@@ -8,6 +8,7 @@ import { Button } from '../components/form/Button';
|
|
|
8
8
|
import { Text } from '../components/typography/Text';
|
|
9
9
|
import { Card } from '../components/layout/Card';
|
|
10
10
|
import type { UserAvatarCopy } from '../copy';
|
|
11
|
+
import { EN_US_USER_AVATAR_COPY } from '../en-US.utility';
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* Generate initials from a name
|
|
@@ -28,6 +29,11 @@ export interface UserAvatarProps {
|
|
|
28
29
|
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
29
30
|
onClick?: () => void;
|
|
30
31
|
interactive?: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* `avatarAlt` names the image when there is no `name`. Optional: English
|
|
34
|
+
* when omitted; a host passes `USER_AVATAR_COPY[locale]`.
|
|
35
|
+
*/
|
|
36
|
+
copy?: Partial<UserAvatarCopy>;
|
|
31
37
|
}
|
|
32
38
|
|
|
33
39
|
/**
|
|
@@ -39,13 +45,15 @@ export function UserAvatar({
|
|
|
39
45
|
size = 'md',
|
|
40
46
|
onClick,
|
|
41
47
|
interactive = false,
|
|
48
|
+
copy,
|
|
42
49
|
}: UserAvatarProps): React.ReactElement {
|
|
43
50
|
const fallbackText = name ? getInitials(name) : "?";
|
|
51
|
+
const avatarAlt = copy?.avatarAlt ?? EN_US_USER_AVATAR_COPY.avatarAlt;
|
|
44
52
|
|
|
45
53
|
return (
|
|
46
54
|
<Avatar
|
|
47
55
|
src={src ?? undefined}
|
|
48
|
-
alt={name ??
|
|
56
|
+
alt={name ?? avatarAlt}
|
|
49
57
|
fallback={fallbackText}
|
|
50
58
|
size={size}
|
|
51
59
|
variant="circle"
|
|
@@ -81,11 +89,12 @@ export function UserMenu({ user, onSignOut, copy }: UserMenuProps): React.ReactE
|
|
|
81
89
|
src={user.image}
|
|
82
90
|
name={user.name}
|
|
83
91
|
size="md"
|
|
92
|
+
copy={copy}
|
|
84
93
|
/>
|
|
85
94
|
|
|
86
95
|
<Stack spacing={0.5} sx={{ flex: 1, minWidth: 0 }}>
|
|
87
96
|
<Text weight="semibold" size="sm">
|
|
88
|
-
{user.name ??
|
|
97
|
+
{user.name ?? copy.unnamedUser ?? EN_US_USER_AVATAR_COPY.unnamedUser}
|
|
89
98
|
</Text>
|
|
90
99
|
{user.email && (
|
|
91
100
|
<Text color="secondary" size="xs">
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A component's labels: the caller's `labels` laid over the pack's defaults,
|
|
3
|
+
* key by key, ignoring keys the caller left `undefined` (FUT-3860).
|
|
4
|
+
*
|
|
5
|
+
* `Partial<T>` is what keeps a new key non-breaking: every label prop is
|
|
6
|
+
* optional, and the English pack answers for whatever a caller does not name.
|
|
7
|
+
*/
|
|
8
|
+
export function resolveLabels<T extends object>(defaults: T, overrides?: Partial<T>): T {
|
|
9
|
+
if (!overrides) return defaults;
|
|
10
|
+
const defined = Object.entries(overrides).filter(([, value]) => value !== undefined);
|
|
11
|
+
return { ...defaults, ...Object.fromEntries(defined) } as T;
|
|
12
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/navigation/CommandPalette/CommandPaletteResults.tsx"],"sourcesContent":["import RecentIcon from '@mui/icons-material/History';\nimport Box from '@mui/material/Box/index.js';\nimport Divider from '@mui/material/Divider/index.js';\nimport List from '@mui/material/List/index.js';\nimport ListItem from '@mui/material/ListItem/index.js';\nimport ListItemIcon from '@mui/material/ListItemIcon/index.js';\nimport ListItemText from '@mui/material/ListItemText/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, styled } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { ShortcutChip } from './ShortcutChip';\nimport type { PaletteCommand } from './CommandPalette.types';\nimport type { CommandPaletteCopy } from '../../../copy';\nimport { rem, sxRem } from '../../../tokens/relative';\n\nconst ResultsList = styled(List)(({ theme }) => ({\n maxHeight: rem(theme, 400),\n overflowY: 'auto',\n padding: theme.spacing(1),\n '&::-webkit-scrollbar': {\n width: rem(theme, 8),\n },\n '&::-webkit-scrollbar-track': {\n background: alpha(theme.palette.action.disabled, 0.1),\n },\n '&::-webkit-scrollbar-thumb': {\n background: alpha(theme.palette.primary.main, 0.3),\n borderRadius: rem(theme, 4),\n '&:hover': {\n background: alpha(theme.palette.primary.main, 0.5),\n },\n },\n}));\n\nconst CommandItem = styled(ListItem)<{ selected?: boolean }>(({ theme, selected }) => ({\n borderRadius: theme.shape.borderRadius,\n marginBottom: theme.spacing(0.5),\n transition: theme.transitions.create(['background-color', 'transform']),\n cursor: 'pointer',\n ...(selected && {\n backgroundColor: alpha(theme.palette.primary.main, 0.12),\n transform: `translateX(${rem(theme, 4)})`,\n '& .MuiListItemIcon-root': {\n color: theme.palette.primary.main,\n },\n }),\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.08),\n },\n}));\n\nconst CategoryLabel = styled(Typography)(({ theme }) => ({\n fontSize: rem(theme, 12),\n fontWeight: 600,\n color: theme.palette.text.secondary,\n textTransform: 'uppercase',\n letterSpacing: '0.1em',\n padding: theme.spacing(1, 2, 0.5, 2),\n marginTop: theme.spacing(1),\n}));\n\nconst NoResults = styled(Box)(({ theme }) => ({\n padding: theme.spacing(4, 2),\n textAlign: 'center',\n color: theme.palette.text.secondary,\n}));\n\nconst CommandRow: React.FC<{\n command: PaletteCommand;\n index: number;\n selected: boolean;\n dataTestId?: string;\n onSelect: (index: number) => void;\n onExecute: (command: PaletteCommand) => void;\n}> = ({ command, index, selected, dataTestId, onSelect, onExecute }) => (\n <CommandItem\n data-index={index}\n data-testid={`${dataTestId}-item-${command.id}`}\n selected={selected}\n onClick={() => onExecute(command)}\n onMouseEnter={() => onSelect(index)}\n >\n {command.icon && <ListItemIcon sx={{ minWidth: sxRem(40) }}>{command.icon}</ListItemIcon>}\n <ListItemText\n primary={command.label}\n secondary={command.description}\n primaryTypographyProps={{ fontSize: sxRem(14.4), fontWeight: selected ? 500 : 400 }}\n secondaryTypographyProps={{ fontSize: sxRem(12) }}\n />\n {command.shortcut && <ShortcutChip label={command.shortcut} size=\"small\" />}\n </CommandItem>\n);\n\nconst slug = (value: string) => value.toLowerCase().replace(/\\s+/g, '-');\n\n// The list, its recent section and the empty state. The running commandIndex\n// has to stay consistent across both sections, so it is threaded through here\n// rather than mutated from inside the render as it was before.\nexport const PaletteResults: React.FC<{\n copy: CommandPaletteCopy;\n listRef: React.Ref<globalThis.HTMLUListElement>;\n dataTestId?: string;\n searchQuery: string;\n showRecent?: boolean;\n commands: PaletteCommand[];\n recentCommandIds: string[];\n filteredCommands: PaletteCommand[];\n groupedCommands: Record<string, PaletteCommand[]>;\n selectedIndex: number;\n onSelect: (index: number) => void;\n onExecute: (command: PaletteCommand) => void;\n}> = ({\n copy,\n listRef,\n dataTestId,\n searchQuery,\n showRecent,\n commands,\n recentCommandIds,\n filteredCommands,\n groupedCommands,\n selectedIndex,\n onSelect,\n onExecute,\n}) => {\n if (filteredCommands.length === 0) {\n return (\n <NoResults data-testid={`${dataTestId}-no-results`}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n No commands found for \"{searchQuery}\"\n </Typography>\n <Typography variant=\"caption\" color=\"text.disabled\" sx={{ mt: 1 }}>\n {copy.tryAnotherTerm}\n </Typography>\n </NoResults>\n );\n }\n\n const showRecentSection = !searchQuery && showRecent && recentCommandIds.length > 0;\n const recent = showRecentSection\n ? (recentCommandIds\n .map((id) => commands.find((command) => command.id === id))\n .filter(Boolean) as PaletteCommand[])\n : [];\n\n // One running index across both sections, so keyboard selection lines up with\n // what is on screen.\n let commandIndex = 0;\n const row = (command: PaletteCommand) => {\n const index = commandIndex++;\n return (\n <CommandRow\n key={command.id}\n command={command}\n index={index}\n selected={index === selectedIndex}\n dataTestId={dataTestId}\n onSelect={onSelect}\n onExecute={onExecute}\n />\n );\n };\n\n const showCategoryLabels = Object.keys(groupedCommands).length > 1;\n\n return (\n <ResultsList ref={listRef} data-testid={`${dataTestId}-list`}>\n {showRecentSection && (\n <>\n <CategoryLabel data-testid={`${dataTestId}-group-recent`}>\n <RecentIcon sx={{ fontSize: sxRem(14), mr: 0.5, verticalAlign: 'middle' }} />\n {copy.recent}\n </CategoryLabel>\n {recent.map(row)}\n {filteredCommands.length > recentCommandIds.length && <Divider sx={{ my: 1 }} />}\n </>\n )}\n\n {Object.entries(groupedCommands).map(([category, categoryCommands]) => (\n <Box key={category} data-testid={`${dataTestId}-group-${slug(category)}`}>\n {showCategoryLabels && (\n <CategoryLabel data-testid={`${dataTestId}-group-label-${slug(category)}`}>\n {category}\n </CategoryLabel>\n )}\n {categoryCommands.map(row)}\n </Box>\n ))}\n </ResultsList>\n );\n};\n"],"mappings":"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","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, { type DialogProps as MuiDialogProps } 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, { type DrawerProps } from '@mui/material/Drawer/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { useTheme, type SxProps, type Theme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { focusDialogOnEntered } from './Dialog.focus';\nimport { hasSpacingSlot, withDialogDefaults } from './Dialog.helpers';\nimport {\n DIALOG_ACTIONS,\n DIALOG_BODY_PADDING_UNITS,\n DIALOG_CONTENT_PADDING_UNITS,\n DIALOG_HEADER_CHILDREN_PADDING_UNITS,\n DIALOG_TITLE,\n DIALOG_TITLED_BODY_PADDING_TOP_UNITS,\n} from './Dialog.metrics';\nimport { mergedBackdropSlot, mergedPaperSlot, mergedTransitionSlot } from './Dialog.slots';\nimport { backdropSxOf, variantStylesOf } from './Dialog.styles';\nimport { childTestId, resolveTestId, slotTestId, withoutTestIdProps } from '../../../platform/test-id';\nimport type {\n DialogActionsProps,\n DialogContentProps,\n DialogHeaderProps,\n DialogProps,\n} from './Dialog.types';\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: DIALOG_BODY_PADDING_UNITS.horizontal,\n pb: DIALOG_BODY_PADDING_UNITS.bottom,\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 // Read lazily: both slots are declared below this function.\n if (hasSpacingSlot(children, [DialogContent, DialogActions])) return children;\n const pt = hasTitle\n ? DIALOG_BODY_PADDING_UNITS.topUnderTitle\n : DIALOG_BODY_PADDING_UNITS.top;\n return <Box sx={{ ...BODY_SX, pt }}>{children}</Box>;\n}\n\n/**\n * MUI's `onClose` for either renderer: a `persistent` dialog swallows the\n * backdrop press and Escape, and the caller's `onClose` is called with no\n * arguments, as `Dialog.base.ts` promises. The drawer used to get the caller's\n * raw `onClose` — so it closed when `persistent` said it must not, and was\n * handed MUI's `(event, reason)` (FUT-2673).\n */\nfunction closeHandlerOf(persistent: boolean, onClose: (() => void) | undefined) {\n return (_event: object, reason: 'backdropClick' | 'escapeKeyDown') => {\n if (persistent && (reason === 'backdropClick' || reason === 'escapeKeyDown')) {\n return;\n }\n onClose?.();\n };\n}\n\n/** The looks the Dialog lays under a caller's paper and backdrop props. */\ninterface DialogLooks {\n paperSx: SxProps<Theme>;\n backdropSx: SxProps<Theme>;\n testId: string | undefined;\n}\n\n/** What either renderer below takes: the looks, and the dialog's own children. */\ntype RendererProps = DialogLooks & { children: React.ReactNode };\n\n/**\n * Every variant but the drawer: MUI's `Dialog`. The scrim reaches MUI through\n * `slotProps.backdrop`, not the deprecated `BackdropProps`, and a caller's\n * backdrop props from either spelling merge over it rather than replacing it\n * (FUT-2672) — as their paper props merge over the variant's look (FUT-2613).\n * `slotProps.transition` gives initial focus to the paper (FUT-2696, see\n * `Dialog.focus.ts` and `Dialog.md`) ahead of a caller's own `onEntered`.\n */\nfunction ModalDialog({\n paperSx,\n backdropSx,\n testId,\n dialogProps,\n children,\n}: RendererProps & { dialogProps: MuiDialogProps }) {\n const { PaperProps: callerPaper, BackdropProps: callerBackdrop, TransitionProps: callerTransition, slotProps, ...rest } = dialogProps;\n return (\n <MuiDialog\n {...rest}\n slotProps={{\n ...slotProps,\n paper: mergedPaperSlot(paperSx, testId, callerPaper, slotProps?.paper),\n backdrop: mergedBackdropSlot(backdropSx, callerBackdrop, slotProps?.backdrop),\n transition: mergedTransitionSlot(focusDialogOnEntered, callerTransition, slotProps?.transition),\n }}\n >\n {children}\n </MuiDialog>\n );\n}\n\n/**\n * The drawer variant: MUI's `Drawer`, with the variant's look on the Drawer's\n * OWN paper — on an inner Box it left the paper 0px wide and clipped the panel —\n * and a caller's paper props merged over it rather than replacing it. The\n * test id stays on the Drawer root, so the paper carries none of its own.\n *\n * The scrim rides the drawer's backdrop exactly as it rides the dialog's, so\n * `glass` blurs it here too; the paper does not frost (FUT-2673). MUI's\n * `Drawer` does not merge `BackdropProps` into `slotProps.backdrop` — it takes\n * one or the other — so both are folded into the one slot here.\n * `slotProps.transition` gives initial focus the same way `ModalDialog` does\n * (FUT-2696, see `Dialog.focus.ts` and `Dialog.md` for why the drawer's paper\n * differs from the modal's paper here and needed the fix less).\n */\nfunction DrawerDialog({\n paperSx,\n backdropSx,\n testId,\n drawerProps,\n children,\n}: RendererProps & { drawerProps: DrawerProps }) {\n const { PaperProps: callerPaper, BackdropProps: callerBackdrop, SlideProps: callerTransition, slotProps, ...rest } = drawerProps;\n return (\n <Drawer\n anchor=\"right\"\n data-testid={testId}\n {...rest}\n slotProps={{\n ...slotProps,\n paper: mergedPaperSlot(paperSx, undefined, callerPaper, slotProps?.paper),\n backdrop: mergedBackdropSlot(backdropSx, callerBackdrop, slotProps?.backdrop),\n transition: mergedTransitionSlot(focusDialogOnEntered, callerTransition, slotProps?.transition),\n }}\n >\n {children}\n </Drawer>\n );\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 ...others\n } = withDialogDefaults(rawProps);\n const theme = useTheme();\n // Every spelling of the test id the shared contract allows, mapped to the one\n // the DOM reads, and stripped from what is spread — `testID` is React\n // Native's name for it and is not a DOM attribute. The native `Dialog` does\n // the same in reverse.\n const testId = resolveTestId(others, 'dialog');\n const props = withoutTestIdProps(others);\n const looks: DialogLooks = {\n paperSx: variantStylesOf(theme, { variant, size, borderRadius, glass, gradient, glow, pulse }),\n backdropSx: backdropSxOf(theme, glass),\n testId,\n };\n const handleClose = closeHandlerOf(persistent, onClose);\n\n const header = title ? (\n <DialogHeader\n title={title}\n subtitle={description}\n showCloseButton={showCloseButton}\n onClose={onClose}\n dataTestId={testId}\n />\n ) : null;\n const body = bodyOf(children, Boolean(title));\n\n if (variant === 'drawer') {\n return (\n <DrawerDialog {...looks} drawerProps={{ ...props, open, onClose: handleClose }}>\n {header}\n {body}\n </DrawerDialog>\n );\n }\n\n return (\n <ModalDialog\n {...looks}\n dialogProps={{\n open,\n onClose: handleClose,\n fullScreen: variant === 'fullscreen',\n BackdropComponent: backdrop ? Backdrop : undefined,\n ...props,\n }}\n >\n {header}\n {body}\n </ModalDialog>\n );\n};\n\nexport const DialogHeader: React.FC<DialogHeaderProps> = ({\n children,\n title,\n subtitle,\n showCloseButton = true,\n onClose,\n ...others\n}) => {\n const props = withoutTestIdProps(others);\n\n if (children) {\n return (\n <Box\n data-testid={slotTestId(others, 'header', 'dialog')}\n sx={{\n p: DIALOG_HEADER_CHILDREN_PADDING_UNITS,\n borderBottom: '1px solid',\n borderColor: 'divider',\n }}\n >\n {children}\n </Box>\n );\n }\n\n return (\n <MuiDialogTitle\n data-testid={slotTestId(others, 'title', 'dialog')}\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n pb: subtitle\n ? DIALOG_TITLE.paddingBottomUnits.withSubtitle\n : DIALOG_TITLE.paddingBottomUnits.plain,\n }}\n {...props}\n >\n <Box>\n <Typography variant=\"h6\" component=\"div\">\n {title}\n </Typography>\n {subtitle && (\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n sx={{ mt: DIALOG_TITLE.subtitleGapUnits }}\n >\n {subtitle}\n </Typography>\n )}\n </Box>\n {showCloseButton && onClose && (\n <IconButton\n aria-label=\"close\"\n onClick={onClose}\n data-testid={childTestId(others, 'close', 'dialog')}\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 = DIALOG_TITLED_BODY_PADDING_TOP_UNITS;\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 ...others\n}) => (\n <MuiDialogContent\n data-testid={slotTestId(others, 'content', 'dialog')}\n dividers={dividers}\n sx={{\n padding: dense ? DIALOG_CONTENT_PADDING_UNITS.dense : DIALOG_CONTENT_PADDING_UNITS.normal,\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 {...withoutTestIdProps(others)}\n >\n {children}\n </MuiDialogContent>\n );\n\nexport const DialogActions: React.FC<DialogActionsProps> = ({\n children,\n alignment = 'right',\n spacing = DIALOG_ACTIONS.defaultSpacingUnits,\n ...others\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={slotTestId(others, 'actions', 'dialog')}\n sx={{\n justifyContent: getJustifyContent(),\n gap: spacing,\n p: DIALOG_ACTIONS.paddingUnits,\n }}\n {...withoutTestIdProps(others)}\n >\n {children}\n </MuiDialogActions>\n );\n};"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/LazyImage/LazyImage.hooks.ts"],"sourcesContent":["import { useTheme } from '@mui/material/styles/index.js';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { remPx } from '../../../tokens/relative';\n\nimport type { LazyImageProps, LazyImageState } from './LazyImage.types';\n\ntype LazyImageDefaultedKeys =\n | 'height'\n | 'loadingState'\n | 'objectFit'\n | 'objectPosition'\n | 'lazy'\n | 'threshold'\n | 'fadeIn'\n | 'fadeInDuration'\n | 'retryOnError'\n | 'maxRetries'\n | 'retryDelay'\n | 'decoding'\n | 'skeletonProps'\n | 'spinnerProps'\n | 'sx'\n | 'role'\n | 'data-testid';\n\nexport type ResolvedLazyImageProps = LazyImageProps &\n Required<Pick<LazyImageProps, LazyImageDefaultedKeys>>;\n\nconst LAZY_IMAGE_DEFAULTS: Pick<LazyImageProps, LazyImageDefaultedKeys> = {\n height: 'auto',\n loadingState: 'skeleton',\n objectFit: 'cover',\n objectPosition: 'center',\n lazy: true,\n threshold: 0,\n fadeIn: true,\n fadeInDuration: 300,\n retryOnError: false,\n maxRetries: 3,\n retryDelay: 1000,\n decoding: 'async',\n skeletonProps: {},\n spinnerProps: {},\n sx: {},\n role: 'img',\n // FUT-2774 #3: with no default, every derived id (`${testId}-img`, …) read\n // literally as `\"undefined-img\"` for a caller that omitted it — and every\n // such instance on a page collided on the same ids.\n 'data-testid': 'lazy-image',\n};\n\n// Strips explicitly-undefined props before the merge, so `lazy={undefined}` still\n// falls back to the default exactly as a destructuring default would.\nconst definedProps = (props: LazyImageProps): Partial<LazyImageProps> =>\n Object.fromEntries(\n Object.entries(props).filter(([, value]) => value !== undefined),\n ) as Partial<LazyImageProps>;\n\nexport const resolveLazyImageProps = (props: LazyImageProps): ResolvedLazyImageProps =>\n ({ ...LAZY_IMAGE_DEFAULTS, ...definedProps(props) }) as ResolvedLazyImageProps;\n\n// Props this component consumes itself. Anything else the caller passed is an\n// ordinary <img> attribute and is forwarded untouched.\nconst OWN_PROPS = new Set([\n 'src', 'alt', 'width', 'height', 'placeholder', 'fallback', 'loadingState',\n 'showSpinner', 'objectFit', 'objectPosition', 'borderRadius', 'lazy', 'rootMargin',\n 'threshold', 'fadeIn', 'fadeInDuration', 'onLoad', 'onError', 'onLoadStart',\n 'retryOnError', 'maxRetries', 'retryDelay', 'decoding', 'loading', 'fetchPriority',\n 'skeletonProps', 'spinnerProps', 'sx', 'className', 'data-testid', 'aria-label',\n 'aria-describedby', 'role',\n]);\n\nexport const imgPassThrough = (props: ResolvedLazyImageProps): Record<string, unknown> =>\n Object.fromEntries(Object.entries(props).filter(([key]) => !OWN_PROPS.has(key)));\n\n/**\n * Flips `isVisible` the first time the container nears the viewport, then stops\n * observing. Does nothing when `lazy` is off — the caller wants the request now.\n */\nconst useVisibility = (\n props: ResolvedLazyImageProps,\n containerRef: React.RefObject<HTMLDivElement | null>,\n isVisible: boolean,\n onVisible: () => void,\n) => {\n const { lazy, src, threshold, onLoadStart } = props;\n const theme = useTheme();\n // `IntersectionObserver` takes px or %, never rem: the default reach is 100\n // design px, measured through the theme so it moves with the root.\n const rootMargin = props.rootMargin ?? `${remPx(theme, 100)}px`;\n\n useEffect(() => {\n if (!lazy || isVisible) {\n return;\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n onVisible();\n onLoadStart?.();\n observer.unobserve(entry.target);\n }\n });\n },\n { rootMargin, threshold },\n );\n\n if (containerRef.current) {\n observer.observe(containerRef.current);\n }\n\n return () => {\n if (containerRef.current) {\n observer.unobserve(containerRef.current);\n }\n };\n }, [lazy, src, rootMargin, threshold, isVisible, onLoadStart, onVisible, containerRef]);\n};\n\n/** A pending timer has to be cancelled on unmount, or it sets state on a dead component. */\nconst useTimeoutRef = () => {\n const ref = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n useEffect(\n () => () => {\n if (ref.current) {\n clearTimeout(ref.current);\n }\n },\n [],\n );\n\n return ref;\n};\n\n/**\n * Whether the placeholder image is up. It is a loading state: only\n * `loadingState=\"placeholder\"` with a `placeholder` set draws it, from mount\n * until the real image settles — its `load` plus the fade, or its final error.\n * A placeholder that fails to load retires at once, as if none were set.\n */\nconst usePlaceholderPhase = (\n props: ResolvedLazyImageProps,\n loadingState: NonNullable<LazyImageProps['loadingState']>,\n) => {\n const { placeholder, fadeIn, fadeInDuration, src } = props;\n // Only this mode draws a placeholder. Otherwise the real image settling\n // retires the phase at once — batched into the load's own render, with no\n // timer — so a placeholder switched on afterwards never covers a loaded image.\n const active = loadingState === 'placeholder' && Boolean(placeholder);\n const [retired, setRetired] = useState(false);\n const fadeTimeoutRef = useTimeoutRef();\n\n // FUT-2774 #2: `retired` was set once and never reset, and this hook took\n // no `src` at all — so a mounted instance reused for a NEW image (a\n // carousel swapping `src` rather than remounting) never showed the\n // placeholder again for it. Reset on every `src` change, the same way\n // `useImageSource` already resets `currentSrc`/`isLoading`/`hasError`; drop\n // any fade timer left over from the PREVIOUS image, or it would retire the\n // new placeholder on a schedule that has nothing to do with it.\n useEffect(() => {\n clearTimeout(fadeTimeoutRef.current);\n setRetired(false);\n }, [src, fadeTimeoutRef]);\n\n const retire = useCallback(() => setRetired(true), []);\n\n // The real image fades in over the placeholder, so it goes when the fade ends.\n const retireAfterFade = useCallback(() => {\n if (!active || !fadeIn) {\n setRetired(true);\n return;\n }\n clearTimeout(fadeTimeoutRef.current);\n fadeTimeoutRef.current = setTimeout(() => setRetired(true), fadeInDuration);\n }, [active, fadeIn, fadeInDuration, fadeTimeoutRef]);\n\n return {\n showPlaceholder: active && !retired,\n retirePlaceholder: retire,\n retirePlaceholderAfterFade: retireAfterFade,\n };\n};\n\n/**\n * The real image's state, and when it is requested: at once when not lazy,\n * else the first time the container nears the viewport. The main <img> only\n * ever carries the real src — a placeholder is drawn by its own element, so its\n * load and error are never the image's.\n */\nconst useImageSource = (\n props: ResolvedLazyImageProps,\n containerRef: React.RefObject<HTMLDivElement | null>,\n) => {\n const { src, lazy } = props;\n const [state, setState] = useState<LazyImageState>({\n isLoading: true,\n hasError: false,\n isVisible: !lazy, // If not lazy, load immediately\n retryCount: 0,\n currentSrc: lazy ? null : src,\n });\n // FUT-2774 #1: the last `src` PROP this hook has already requested — as\n // opposed to `state.currentSrc`, which a retry deliberately diverges from\n // `src` (its cache-busting query string) without a NEW image having\n // arrived. Comparing the effect's guard against `src` itself let a retry's\n // own state update immediately retrigger this effect, which overwrote the\n // cache-busted value back to the plain `src` before the browser ever\n // re-requested it — so `retryOnError` silently never re-fetched anything.\n const requestedSrcRef = useRef<string | null>(lazy ? null : src);\n // `handleImageError` (in `useLazyImage`) owns the retry timer itself, but\n // it schedules against THIS src's identity: read together, the two hooks\n // can tell a timeout meant for an image that is no longer the current one\n // apart from one that still is (FUT-2774, src-changing-mid-retry).\n const retryTimeoutRef = useTimeoutRef();\n\n const markVisible = useCallback(() => {\n requestedSrcRef.current = src;\n setState((prev) => ({ ...prev, isVisible: true, currentSrc: src }));\n }, [src]);\n useVisibility(props, containerRef, state.isVisible, markVisible);\n\n // Load image when it becomes visible, or when `src` itself changes to a\n // genuinely new value — never when only `state.currentSrc` has (a retry).\n useEffect(() => {\n if (!state.isVisible || !src || requestedSrcRef.current === src) {\n return;\n }\n\n // A retry scheduled for the PREVIOUS src must not land on this one: left\n // pending, its stale `setTimeout` would fire later and overwrite this\n // fresh `currentSrc` with `${oldSrc}?retry=N` — cache-busting an image\n // nothing asked for again, and never re-syncing back (FUT-2774).\n clearTimeout(retryTimeoutRef.current);\n requestedSrcRef.current = src;\n setState((prev) => ({\n ...prev,\n currentSrc: src,\n isLoading: true,\n hasError: false,\n retryCount: 0,\n }));\n }, [state.isVisible, src, retryTimeoutRef]);\n\n return { state, setState, requestedSrcRef, retryTimeoutRef };\n};\n\n/**\n * Owns whether the real image has been requested yet and how it went: the\n * observer above, the load/error handlers, the retry timer, and how long the\n * placeholder stays up.\n */\nexport const useLazyImage = (props: ResolvedLazyImageProps) => {\n const { src, loadingState, showSpinner } = props;\n const { onLoad, onError, retryOnError, maxRetries, retryDelay } = props;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const { state, setState, requestedSrcRef, retryTimeoutRef } = useImageSource(props, containerRef);\n\n // Handle deprecated showSpinner prop\n const effectiveLoadingState = showSpinner ? 'spinner' : loadingState;\n const { showPlaceholder, retirePlaceholder, retirePlaceholderAfterFade } = usePlaceholderPhase(\n props,\n effectiveLoadingState,\n );\n\n const handleImageLoad = useCallback(\n (event: React.SyntheticEvent<HTMLImageElement>) => {\n setState((prev) => ({ ...prev, isLoading: false, hasError: false, retryCount: 0 }));\n retirePlaceholderAfterFade();\n onLoad?.(event);\n },\n [onLoad, retirePlaceholderAfterFade],\n );\n\n const handleImageError = useCallback(\n (event: React.SyntheticEvent<HTMLImageElement>) => {\n if (!retryOnError || state.retryCount >= maxRetries) {\n setState((prev) => ({ ...prev, isLoading: false, hasError: true }));\n retirePlaceholder();\n onError?.(event);\n return;\n }\n\n retryTimeoutRef.current = setTimeout(() => {\n // Belt and suspenders alongside `useImageSource`'s own cancel-on-src-\n // change: if `src` moved on since this timeout was scheduled, this\n // retry is for an image that is no longer live at all — applying it\n // would cache-bust the WRONG `<img>` (FUT-2774).\n if (requestedSrcRef.current !== src) {\n return;\n }\n setState((prev) => ({\n ...prev,\n retryCount: prev.retryCount + 1,\n currentSrc: `${src}?retry=${prev.retryCount + 1}`, // Force reload with cache buster\n }));\n }, retryDelay);\n },\n [onError, retryOnError, state.retryCount, maxRetries, retryDelay, src, retirePlaceholder, requestedSrcRef, retryTimeoutRef],\n );\n\n return {\n state,\n containerRef,\n effectiveLoadingState,\n handleImageLoad,\n handleImageError,\n handlePlaceholderError: retirePlaceholder,\n showImage: Boolean(state.currentSrc) && !state.hasError,\n // In placeholder mode the placeholder outlasts `isLoading`: it stays under\n // the real image until the fade has ended.\n showLoading: effectiveLoadingState === 'placeholder' ? showPlaceholder : state.isLoading,\n showPlaceholder,\n };\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/form/RichTextEditor/RichTextEditor.dom.ts"],"sourcesContent":["// Selection surgery for the editor. Each of these mutates the DOM around a\n// Range and then rebuilds the selection, so the caret ends up where the user\n// expects rather than at the start of the document.\n\nexport const wrapSelection = (range: globalThis.Range, tagName: string) => {\n const selectedText = range.toString();\n if (!selectedText) return;\n \n const wrapper = document.createElement(tagName);\n wrapper.appendChild(document.createTextNode(selectedText));\n \n range.deleteContents();\n range.insertNode(wrapper);\n \n // Move cursor after inserted element\n const newRange = document.createRange();\n newRange.setStartAfter(wrapper);\n newRange.collapse(true);\n \n const selection = window.getSelection();\n selection?.removeAllRanges();\n selection?.addRange(newRange);\n};\n\nexport const wrapSelectionWithLink = (range: globalThis.Range, url: string) => {\n const selectedText = range.toString();\n if (!selectedText) return;\n \n const link = document.createElement('a');\n link.href = url.startsWith('http') ? url : `https://${url}`;\n link.target = '_blank';\n link.rel = 'noopener noreferrer';\n link.appendChild(document.createTextNode(selectedText));\n \n range.deleteContents();\n range.insertNode(link);\n \n // Move cursor after inserted element\n const newRange = document.createRange();\n newRange.setStartAfter(link);\n newRange.collapse(true);\n \n const selection = window.getSelection();\n selection?.removeAllRanges();\n selection?.addRange(newRange);\n};\n\nexport const insertImage = (range: globalThis.Range, src: string) => {\n const img = document.createElement('img');\n img.src = src;\n img.style.maxWidth = '100%';\n img.style.height = 'auto';\n \n range.deleteContents();\n range.insertNode(img);\n \n // Move cursor after inserted element\n const newRange = document.createRange();\n newRange.setStartAfter(img);\n newRange.collapse(true);\n \n const selection = window.getSelection();\n selection?.removeAllRanges();\n selection?.addRange(newRange);\n};\n\n// Resolves to the nearest element, since a collapsed selection reports its text\n// node as the common ancestor.\nconst blockElementFor = (range: globalThis.Range): globalThis.Element | null => {\n const node = range.commonAncestorContainer;\n\n return node.nodeType === globalThis.Node.TEXT_NODE\n ? node.parentElement\n : (node as globalThis.Element);\n};\n\n// Unwraps the item back to plain text, keeping its content.\nconst removeFromList = (block: globalThis.Element) => {\n const listItem = block.closest('li');\n if (!listItem?.parentElement) return;\n\n listItem.parentElement.replaceChild(\n document.createTextNode(listItem.textContent || ''),\n listItem,\n );\n};\n\nconst wrapInList = (range: globalThis.Range, listType: 'ol' | 'ul') => {\n const list = document.createElement(listType);\n const listItem = document.createElement('li');\n\n listItem.appendChild(document.createTextNode(range.toString() || 'List item'));\n list.appendChild(listItem);\n\n range.deleteContents();\n range.insertNode(list);\n\n // Move cursor inside list item\n const newRange = document.createRange();\n newRange.selectNodeContents(listItem);\n newRange.collapse(false);\n\n const selection = window.getSelection();\n selection?.removeAllRanges();\n selection?.addRange(newRange);\n};\n\nexport const toggleList = (\n range: globalThis.Range,\n listType: 'ol' | 'ul',\n editor: HTMLElement | null,\n) => {\n if (!editor) return;\n\n const block = blockElementFor(range);\n if (!block) return;\n\n if (block.closest(listType)) {\n removeFromList(block);\n return;\n }\n\n wrapInList(range, listType);\n};\n"],"mappings":";AAIO,IAAM,gBAAgB,CAAC,OAAyB,YAAoB;AACzE,QAAM,eAAe,MAAM,SAAS;AACpC,MAAI,CAAC,aAAc;AAEnB,QAAM,UAAU,SAAS,cAAc,OAAO;AAC9C,UAAQ,YAAY,SAAS,eAAe,YAAY,CAAC;AAEzD,QAAM,eAAe;AACrB,QAAM,WAAW,OAAO;AAGxB,QAAM,WAAW,SAAS,YAAY;AACtC,WAAS,cAAc,OAAO;AAC9B,WAAS,SAAS,IAAI;AAEtB,QAAM,YAAY,OAAO,aAAa;AACtC,aAAW,gBAAgB;AAC3B,aAAW,SAAS,QAAQ;AAC9B;AAEO,IAAM,wBAAwB,CAAC,OAAyB,QAAgB;AAC7E,QAAM,eAAe,MAAM,SAAS;AACpC,MAAI,CAAC,aAAc;AAEnB,QAAM,OAAO,SAAS,cAAc,GAAG;AACvC,OAAK,OAAO,IAAI,WAAW,MAAM,IAAI,MAAM,WAAW,GAAG;AACzD,OAAK,SAAS;AACd,OAAK,MAAM;AACX,OAAK,YAAY,SAAS,eAAe,YAAY,CAAC;AAEtD,QAAM,eAAe;AACrB,QAAM,WAAW,IAAI;AAGrB,QAAM,WAAW,SAAS,YAAY;AACtC,WAAS,cAAc,IAAI;AAC3B,WAAS,SAAS,IAAI;AAEtB,QAAM,YAAY,OAAO,aAAa;AACtC,aAAW,gBAAgB;AAC3B,aAAW,SAAS,QAAQ;AAC9B;AAEO,IAAM,cAAc,CAAC,OAAyB,QAAgB;AACnE,QAAM,MAAM,SAAS,cAAc,KAAK;AACxC,MAAI,MAAM;AACV,MAAI,MAAM,WAAW;AACrB,MAAI,MAAM,SAAS;AAEnB,QAAM,eAAe;AACrB,QAAM,WAAW,GAAG;AAGpB,QAAM,WAAW,SAAS,YAAY;AACtC,WAAS,cAAc,GAAG;AAC1B,WAAS,SAAS,IAAI;AAEtB,QAAM,YAAY,OAAO,aAAa;AACtC,aAAW,gBAAgB;AAC3B,aAAW,SAAS,QAAQ;AAC9B;AAIA,IAAM,kBAAkB,CAAC,UAAuD;AAC9E,QAAM,OAAO,MAAM;AAEnB,SAAO,KAAK,aAAa,WAAW,KAAK,YACrC,KAAK,gBACJ;AACP;AAGA,IAAM,iBAAiB,CAAC,UAA8B;AACpD,QAAM,WAAW,MAAM,QAAQ,IAAI;AACnC,MAAI,CAAC,UAAU,cAAe;AAE9B,WAAS,cAAc;AAAA,IACrB,SAAS,eAAe,SAAS,eAAe,EAAE;AAAA,IAClD;AAAA,EACF;AACF;AAEA,IAAM,aAAa,CAAC,OAAyB,aAA0B;AACrE,QAAM,OAAO,SAAS,cAAc,QAAQ;AAC5C,QAAM,WAAW,SAAS,cAAc,IAAI;AAE5C,WAAS,YAAY,SAAS,eAAe,MAAM,SAAS,KAAK,WAAW,CAAC;AAC7E,OAAK,YAAY,QAAQ;AAEzB,QAAM,eAAe;AACrB,QAAM,WAAW,IAAI;AAGrB,QAAM,WAAW,SAAS,YAAY;AACtC,WAAS,mBAAmB,QAAQ;AACpC,WAAS,SAAS,KAAK;AAEvB,QAAM,YAAY,OAAO,aAAa;AACtC,aAAW,gBAAgB;AAC3B,aAAW,SAAS,QAAQ;AAC9B;AAEO,IAAM,aAAa,CACxB,OACA,UACA,WACG;AACH,MAAI,CAAC,OAAQ;AAEb,QAAM,QAAQ,gBAAgB,KAAK;AACnC,MAAI,CAAC,MAAO;AAEZ,MAAI,MAAM,QAAQ,QAAQ,GAAG;AAC3B,mBAAe,KAAK;AACpB;AAAA,EACF;AAEA,aAAW,OAAO,QAAQ;AAC5B;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/form/PhoneInput/countries.ts"],"sourcesContent":["import type { CountryCode } from 'libphonenumber-js';\n\nimport type { CountryData } from './PhoneInput.types';\n\n// Dial codes and flags for the countries the input offers, sorted by name.\nexport const countries: CountryData[] = [\n { code: 'US' as CountryCode, name: 'United States', dial: '+1', flag: '🇺🇸' },\n { code: 'GB' as CountryCode, name: 'United Kingdom', dial: '+44', flag: '🇬🇧' },\n { code: 'CA' as CountryCode, name: 'Canada', dial: '+1', flag: '🇨🇦' },\n { code: 'AU' as CountryCode, name: 'Australia', dial: '+61', flag: '🇦🇺' },\n { code: 'DE' as CountryCode, name: 'Germany', dial: '+49', flag: '🇩🇪' },\n { code: 'FR' as CountryCode, name: 'France', dial: '+33', flag: '🇫🇷' },\n { code: 'IT' as CountryCode, name: 'Italy', dial: '+39', flag: '🇮🇹' },\n { code: 'ES' as CountryCode, name: 'Spain', dial: '+34', flag: '🇪🇸' },\n { code: 'NL' as CountryCode, name: 'Netherlands', dial: '+31', flag: '🇳🇱' },\n { code: 'JP' as CountryCode, name: 'Japan', dial: '+81', flag: '🇯🇵' },\n { code: 'CN' as CountryCode, name: 'China', dial: '+86', flag: '🇨🇳' },\n { code: 'IN' as CountryCode, name: 'India', dial: '+91', flag: '🇮🇳' },\n { code: 'BR' as CountryCode, name: 'Brazil', dial: '+55', flag: '🇧🇷' },\n { code: 'MX' as CountryCode, name: 'Mexico', dial: '+52', flag: '🇲🇽' },\n { code: 'KR' as CountryCode, name: 'South Korea', dial: '+82', flag: '🇰🇷' },\n { code: 'SE' as CountryCode, name: 'Sweden', dial: '+46', flag: '🇸🇪' },\n { code: 'NO' as CountryCode, name: 'Norway', dial: '+47', flag: '🇳🇴' },\n { code: 'DK' as CountryCode, name: 'Denmark', dial: '+45', flag: '🇩🇰' },\n { code: 'CH' as CountryCode, name: 'Switzerland', dial: '+41', flag: '🇨🇭' },\n { code: 'AT' as CountryCode, name: 'Austria', dial: '+43', flag: '🇦🇹' },\n { code: 'BE' as CountryCode, name: 'Belgium', dial: '+32', flag: '🇧🇪' },\n { code: 'FI' as CountryCode, name: 'Finland', dial: '+358', flag: '🇫🇮' },\n { code: 'IE' as CountryCode, name: 'Ireland', dial: '+353', flag: '🇮🇪' },\n { code: 'PT' as CountryCode, name: 'Portugal', dial: '+351', flag: '🇵🇹' },\n { code: 'GR' as CountryCode, name: 'Greece', dial: '+30', flag: '🇬🇷' },\n { code: 'PL' as CountryCode, name: 'Poland', dial: '+48', flag: '🇵🇱' },\n { code: 'CZ' as CountryCode, name: 'Czech Republic', dial: '+420', flag: '🇨🇿' },\n { code: 'HU' as CountryCode, name: 'Hungary', dial: '+36', flag: '🇭🇺' },\n { code: 'RU' as CountryCode, name: 'Russia', dial: '+7', flag: '🇷🇺' },\n { code: 'ZA' as CountryCode, name: 'South Africa', dial: '+27', flag: '🇿🇦' },\n { code: 'EG' as CountryCode, name: 'Egypt', dial: '+20', flag: '🇪🇬' },\n { code: 'NG' as CountryCode, name: 'Nigeria', dial: '+234', flag: '🇳🇬' },\n { code: 'KE' as CountryCode, name: 'Kenya', dial: '+254', flag: '🇰🇪' },\n { code: 'AR' as CountryCode, name: 'Argentina', dial: '+54', flag: '🇦🇷' },\n { code: 'CL' as CountryCode, name: 'Chile', dial: '+56', flag: '🇨🇱' },\n { code: 'CO' as CountryCode, name: 'Colombia', dial: '+57', flag: '🇨🇴' },\n { code: 'PE' as CountryCode, name: 'Peru', dial: '+51', flag: '🇵🇪' },\n { code: 'MY' as CountryCode, name: 'Malaysia', dial: '+60', flag: '🇲🇾' },\n { code: 'SG' as CountryCode, name: 'Singapore', dial: '+65', flag: '🇸🇬' },\n { code: 'TH' as CountryCode, name: 'Thailand', dial: '+66', flag: '🇹🇭' },\n { code: 'VN' as CountryCode, name: 'Vietnam', dial: '+84', flag: '🇻🇳' },\n { code: 'PH' as CountryCode, name: 'Philippines', dial: '+63', flag: '🇵🇭' },\n { code: 'ID' as CountryCode, name: 'Indonesia', dial: '+62', flag: '🇮🇩' },\n { code: 'TR' as CountryCode, name: 'Turkey', dial: '+90', flag: '🇹🇷' },\n { code: 'IL' as CountryCode, name: 'Israel', dial: '+972', flag: '🇮🇱' },\n { code: 'AE' as CountryCode, name: 'United Arab Emirates', dial: '+971', flag: '🇦🇪' },\n { code: 'SA' as CountryCode, name: 'Saudi Arabia', dial: '+966', flag: '🇸🇦' },\n].sort((a, b) => a.name.localeCompare(b.name));\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/feedback/StackedModal/StackedModal.parts.tsx"],"sourcesContent":["import ChevronLeftIcon from '@mui/icons-material/ChevronLeft';\nimport CloseIcon from '@mui/icons-material/Close';\nimport Box from '@mui/material/Box/index.js';\nimport CircularProgress from '@mui/material/CircularProgress/index.js';\nimport DialogActions from '@mui/material/DialogActions/index.js';\nimport DialogContent from '@mui/material/DialogContent/index.js';\nimport DialogTitle from '@mui/material/DialogTitle/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport Skeleton from '@mui/material/Skeleton/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { styled, useTheme } from '@mui/material/styles/index.js';\nimport type { ElementType, FC, ReactNode } from 'react';\nimport React from 'react';\nimport { rem } from '../../../tokens/relative';\nimport { safeAreaBottom } from '../../../utils/viewport';\nimport {\n loadingOverlayStyles,\n modalContentStyles,\n titleLeftStyles,\n titleRightStyles,\n titleStyles,\n} from './StackedModal.styles';\n\n// `component` typed through: the bar is a `div` when it holds a title (`ModalHeader`).\nconst StyledDialogTitle = styled(DialogTitle, {\n shouldForwardProp: (prop) => prop !== 'rtl',\n})<{ rtl?: boolean; component?: ElementType }>(({ theme, rtl }) => titleStyles(theme, rtl));\n\nconst DialogTitleLeft = styled(Box)(({ theme }) => titleLeftStyles(theme));\nconst DialogTitleRight = styled(Box)(({ theme }) => titleRightStyles(theme));\nconst LoadingOverlay = styled(Box)(({ theme }) => loadingOverlayStyles(theme));\n\n/**\n * The padded content wrapper callers put inside a StackedModal. The explicit\n * `typeof DialogContent` annotation keeps its type nameable across package\n * boundaries (TS2742) now that it is re-exported from the barrel.\n */\nexport const StackedModalContent: typeof DialogContent = styled(DialogContent)(({ theme }) =>\n modalContentStyles(theme),\n) as typeof DialogContent;\n\n/** Sub-element test IDs derive from the modal's own, or stay off when it has none. */\nexport const testId = (base: string | undefined, suffix: string): string | undefined =>\n base ? `${base}-${suffix}` : undefined;\n\n/**\n * A wrapper marking the subtree that should render as modal actions — the\n * StackedModal pulls it out of `children` and places it by device.\n */\nexport const StackedModalActions: FC<{ children?: ReactNode }> = ({ children }) => <>{children}</>;\n\n/** Separates the `StackedModalActions` subtree from the rest of the content. */\nconst splitModalChildren = (children: ReactNode): { content: ReactNode; actions: ReactNode } => {\n let actions: ReactNode = null;\n\n React.Children.forEach(children, (child) => {\n if (React.isValidElement<{ children?: ReactNode }>(child) && child.type === StackedModalActions) {\n actions = child.props.children;\n }\n });\n\n const content = React.Children.toArray(children).filter(\n (child) => !(React.isValidElement(child) && child.type === StackedModalActions),\n );\n\n return { content, actions };\n};\n\n/**\n * Works out what renders where: a `StackedModalActions` child wins over the\n * `actions` prop, and on phones those actions move out of the header into a\n * pinned bottom bar.\n */\nexport const resolveModalContent = (\n children: ReactNode,\n actions: ReactNode,\n isMobile: boolean,\n): {\n content: ReactNode;\n modalActions: ReactNode;\n headerActions: ReactNode;\n hasMobileActions: boolean;\n} => {\n const { content, actions: childActions } = splitModalChildren(children);\n const modalActions = childActions ?? actions;\n return {\n content,\n modalActions,\n headerActions: isMobile ? null : modalActions,\n hasMobileActions: Boolean(isMobile && modalActions),\n };\n};\n\n/** The panel's own ARIA ids, unless the caller wired it to its own labels. */\nexport const modalAriaIds = (\n modalId: string,\n ariaLabelledBy?: string,\n ariaDescribedBy?: string,\n): { titleId: string; descId: string } => ({\n titleId: ariaLabelledBy || `modal-title-${modalId}`,\n descId: ariaDescribedBy || `modal-desc-${modalId}`,\n});\n\nexport const ModalLoadingOverlay: FC<{ loadingText?: string; dataTestId?: string }> = ({\n loadingText,\n dataTestId,\n}) => {\n const theme = useTheme();\n return (\n <LoadingOverlay data-testid={testId(dataTestId, 'loading-overlay')}>\n <CircularProgress size={rem(theme, 40)} data-testid={testId(dataTestId, 'loading-spinner')} />\n {loadingText && (\n <Typography variant=\"body2\" sx={{ mt: 2 }} data-testid={testId(dataTestId, 'loading-text')}>\n {loadingText}\n </Typography>\n )}\n </LoadingOverlay>\n );\n};\n\ninterface ModalHeaderProps {\n titleId: string;\n navigationTitle?: ReactNode;\n /** Deeper than the first panel, so the leading button goes back instead of closing. */\n canGoBack: boolean;\n onBack: () => void;\n /** The back arrow's accessible name — it carries a glyph only. REQUIRED. */\n backLabel: string;\n onClose: () => void;\n /** Renders the bar without its ✕ — the panel's content owns the dismiss. */\n hideClose?: boolean;\n /** Header actions — desktop only; on phones they move to the footer. */\n headerActions?: ReactNode;\n rtl?: boolean;\n dataTestId?: string;\n}\n\n/**\n * The bar's leading control: back at depth ≥2, otherwise close — and nothing at\n * all when the panel's content carries its own ✕ (`hideClose`).\n */\nconst HeaderLeadingButton: FC<\n Pick<\n ModalHeaderProps,\n 'canGoBack' | 'onBack' | 'backLabel' | 'onClose' | 'hideClose' | 'rtl' | 'dataTestId'\n >\n> = ({ canGoBack, onBack, backLabel, onClose, hideClose, rtl, dataTestId }) => {\n if (canGoBack) {\n return (\n <IconButton\n edge=\"start\"\n color=\"inherit\"\n onClick={onBack}\n aria-label={backLabel}\n size=\"small\"\n sx={{ transform: rtl ? 'rotate(180deg)' : 'none' }}\n data-testid={testId(dataTestId, 'back-button')}\n >\n <ChevronLeftIcon />\n </IconButton>\n );\n }\n if (hideClose) return null;\n return (\n <IconButton\n edge=\"start\"\n color=\"inherit\"\n onClick={onClose}\n aria-label=\"close\"\n size=\"small\"\n data-testid={testId(dataTestId, 'close-button')}\n >\n <CloseIcon />\n </IconButton>\n );\n};\n\nexport const ModalHeader: FC<ModalHeaderProps> = ({\n titleId,\n navigationTitle,\n canGoBack,\n onBack,\n onClose,\n hideClose,\n backLabel,\n headerActions,\n rtl,\n dataTestId,\n}) => (\n // The BAR is not a heading: it holds the ✕ or back button and the header\n // actions. The title inside it is the panel's one heading and carries the id\n // the dialog's `aria-labelledby` names, so the dialog is named by the title\n // alone — not \"close Title Save\" — and a screen reader hears it once.\n //\n // The bar's id is stated, never left to MUI: `DialogTitle` falls back to the\n // Dialog's `aria-labelledby` and would claim the title's id a second time.\n // With NO title the bar is drawn exactly as it always was — MUI's own `h2`,\n // holding the id — so an untitled panel keeps its markup and its name.\n <StyledDialogTitle\n component={navigationTitle ? 'div' : 'h2'}\n id={navigationTitle ? `${titleId}-bar` : titleId}\n rtl={rtl}\n data-testid={testId(dataTestId, 'header')}\n >\n <DialogTitleLeft>\n <HeaderLeadingButton\n canGoBack={canGoBack}\n onBack={onBack}\n backLabel={backLabel}\n onClose={onClose}\n hideClose={hideClose}\n rtl={rtl}\n dataTestId={dataTestId}\n />\n {navigationTitle && (\n <Typography\n id={titleId}\n variant=\"h6\"\n component=\"h2\"\n noWrap\n sx={{ ml: canGoBack || !hideClose ? 1 : 0 }}\n data-testid={testId(dataTestId, 'title')}\n >\n {navigationTitle}\n </Typography>\n )}\n </DialogTitleLeft>\n <DialogTitleRight data-testid={testId(dataTestId, 'header-actions')}>\n {headerActions}\n </DialogTitleRight>\n </StyledDialogTitle>\n);\n\nconst ContentSkeleton: FC = () => {\n const theme = useTheme();\n return (\n <Box sx={{ p: 3 }}>\n <Skeleton variant=\"text\" width=\"60%\" height={rem(theme, 32)} />\n <Skeleton variant=\"text\" width=\"100%\" />\n <Skeleton variant=\"text\" width=\"100%\" />\n <Skeleton variant=\"rectangular\" height={rem(theme, 200)} sx={{ mt: 2 }} />\n </Box>\n );\n};\n\ninterface ModalBodyProps {\n descId: string;\n showSkeleton: boolean;\n /** When there is no action bar, the body is what reaches the bottom of the panel. */\n endsPanel: boolean;\n dataTestId?: string;\n children?: ReactNode;\n}\n\nexport const ModalBody: FC<ModalBodyProps> = ({\n descId,\n showSkeleton,\n endsPanel,\n dataTestId,\n children,\n}) => (\n <Box\n id={descId}\n sx={{\n position: 'relative',\n flex: 1,\n overflow: 'auto',\n // iOS momentum scrolling, and no scroll-chaining to the page behind —\n // without `contain`, an overscroll at the end of the list rubber-bands the\n // whole panel and springs back before the last row can be tapped.\n WebkitOverflowScrolling: 'touch',\n overscrollBehavior: 'contain',\n // The content itself ends the panel when there is no action bar, so it has\n // to clear the home indicator on its own.\n ...(endsPanel ? safeAreaBottom(0) : {}),\n }}\n data-testid={testId(dataTestId, 'content')}\n >\n {showSkeleton ? <ContentSkeleton /> : children}\n </Box>\n);\n\n/** The phone-only pinned action bar; on desktop the actions live in the header. */\nexport const ModalFooter: FC<{ dataTestId?: string; children?: ReactNode }> = ({\n dataTestId,\n children,\n}) => (\n <DialogActions\n sx={{\n borderTop: (theme) => `1px solid ${theme.palette.divider}`,\n padding: 2,\n // Never let the action row sit under the iOS home indicator.\n flexShrink: 0,\n ...safeAreaBottom(16),\n }}\n data-testid={testId(dataTestId, 'footer')}\n >\n {children}\n </DialogActions>\n);\n\ninterface PanelContentsProps extends ModalHeaderProps {\n /** Draw no bar — already resolved: `hideHeader` on the ROOT panel only. */\n hideHeader?: boolean;\n showSkeleton: boolean;\n loadingText?: string;\n descId: string;\n content: ReactNode;\n /** The resolved actions, already placed in the header or destined for the footer. */\n modalActions: ReactNode;\n hasMobileActions: boolean;\n}\n\n/** Everything inside the sliding panel: the loading veil, header, body and action bar. */\nexport const ModalPanelContents: FC<PanelContentsProps> = ({\n showSkeleton,\n loadingText,\n descId,\n content,\n modalActions,\n hasMobileActions,\n hideHeader,\n ...header\n}) => (\n <>\n {showSkeleton && (\n <ModalLoadingOverlay loadingText={loadingText} dataTestId={header.dataTestId} />\n )}\n {!hideHeader && <ModalHeader {...header} />}\n <ModalBody\n descId={descId}\n showSkeleton={showSkeleton}\n endsPanel={!hasMobileActions}\n dataTestId={header.dataTestId}\n >\n {content}\n </ModalBody>\n {hasMobileActions && (\n <ModalFooter dataTestId={header.dataTestId}>{modalActions}</ModalFooter>\n )}\n </>\n);\n"],"mappings":";;;;;;;;;;;;;;;AAAA,OAAO,qBAAqB;AAC5B,OAAO,eAAe;AACtB,OAAO,SAAS;AAChB,OAAO,sBAAsB;AAC7B,OAAO,mBAAmB;AAC1B,OAAO,mBAAmB;AAC1B,OAAO,iBAAiB;AACxB,OAAO,gBAAgB;AACvB,OAAO,cAAc;AACrB,OAAO,gBAAgB;AACvB,SAAS,QAAQ,gBAAgB;AAEjC,OAAO,WAAW;AAqCiE,wBA4D/E,YA5D+E;AAzBnF,IAAM,oBAAoB,OAAO,aAAa;AAAA,EAC5C,mBAAmB,CAAC,SAAS,SAAS;AACxC,CAAC,EAA8C,CAAC,EAAE,OAAO,IAAI,MAAM,YAAY,OAAO,GAAG,CAAC;AAE1F,IAAM,kBAAkB,OAAO,GAAG,EAAE,CAAC,EAAE,MAAM,MAAM,gBAAgB,KAAK,CAAC;AACzE,IAAM,mBAAmB,OAAO,GAAG,EAAE,CAAC,EAAE,MAAM,MAAM,iBAAiB,KAAK,CAAC;AAC3E,IAAM,iBAAiB,OAAO,GAAG,EAAE,CAAC,EAAE,MAAM,MAAM,qBAAqB,KAAK,CAAC;AAOtE,IAAM,sBAA4C,OAAO,aAAa;AAAA,EAAE,CAAC,EAAE,MAAM,MACtF,mBAAmB,KAAK;AAC1B;AAGO,IAAM,SAAS,CAAC,MAA0B,WAC/C,OAAO,GAAG,IAAI,IAAI,MAAM,KAAK;AAMxB,IAAM,sBAAoD,CAAC,EAAE,SAAS,MAAM,gCAAG,UAAS;AAG/F,IAAM,qBAAqB,CAAC,aAAoE;AAC9F,MAAI,UAAqB;AAEzB,QAAM,SAAS,QAAQ,UAAU,CAAC,UAAU;AAC1C,QAAI,MAAM,eAAyC,KAAK,KAAK,MAAM,SAAS,qBAAqB;AAC/F,gBAAU,MAAM,MAAM;AAAA,IACxB;AAAA,EACF,CAAC;AAED,QAAM,UAAU,MAAM,SAAS,QAAQ,QAAQ,EAAE;AAAA,IAC/C,CAAC,UAAU,EAAE,MAAM,eAAe,KAAK,KAAK,MAAM,SAAS;AAAA,EAC7D;AAEA,SAAO,EAAE,SAAS,QAAQ;AAC5B;AAOO,IAAM,sBAAsB,CACjC,UACA,SACA,aAMG;AACH,QAAM,EAAE,SAAS,SAAS,aAAa,IAAI,mBAAmB,QAAQ;AACtE,QAAM,eAAe,gBAAgB;AACrC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,eAAe,WAAW,OAAO;AAAA,IACjC,kBAAkB,QAAQ,YAAY,YAAY;AAAA,EACpD;AACF;AAGO,IAAM,eAAe,CAC1B,SACA,gBACA,qBACyC;AAAA,EACzC,SAAS,kBAAkB,eAAe,OAAO;AAAA,EACjD,QAAQ,mBAAmB,cAAc,OAAO;AAClD;AAEO,IAAM,sBAAyE,CAAC;AAAA,EACrF;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,SACE,qBAAC,kBAAe,eAAa,OAAO,YAAY,iBAAiB,GAC/D;AAAA,wBAAC,oBAAiB,MAAM,IAAI,OAAO,EAAE,GAAG,eAAa,OAAO,YAAY,iBAAiB,GAAG;AAAA,IAC3F,eACC,oBAAC,cAAW,SAAQ,SAAQ,IAAI,EAAE,IAAI,EAAE,GAAG,eAAa,OAAO,YAAY,cAAc,GACtF,uBACH;AAAA,KAEJ;AAEJ;AAuBA,IAAM,sBAKF,CAAC,EAAE,WAAW,QAAQ,WAAW,SAAS,WAAW,KAAK,WAAW,MAAM;AAC7E,MAAI,WAAW;AACb,WACE;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,OAAM;AAAA,QACN,SAAS;AAAA,QACT,cAAY;AAAA,QACZ,MAAK;AAAA,QACL,IAAI,EAAE,WAAW,MAAM,mBAAmB,OAAO;AAAA,QACjD,eAAa,OAAO,YAAY,aAAa;AAAA,QAE7C,8BAAC,mBAAgB;AAAA;AAAA,IACnB;AAAA,EAEJ;AACA,MAAI,UAAW,QAAO;AACtB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,OAAM;AAAA,MACN,SAAS;AAAA,MACT,cAAW;AAAA,MACX,MAAK;AAAA,MACL,eAAa,OAAO,YAAY,cAAc;AAAA,MAE9C,8BAAC,aAAU;AAAA;AAAA,EACb;AAEJ;AAEO,IAAM,cAAoC,CAAC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,kBAAkB,QAAQ;AAAA,MACrC,IAAI,kBAAkB,GAAG,OAAO,SAAS;AAAA,MACzC;AAAA,MACA,eAAa,OAAO,YAAY,QAAQ;AAAA,MAExC;AAAA,6BAAC,mBACC;AAAA;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA;AAAA,UACF;AAAA,UACC,mBACC;AAAA,YAAC;AAAA;AAAA,cACC,IAAI;AAAA,cACJ,SAAQ;AAAA,cACR,WAAU;AAAA,cACV,QAAM;AAAA,cACN,IAAI,EAAE,IAAI,aAAa,CAAC,YAAY,IAAI,EAAE;AAAA,cAC1C,eAAa,OAAO,YAAY,OAAO;AAAA,cAEtC;AAAA;AAAA,UACH;AAAA,WAEJ;AAAA,QACA,oBAAC,oBAAiB,eAAa,OAAO,YAAY,gBAAgB,GAC/D,yBACH;AAAA;AAAA;AAAA,EACF;AAAA;AAGF,IAAM,kBAAsB,MAAM;AAChC,QAAM,QAAQ,SAAS;AACvB,SACE,qBAAC,OAAI,IAAI,EAAE,GAAG,EAAE,GACd;AAAA,wBAAC,YAAS,SAAQ,QAAO,OAAM,OAAM,QAAQ,IAAI,OAAO,EAAE,GAAG;AAAA,IAC7D,oBAAC,YAAS,SAAQ,QAAO,OAAM,QAAO;AAAA,IACtC,oBAAC,YAAS,SAAQ,QAAO,OAAM,QAAO;AAAA,IACtC,oBAAC,YAAS,SAAQ,eAAc,QAAQ,IAAI,OAAO,GAAG,GAAG,IAAI,EAAE,IAAI,EAAE,GAAG;AAAA,KAC1E;AAEJ;AAWO,IAAM,YAAgC,CAAC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MACE;AAAA,EAAC;AAAA;AAAA,IACC,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,UAAU;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AAAA;AAAA;AAAA;AAAA,MAIV,yBAAyB;AAAA,MACzB,oBAAoB;AAAA;AAAA;AAAA,MAGpB,GAAI,YAAY,eAAe,CAAC,IAAI,CAAC;AAAA,IACvC;AAAA,IACA,eAAa,OAAO,YAAY,SAAS;AAAA,IAExC,yBAAe,oBAAC,mBAAgB,IAAK;AAAA;AACxC;AAIK,IAAM,cAAiE,CAAC;AAAA,EAC7E;AAAA,EACA;AACF,MACE;AAAA,EAAC;AAAA;AAAA,IACC,IAAI;AAAA,MACF,WAAW,CAAC,UAAU,aAAa,MAAM,QAAQ,OAAO;AAAA,MACxD,SAAS;AAAA;AAAA,MAET,YAAY;AAAA,MACZ,GAAG,eAAe,EAAE;AAAA,IACtB;AAAA,IACA,eAAa,OAAO,YAAY,QAAQ;AAAA,IAEvC;AAAA;AACH;AAgBK,IAAM,qBAA6C,CAAC;AAAA,EACzD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MACE,iCACG;AAAA,kBACC,oBAAC,uBAAoB,aAA0B,YAAY,OAAO,YAAY;AAAA,EAE/E,CAAC,cAAc,oBAAC,eAAa,GAAG,QAAQ;AAAA,EACzC;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,WAAW,CAAC;AAAA,MACZ,YAAY,OAAO;AAAA,MAElB;AAAA;AAAA,EACH;AAAA,EACC,oBACC,oBAAC,eAAY,YAAY,OAAO,YAAa,wBAAa;AAAA,GAE9D;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/form/PhoneInput/PhoneInput.tsx"],"sourcesContent":["import ArrowDropDown from '@mui/icons-material/ArrowDropDown';\nimport PhoneIcon from '@mui/icons-material/Phone';\nimport Box from '@mui/material/Box/index.js';\nimport InputAdornment from '@mui/material/InputAdornment/index.js';\nimport ListItemIcon from '@mui/material/ListItemIcon/index.js';\nimport ListItemText from '@mui/material/ListItemText/index.js';\nimport Menu from '@mui/material/Menu/index.js';\nimport MenuItem from '@mui/material/MenuItem/index.js';\nimport TextField from '@mui/material/TextField/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, styled, useTheme } from '@mui/material/styles/index.js';\nimport type { FC} from 'react';\nimport React, { } from 'react';\n\nimport { countries } from './countries';\nimport { usePhoneInput } from './PhoneInput.hooks';\nimport type { CountryData,PhoneInputProps } from './PhoneInput.types';\nimport type { PhoneInputCopy } from '../../../copy';\n\nimport { fieldEdge } from '../../../tokens/field-edge';\nimport { fieldRadius } from '../../../tokens/field-radius';\nimport { fieldControlStyles, fieldTextFieldStyles } from '../../../tokens/field-height';\nimport { rem, sxRem } from '../../../tokens/relative';\n\n// Country data with expanded support\n\n// Styled components\n/** The plain variant: MUI's own field, on the theme's field radius. */\nconst FieldTextField = styled(TextField)(({ theme }) => fieldTextFieldStyles(theme));\n\nconst GlassTextField = styled(TextField)(({ theme }) => ({\n ...fieldControlStyles(theme),\n '& .MuiOutlinedInput-root': {\n borderRadius: fieldRadius(theme),\n background: `linear-gradient(135deg, ${alpha(theme.palette.background.paper, 0.8)} 0%, ${alpha(theme.palette.background.paper, 0.6)} 100%)`,\n backdropFilter: `blur(${rem(theme, 10)})`,\n WebkitBackdropFilter: `blur(${rem(theme, 10)})`,\n border: `1px solid ${fieldEdge(theme)}`,\n transition: theme.transitions.create(['border-color', 'box-shadow', 'background']),\n '&:hover': {\n background: `linear-gradient(135deg, ${alpha(theme.palette.background.paper, 0.9)} 0%, ${alpha(theme.palette.background.paper, 0.7)} 100%)`,\n borderColor: theme.palette.primary.main },\n '&.Mui-focused': {\n background: theme.palette.background.paper,\n boxShadow: `0 0 0 ${rem(theme, 2)} ${alpha(theme.palette.primary.main, 0.25)}` },\n '& fieldset': {\n border: 'none' } },\n '& .MuiInputLabel-root': {\n '&.Mui-focused': {\n color: theme.palette.primary.main } } }));\n\nconst CountrySelector = styled(Box)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(0.5, 1),\n borderRadius: theme.shape.borderRadius,\n cursor: 'pointer',\n transition: theme.transitions.create(['background-color']),\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.08) } }));\n\nconst CountryMenu = styled(Menu)(({ theme }) => ({\n '& .MuiPaper-root': {\n background: `linear-gradient(135deg, ${alpha(theme.palette.background.paper, 0.98)} 0%, ${alpha(theme.palette.background.paper, 0.95)} 100%)`,\n backdropFilter: `blur(${rem(theme, 20)})`,\n WebkitBackdropFilter: `blur(${rem(theme, 20)})`,\n border: `1px solid ${alpha(theme.palette.divider, 0.18)}`,\n maxHeight: rem(theme, 400) } }));\n\n// Helper functions with enhanced validation\n// The text field itself with its two adornments. Split out so PhoneInput is\n// prop defaults, the hook call and composition.\nconst PhoneField: React.FC<{\n TextFieldComponent: React.ElementType;\n variant: PhoneInputProps['variant'];\n label?: React.ReactNode;\n placeholder?: string;\n value: string;\n validation: { hasError: boolean; helperText?: React.ReactNode };\n disabled: boolean;\n required: boolean;\n fullWidth: boolean;\n icon?: React.ReactNode;\n isValid: boolean;\n selectedCountry?: CountryData;\n anchorEl: HTMLElement | null;\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n onFocus: () => void;\n onBlur: () => void;\n onCountryOpen: (event: React.MouseEvent<HTMLElement>) => void;\n onCountryOpenViaKeyboard: (element: HTMLElement) => void;\n copy: PhoneInputCopy;\n}> = ({\n TextFieldComponent,\n copy,\n variant,\n label,\n placeholder,\n value,\n validation,\n disabled,\n required,\n fullWidth,\n icon,\n isValid,\n selectedCountry,\n anchorEl,\n onChange,\n onFocus,\n onBlur,\n onCountryOpen,\n onCountryOpenViaKeyboard }) => (\n <TextFieldComponent\n variant={variant === 'glass' ? 'outlined' : variant}\n label={label}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n onFocus={onFocus}\n onBlur={onBlur}\n error={validation.hasError}\n helperText={validation.helperText}\n disabled={disabled}\n required={required}\n fullWidth={fullWidth}\n type=\"tel\"\n data-testid=\"phone-input-field\"\n InputProps={{\n startAdornment: (\n <CountryAdornment\n selectCountryLabel={copy.selectCountry}\n country={selectedCountry}\n menuOpen={Boolean(anchorEl)}\n onOpen={onCountryOpen}\n onOpenViaKeyboard={onCountryOpenViaKeyboard}\n />\n ),\n endAdornment: <ValidityAdornment icon={icon} isValid={isValid} /> }}\n sx={{\n '& input': {\n letterSpacing: sxRem(0.5) } }}\n />\n);\n\nconst PHONE_INPUT_DEFAULTS = {\n variant: 'outlined',\n label: 'Phone Number',\n placeholder: 'Enter phone number',\n icon: <PhoneIcon />,\n defaultValue: '',\n countryCode: 'US',\n floating: false,\n error: false,\n disabled: false,\n required: false,\n fullWidth: true } satisfies Partial<PhoneInputProps>;\n\n// Drops explicitly-undefined props before the merge, so `prop={undefined}` falls\n// back to the default exactly as a destructuring default would. Eleven separate\n// destructuring defaults were most of this component's branch count.\nconst definedProps = (props: PhoneInputProps): Partial<PhoneInputProps> =>\n Object.fromEntries(\n Object.entries(props).filter(([, value]) => value !== undefined),\n ) as Partial<PhoneInputProps>;\n\nconst CountryAdornment: React.FC<{\n country?: CountryData;\n menuOpen: boolean;\n onOpen: (event: React.MouseEvent<HTMLElement>) => void;\n onOpenViaKeyboard: (element: HTMLElement) => void;\n selectCountryLabel: string;\n}> = ({ country, menuOpen, onOpen, onOpenViaKeyboard, selectCountryLabel }) => (\n <InputAdornment position=\"start\" data-testid=\"phone-input-start-adornment\">\n <CountrySelector\n onClick={onOpen}\n role=\"button\"\n aria-label={selectCountryLabel}\n aria-expanded={menuOpen}\n tabIndex={0}\n data-testid=\"country-selector\"\n onKeyDown={(e) => {\n if (e.key !== 'Enter' && e.key !== ' ') return;\n e.preventDefault();\n onOpenViaKeyboard(e.currentTarget as HTMLElement);\n }}\n >\n <Typography variant=\"h6\" component=\"span\" sx={{ mr: 0.5 }} data-testid=\"country-flag\">\n {country?.flag}\n </Typography>\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n sx={{ mr: 0.5 }}\n data-testid=\"country-dial-code\"\n >\n {country?.dial}\n </Typography>\n <ArrowDropDown fontSize=\"small\" data-testid=\"country-dropdown-icon\" />\n </CountrySelector>\n </InputAdornment>\n);\n\n// The trailing icon turns green once the number validates.\nconst ValidityAdornment: React.FC<{ icon?: React.ReactNode; isValid: boolean }> = ({\n icon,\n isValid }) => {\n const theme = useTheme();\n\n if (!icon) return null;\n\n return (\n <InputAdornment position=\"end\" data-testid=\"phone-input-end-adornment\">\n <Box\n sx={{\n color: isValid ? theme.palette.success.main : theme.palette.text.secondary,\n transition: 'color 0.3s ease' }}\n data-testid=\"phone-input-icon\"\n >\n {icon}\n </Box>\n </InputAdornment>\n );\n};\n\nconst CountryPicker: React.FC<{\n anchorEl: HTMLElement | null;\n selectedCode?: CountryData['code'];\n onClose: () => void;\n onSelect: (country: CountryData) => void;\n}> = ({ anchorEl, selectedCode, onClose, onSelect }) => {\n const theme = useTheme();\n\n return (\n <CountryMenu\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={onClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left' }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left' }}\n data-testid=\"country-menu\"\n >\n {countries.map((country) => (\n <MenuItem\n key={country.code}\n onClick={() => onSelect(country)}\n selected={country.code === selectedCode}\n data-testid={`country-option-${country.code}`}\n sx={{\n '&:hover': {\n background: `linear-gradient(135deg, ${alpha(theme.palette.primary.main, 0.1)} 0%, ${alpha(theme.palette.primary.main, 0.05)} 100%)` } }}\n >\n <ListItemIcon sx={{ minWidth: sxRem(36) }}>\n <Typography variant=\"h5\" component=\"span\">\n {country.flag}\n </Typography>\n </ListItemIcon>\n <ListItemText\n primary={country.name}\n secondary={country.dial}\n primaryTypographyProps={{ fontSize: rem(theme, 14.4) }}\n secondaryTypographyProps={{ fontSize: rem(theme, 12.8) }}\n />\n </MenuItem>\n ))}\n </CountryMenu>\n );\n};\n\n// The field shows an error either because the caller says so, or because what\n// has been typed does not validate and the user has moved on.\nconst resolveValidation = ({\n error,\n errorMessage,\n isValid,\n value,\n isFocused,\n helper,\n countryName,\n copy }: {\n error: boolean;\n errorMessage?: string;\n isValid: boolean;\n value: string;\n isFocused: boolean;\n helper?: React.ReactNode;\n countryName?: string;\n copy: PhoneInputCopy;\n}) => {\n const looksInvalid = !isValid && value !== '' && !isFocused;\n\n return {\n hasError: error || looksInvalid,\n helperText:\n errorMessage ||\n (looksInvalid ? copy.invalidNumber(countryName || copy.unknownCountry) : helper) };\n};\n\nexport const PhoneInput: FC<PhoneInputProps> = (props) => {\n const { copy } = props;\n const {\n variant,\n label,\n placeholder,\n icon,\n defaultValue,\n countryCode: initialCountryCode,\n floating,\n onChange,\n helper,\n error,\n errorMessage,\n disabled,\n required,\n fullWidth } = { ...PHONE_INPUT_DEFAULTS, ...definedProps(props) };\n const {\n value,\n selectedCountry,\n anchorEl,\n isValid,\n isFocused,\n setIsFocused,\n setAnchorEl,\n handleCountryClick,\n handleCountryClose,\n handleCountrySelect,\n handleChange,\n handleBlur } = usePhoneInput({ defaultValue, initialCountryCode, onChange });\n\n const validation = resolveValidation({\n error,\n errorMessage,\n isValid,\n value,\n isFocused,\n helper,\n countryName: selectedCountry?.name,\n copy });\n\n const TextFieldComponent = variant === 'glass' ? GlassTextField : FieldTextField;\n\n return (\n <Box data-testid=\"phone-input-container\">\n <PhoneField\n copy={copy}\n TextFieldComponent={TextFieldComponent}\n variant={variant}\n label={floating ? undefined : label}\n placeholder={placeholder}\n value={value}\n validation={validation}\n disabled={disabled}\n required={required}\n fullWidth={fullWidth}\n icon={icon}\n isValid={isValid}\n selectedCountry={selectedCountry}\n anchorEl={anchorEl}\n onChange={handleChange}\n onFocus={() => setIsFocused(true)}\n onBlur={handleBlur}\n onCountryOpen={handleCountryClick}\n onCountryOpenViaKeyboard={setAnchorEl}\n />\n\n <CountryPicker\n anchorEl={anchorEl}\n selectedCode={selectedCountry?.code}\n onClose={handleCountryClose}\n onSelect={handleCountrySelect}\n />\n </Box>\n );\n};\n\n// Export default\nexport default PhoneInput;\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/MapPreview/MapPreview.helpers.ts"],"sourcesContent":["import type { Theme } from '@mui/material/styles/index.js';\nimport { alpha } from '@mui/material/styles/index.js';\n\nimport { DEFAULT_ZOOM } from './MapPreview.constants';\nimport type { MapPreviewProps } from './MapPreview.types';\nimport { rem } from '../../../tokens/relative';\n\ntype MapDefaultedKeys =\n | 'markers'\n | 'marker'\n | 'interactive'\n | 'zoom'\n | 'mapType'\n | 'variant'\n | 'showControls'\n | 'showSearch'\n | 'searchPlaceholder'\n | 'showRoute'\n | 'heatmapData'\n | 'showHeatmap'\n | 'animated';\n\nexport type ResolvedMapPreviewProps = MapPreviewProps &\n Required<Pick<MapPreviewProps, MapDefaultedKeys>>;\n\nconst MAP_PREVIEW_DEFAULTS: Pick<MapPreviewProps, MapDefaultedKeys> = {\n markers: [],\n marker: true,\n interactive: false,\n zoom: DEFAULT_ZOOM,\n mapType: 'roadmap',\n variant: 'default',\n showControls: true,\n showSearch: false,\n searchPlaceholder: 'Search location...',\n showRoute: false,\n heatmapData: [],\n showHeatmap: false,\n animated: true,\n};\n\n// Strips explicitly-undefined props before the merge, so `prop={undefined}` still\n// falls back to the default exactly as a destructuring default would.\nconst definedProps = (props: MapPreviewProps): Partial<MapPreviewProps> =>\n Object.fromEntries(\n Object.entries(props).filter(([, value]) => value !== undefined),\n ) as Partial<MapPreviewProps>;\n\n// Applied as a merge rather than destructuring defaults, which would otherwise\n// put fourteen branches into the component's own complexity budget.\nexport const resolveMapPreviewProps = (props: MapPreviewProps): ResolvedMapPreviewProps =>\n ({ ...MAP_PREVIEW_DEFAULTS, ...definedProps(props) }) as ResolvedMapPreviewProps;\n\nexport const glassStyles = (variant: MapPreviewProps['variant'], theme: Theme) =>\n variant === 'glass'\n ? {\n background: alpha(theme.palette.background.paper, 0.7),\n backdropFilter: `blur(${rem(theme, 20)})`,\n WebkitBackdropFilter: `blur(${rem(theme, 20)})`,\n border: `1px solid ${alpha(theme.palette.divider, 0.1)}`,\n }\n : {};\n"],"mappings":";;;;;;;;AACA,SAAS,aAAa;AAwBtB,IAAM,uBAAgE;AAAA,EACpE,SAAS,CAAC;AAAA,EACV,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,EACT,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,WAAW;AAAA,EACX,aAAa,CAAC;AAAA,EACd,aAAa;AAAA,EACb,UAAU;AACZ;AAIA,IAAM,eAAe,CAAC,UACpB,OAAO;AAAA,EACL,OAAO,QAAQ,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,UAAU,MAAS;AACjE;AAIK,IAAM,yBAAyB,CAAC,WACpC,EAAE,GAAG,sBAAsB,GAAG,aAAa,KAAK,EAAE;AAE9C,IAAM,cAAc,CAAC,SAAqC,UAC/D,YAAY,UACR;AAAA,EACE,YAAY,MAAM,MAAM,QAAQ,WAAW,OAAO,GAAG;AAAA,EACrD,gBAAgB,QAAQ,IAAI,OAAO,EAAE,CAAC;AAAA,EACtC,sBAAsB,QAAQ,IAAI,OAAO,EAAE,CAAC;AAAA,EAC5C,QAAQ,aAAa,MAAM,MAAM,QAAQ,SAAS,GAAG,CAAC;AACxD,IACA,CAAC;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/navigation/CommandPalette/CommandPalette.helpers.ts"],"sourcesContent":["import type Fuse from 'fuse.js';\nimport type React from 'react';\n\nimport type { PaletteCommand } from './CommandPalette.types';\n\n// Without a query the list is the recent commands first, then the rest; with one\n// it is whatever fuzzy search returns.\nexport const filterCommands = ({\n commands,\n searchQuery,\n fuse,\n showRecent,\n recentCommandIds,\n}: {\n commands: PaletteCommand[];\n searchQuery: string;\n fuse: Fuse<PaletteCommand>;\n showRecent?: boolean;\n recentCommandIds: string[];\n}): PaletteCommand[] => {\n if (searchQuery) {\n return fuse.search(searchQuery).map((result) => result.item);\n }\n\n if (!showRecent || recentCommandIds.length === 0) {\n return commands;\n }\n\n const recent = recentCommandIds\n .map((id) => commands.find((command) => command.id === id))\n .filter(Boolean) as PaletteCommand[];\n\n return [...recent, ...commands.filter((command) => !recentCommandIds.includes(command.id))];\n};\n\nexport const groupByCategory = (commands: PaletteCommand[]): Record<string, PaletteCommand[]> => {\n const groups: Record<string, PaletteCommand[]> = {};\n\n for (const command of commands) {\n const category = command.category || 'General';\n groups[category] = groups[category] ?? [];\n groups[category].push(command);\n }\n\n return groups;\n};\n\n// Arrow keys move the highlight, Enter runs the highlighted command, Escape\n// closes. Built outside the effect so the switch does not count against the\n// component body.\nexport const createPaletteKeyHandler = ({\n commandCount,\n selectedCommand,\n setSelectedIndex,\n executeCommand,\n onClose,\n}: {\n commandCount: number;\n selectedCommand?: PaletteCommand;\n setSelectedIndex: React.Dispatch<React.SetStateAction<number>>;\n executeCommand: (command: PaletteCommand) => void;\n onClose: () => void;\n}) => (event: globalThis.KeyboardEvent) => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n setSelectedIndex((prev) => (prev < commandCount - 1 ? prev + 1 : prev));\n break;\n case 'ArrowUp':\n event.preventDefault();\n setSelectedIndex((prev) => (prev > 0 ? prev - 1 : prev));\n break;\n case 'Enter':\n event.preventDefault();\n if (selectedCommand) executeCommand(selectedCommand);\n break;\n case 'Escape':\n event.preventDefault();\n onClose();\n break;\n }\n};\n"],"mappings":";AAOO,IAAM,iBAAiB,CAAC;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAMwB;AACtB,MAAI,aAAa;AACf,WAAO,KAAK,OAAO,WAAW,EAAE,IAAI,CAAC,WAAW,OAAO,IAAI;AAAA,EAC7D;AAEA,MAAI,CAAC,cAAc,iBAAiB,WAAW,GAAG;AAChD,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,iBACZ,IAAI,CAAC,OAAO,SAAS,KAAK,CAAC,YAAY,QAAQ,OAAO,EAAE,CAAC,EACzD,OAAO,OAAO;AAEjB,SAAO,CAAC,GAAG,QAAQ,GAAG,SAAS,OAAO,CAAC,YAAY,CAAC,iBAAiB,SAAS,QAAQ,EAAE,CAAC,CAAC;AAC5F;AAEO,IAAM,kBAAkB,CAAC,aAAiE;AAC/F,QAAM,SAA2C,CAAC;AAElD,aAAW,WAAW,UAAU;AAC9B,UAAM,WAAW,QAAQ,YAAY;AACrC,WAAO,QAAQ,IAAI,OAAO,QAAQ,KAAK,CAAC;AACxC,WAAO,QAAQ,EAAE,KAAK,OAAO;AAAA,EAC/B;AAEA,SAAO;AACT;AAKO,IAAM,0BAA0B,CAAC;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAMM,CAAC,UAAoC;AACzC,UAAQ,MAAM,KAAK;AAAA,IACjB,KAAK;AACH,YAAM,eAAe;AACrB,uBAAiB,CAAC,SAAU,OAAO,eAAe,IAAI,OAAO,IAAI,IAAK;AACtE;AAAA,IACF,KAAK;AACH,YAAM,eAAe;AACrB,uBAAiB,CAAC,SAAU,OAAO,IAAI,OAAO,IAAI,IAAK;AACvD;AAAA,IACF,KAAK;AACH,YAAM,eAAe;AACrB,UAAI,gBAAiB,gBAAe,eAAe;AACnD;AAAA,IACF,KAAK;AACH,YAAM,eAAe;AACrB,cAAQ;AACR;AAAA,EACJ;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/navigation/NavigationMenu/NavigationStandardBody.tsx"],"sourcesContent":["import MenuIcon from '@mui/icons-material/Menu';\nimport Box from '@mui/material/Box/index.js';\nimport Divider from '@mui/material/Divider/index.js';\nimport Fade from '@mui/material/Fade/index.js';\nimport ListItemIcon from '@mui/material/ListItemIcon/index.js';\nimport ListItemText from '@mui/material/ListItemText/index.js';\nimport Paper from '@mui/material/Paper/index.js';\nimport { alpha } from '@mui/material/styles/index.js';\nimport type { FC, ReactNode } from 'react';\nimport React from 'react';\n\nimport { CollapseToggle, LogoBar, MenuList } from './NavigationMenu.shell';\nimport { slideIn } from './NavigationMenu.styles';\nimport type { NavigationMenuItem } from './NavigationMenu.types';\nimport { renderMenuItem } from './NavigationMenuItem';\nimport { sxRem } from '../../../tokens/relative';\n\nconst DividerRule: FC = () => (\n <Divider\n sx={{\n my: 1,\n opacity: 0.5,\n background: (theme) =>\n `linear-gradient(90deg, transparent 0%, ${alpha(theme.palette.divider, 0.5)} 50%, transparent 100%)`,\n }}\n />\n);\n\nconst VerticalLogo: FC<{ logo: ReactNode; collapsed: boolean }> = ({ logo, collapsed }) => (\n <LogoBar>\n {collapsed ? (\n <Box sx={{ display: 'flex', justifyContent: 'center' }}>\n <MenuIcon />\n </Box>\n ) : (\n logo\n )}\n </LogoBar>\n);\n\nconst CollapseControl: FC<{ collapsed: boolean; onToggle: () => void }> = ({\n collapsed,\n onToggle,\n}) => (\n <CollapseToggle onClick={onToggle}>\n <ListItemIcon sx={{ minWidth: collapsed ? 0 : sxRem(40), justifyContent: 'center' }}>\n <MenuIcon />\n </ListItemIcon>\n {!collapsed && <ListItemText primary=\"Collapse\" />}\n </CollapseToggle>\n);\n\nconst MenuItems: FC<{\n items: NavigationMenuItem[];\n variant: string;\n size: string;\n collapsed: boolean;\n minimal: boolean;\n showDividers: boolean;\n}> = ({ items, variant, size, collapsed, minimal, showDividers }) => (\n <MenuList variant={variant} size={size}>\n {items.map((item, index) => (\n <React.Fragment key={item.id}>\n <Box\n sx={{\n // Staggered so the list fills in rather than appearing at once.\n animation: (theme) => `${slideIn(theme)} 0.4s ease-out`,\n animationDelay: `${index * 0.05}s`,\n animationFillMode: 'both',\n }}\n >\n {renderMenuItem(item, variant, size, collapsed, minimal, 0)}\n </Box>\n {showDividers && index < items.length - 1 && <DividerRule />}\n </React.Fragment>\n ))}\n </MenuList>\n);\n\nconst EndPanel: FC<{ children: ReactNode }> = ({ children }) => (\n <Fade in timeout={600}>\n <Box\n sx={{\n mt: 'auto',\n p: 2,\n borderTop: (theme) => `1px solid ${alpha(theme.palette.divider, 0.1)}`,\n background: (theme) =>\n `linear-gradient(180deg, transparent 0%, ${alpha(theme.palette.background.default, 0.5)} 100%)`,\n }}\n >\n {children}\n </Box>\n </Fade>\n);\n\nexport interface NavigationStandardBodyProps {\n variant: string;\n size: string;\n minimal: boolean;\n collapsed: boolean;\n collapsible: boolean;\n showDividers: boolean;\n items: NavigationMenuItem[];\n logo?: ReactNode;\n endContent?: ReactNode;\n onCollapseToggle: () => void;\n}\n\n// The list-based layouts (vertical and horizontal). The logo and the collapse\n// control only apply to the vertical one.\nexport const NavigationStandardBody: FC<NavigationStandardBodyProps> = ({\n variant,\n size,\n minimal,\n collapsed,\n collapsible,\n showDividers,\n items,\n logo,\n endContent,\n onCollapseToggle,\n}) => {\n const isVertical = variant === 'vertical';\n // Only the horizontal bar is raised; vertical rails and minimal sit flat.\n const elevation = !minimal && variant === 'horizontal' ? 1 : 0;\n\n return (\n <Paper\n elevation={elevation}\n sx={{\n width: '100%',\n height: isVertical ? '100%' : 'auto',\n overflow: 'hidden',\n background: minimal ? 'transparent' : undefined,\n }}\n >\n {logo && isVertical && <VerticalLogo logo={logo} collapsed={collapsed} />}\n\n {collapsible && isVertical && (\n <CollapseControl collapsed={collapsed} onToggle={onCollapseToggle} />\n )}\n\n <MenuItems\n items={items}\n variant={variant}\n size={size}\n collapsed={collapsed}\n minimal={minimal}\n showDividers={showDividers}\n />\n\n {endContent && <EndPanel>{endContent}</EndPanel>}\n </Paper>\n );\n};\n"],"mappings":"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","names":[]}
|
package/dist/chunk-7QXEEZFO.js
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
MIN_QUERY_LENGTH,
|
|
3
|
-
addressOptionLabel,
|
|
4
|
-
isSameAddressOption
|
|
5
|
-
} from "./chunk-MTGEJRE4.js";
|
|
6
|
-
import {
|
|
7
|
-
AddressSuggestionsPaper
|
|
8
|
-
} from "./chunk-C5RQBTRZ.js";
|
|
9
|
-
import {
|
|
10
|
-
AddressOption
|
|
11
|
-
} from "./chunk-P5JCOFK3.js";
|
|
12
|
-
import {
|
|
13
|
-
AddressInputField
|
|
14
|
-
} from "./chunk-ZCCKIWZU.js";
|
|
15
|
-
|
|
16
|
-
// src/components/form/AddressAutocomplete/AddressAutocompleteField.tsx
|
|
17
|
-
import Alert from "@mui/material/Alert/index.js";
|
|
18
|
-
import Autocomplete from "@mui/material/Autocomplete/index.js";
|
|
19
|
-
import Box from "@mui/material/Box/index.js";
|
|
20
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
21
|
-
var AddressAutocompleteField = ({
|
|
22
|
-
copy,
|
|
23
|
-
variant,
|
|
24
|
-
label,
|
|
25
|
-
placeholder,
|
|
26
|
-
icon,
|
|
27
|
-
floating,
|
|
28
|
-
error,
|
|
29
|
-
helperText,
|
|
30
|
-
disabled,
|
|
31
|
-
required,
|
|
32
|
-
fullWidth,
|
|
33
|
-
getCurrentLocation,
|
|
34
|
-
inputValue,
|
|
35
|
-
options,
|
|
36
|
-
loading,
|
|
37
|
-
apiError,
|
|
38
|
-
handleInputChange,
|
|
39
|
-
handleSelect,
|
|
40
|
-
handleGetCurrentLocation
|
|
41
|
-
}) => /* @__PURE__ */ jsxs(Box, { "data-testid": "address-autocomplete-container", children: [
|
|
42
|
-
/* @__PURE__ */ jsx(
|
|
43
|
-
Autocomplete,
|
|
44
|
-
{
|
|
45
|
-
freeSolo: true,
|
|
46
|
-
options,
|
|
47
|
-
inputValue,
|
|
48
|
-
onInputChange: handleInputChange,
|
|
49
|
-
onChange: handleSelect,
|
|
50
|
-
loading,
|
|
51
|
-
disabled,
|
|
52
|
-
fullWidth,
|
|
53
|
-
getOptionLabel: addressOptionLabel,
|
|
54
|
-
isOptionEqualToValue: isSameAddressOption,
|
|
55
|
-
PaperComponent: AddressSuggestionsPaper,
|
|
56
|
-
noOptionsText: inputValue.length <= MIN_QUERY_LENGTH ? "Type at least 3 characters" : "No addresses found",
|
|
57
|
-
renderOption: ({ key, ...optionProps }, option, state) => /* @__PURE__ */ jsx(
|
|
58
|
-
AddressOption,
|
|
59
|
-
{
|
|
60
|
-
optionProps,
|
|
61
|
-
option,
|
|
62
|
-
index: state.index
|
|
63
|
-
},
|
|
64
|
-
key
|
|
65
|
-
),
|
|
66
|
-
renderInput: (params) => /* @__PURE__ */ jsx(
|
|
67
|
-
AddressInputField,
|
|
68
|
-
{
|
|
69
|
-
copy,
|
|
70
|
-
params,
|
|
71
|
-
addressVariant: variant,
|
|
72
|
-
label: floating ? void 0 : label,
|
|
73
|
-
placeholder,
|
|
74
|
-
icon,
|
|
75
|
-
error: error || !!apiError,
|
|
76
|
-
helperText: apiError || helperText,
|
|
77
|
-
required,
|
|
78
|
-
disabled,
|
|
79
|
-
loading,
|
|
80
|
-
showCurrentLocation: getCurrentLocation && !loading,
|
|
81
|
-
onGetCurrentLocation: handleGetCurrentLocation
|
|
82
|
-
}
|
|
83
|
-
)
|
|
84
|
-
}
|
|
85
|
-
),
|
|
86
|
-
apiError && /* @__PURE__ */ jsx(Alert, { severity: "warning", sx: { mt: 1 }, children: apiError })
|
|
87
|
-
] });
|
|
88
|
-
|
|
89
|
-
export {
|
|
90
|
-
AddressAutocompleteField
|
|
91
|
-
};
|
|
92
|
-
//# sourceMappingURL=chunk-7QXEEZFO.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/form/AddressAutocomplete/AddressAutocompleteField.tsx"],"sourcesContent":["import Alert from '@mui/material/Alert/index.js';\nimport Autocomplete from '@mui/material/Autocomplete/index.js';\nimport Box from '@mui/material/Box/index.js';\nimport type { FC } from 'react';\nimport React from 'react';\n\nimport {\n addressOptionLabel,\n isSameAddressOption,\n MIN_QUERY_LENGTH,\n type ResolvedAddressProps,\n} from './AddressAutocomplete.helpers';\nimport type { AddressAutocompleteState } from './AddressAutocomplete.hooks';\nimport { AddressInputField } from './AddressInputField';\nimport { AddressOption } from './AddressOption';\nimport { AddressSuggestionsPaper } from './AddressSuggestionsPaper';\n\nexport type AddressAutocompleteFieldProps = ResolvedAddressProps & AddressAutocompleteState;\n\n// The live field, rendered once Google Maps (or the mock stand-in) is ready.\nexport const AddressAutocompleteField: FC<AddressAutocompleteFieldProps> = ({\n copy,\n variant,\n label,\n placeholder,\n icon,\n floating,\n error,\n helperText,\n disabled,\n required,\n fullWidth,\n getCurrentLocation,\n inputValue,\n options,\n loading,\n apiError,\n handleInputChange,\n handleSelect,\n handleGetCurrentLocation,\n}) => (\n <Box data-testid=\"address-autocomplete-container\">\n <Autocomplete\n freeSolo\n options={options}\n inputValue={inputValue}\n onInputChange={handleInputChange}\n onChange={handleSelect}\n loading={loading}\n disabled={disabled}\n fullWidth={fullWidth}\n getOptionLabel={addressOptionLabel}\n isOptionEqualToValue={isSameAddressOption}\n PaperComponent={AddressSuggestionsPaper}\n noOptionsText={\n inputValue.length <= MIN_QUERY_LENGTH ? 'Type at least 3 characters' : 'No addresses found'\n }\n renderOption={({ key, ...optionProps }, option, state) => (\n <AddressOption\n key={key}\n optionProps={optionProps}\n option={option}\n index={state.index}\n />\n )}\n renderInput={(params) => (\n <AddressInputField\n copy={copy}\n params={params}\n addressVariant={variant}\n label={floating ? undefined : label}\n placeholder={placeholder}\n icon={icon}\n error={error || !!apiError}\n helperText={apiError || helperText}\n required={required}\n disabled={disabled}\n loading={loading}\n showCurrentLocation={getCurrentLocation && !loading}\n onGetCurrentLocation={handleGetCurrentLocation}\n />\n )}\n />\n {apiError && (\n <Alert severity=\"warning\" sx={{ mt: 1 }}>\n {apiError}\n </Alert>\n )}\n </Box>\n);\n"],"mappings":";;;;;;;;;;;;;;;;AAAA,OAAO,WAAW;AAClB,OAAO,kBAAkB;AACzB,OAAO,SAAS;AAuCd,SAiBM,KAjBN;AArBK,IAAM,2BAA8D,CAAC;AAAA,EAC1E;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MACE,qBAAC,OAAI,eAAY,kCACf;AAAA;AAAA,IAAC;AAAA;AAAA,MACC,UAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA,eAAe;AAAA,MACf,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA,gBAAgB;AAAA,MAChB,sBAAsB;AAAA,MACtB,gBAAgB;AAAA,MAChB,eACE,WAAW,UAAU,mBAAmB,+BAA+B;AAAA,MAEzE,cAAc,CAAC,EAAE,KAAK,GAAG,YAAY,GAAG,QAAQ,UAC9C;AAAA,QAAC;AAAA;AAAA,UAEC;AAAA,UACA;AAAA,UACA,OAAO,MAAM;AAAA;AAAA,QAHR;AAAA,MAIP;AAAA,MAEF,aAAa,CAAC,WACZ;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA,gBAAgB;AAAA,UAChB,OAAO,WAAW,SAAY;AAAA,UAC9B;AAAA,UACA;AAAA,UACA,OAAO,SAAS,CAAC,CAAC;AAAA,UAClB,YAAY,YAAY;AAAA,UACxB;AAAA,UACA;AAAA,UACA;AAAA,UACA,qBAAqB,sBAAsB,CAAC;AAAA,UAC5C,sBAAsB;AAAA;AAAA,MACxB;AAAA;AAAA,EAEJ;AAAA,EACC,YACC,oBAAC,SAAM,UAAS,WAAU,IAAI,EAAE,IAAI,EAAE,GACnC,oBACH;AAAA,GAEJ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/en-US.navigation.ts"],"sourcesContent":["/**\n * The en-US pack for the navigation family. Split the same way\n * `pt-BR.navigation.ts` is — see `en-US.ts` for why.\n */\nimport type {\n BreadcrumbCopy,\n CommandPaletteCopy,\n SectionNavCopy,\n} from './copy';\n\nexport const EN_US_COMMAND_PALETTE_COPY: CommandPaletteCopy = {\n execute: \"Run\",\n // The arrow glyphs and the key name are part of the hint a reader looks at\n // while their hands are on the keyboard, so they survive translation intact.\n navigate: \"↑↓ Navigate\",\n close: \"ESC Close\",\n recent: \"Recent\",\n tryAnotherTerm: \"Try another term\",\n};\n\nexport const EN_US_BREADCRUMB_COPY: BreadcrumbCopy = {\n showMore: \"Show more\",\n moreItems: \"More items\",\n};\n\nexport const EN_US_SECTION_NAV_COPY: SectionNavCopy = {\n close: \"Close\",\n badge: (count) => (count === 1 ? \"1 pending\" : `${count} pending`),\n attention: \"Needs attention\",\n};\n"],"mappings":";AAUO,IAAM,6BAAiD;AAAA,EAC5D,SAAS;AAAA;AAAA;AAAA,EAGT,UAAU;AAAA,EACV,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,gBAAgB;AAClB;AAEO,IAAM,wBAAwC;AAAA,EACnD,UAAU;AAAA,EACV,WAAW;AACb;AAEO,IAAM,yBAAyC;AAAA,EACpD,OAAO;AAAA,EACP,OAAO,CAAC,UAAW,UAAU,IAAI,cAAc,GAAG,KAAK;AAAA,EACvD,WAAW;AACb;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/form/AddressAutocomplete/useGoogleMapsAPI.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nexport interface GoogleMapsService {\n autocompleteService: google.maps.places.AutocompleteService | null;\n placesService: google.maps.places.PlacesService | null;\n geocoder: google.maps.Geocoder | null;\n}\n\nexport const useGoogleMapsAPI = (apiKey: string) => {\n const [isLoaded, setIsLoaded] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [useMockData, setUseMockData] = useState(false);\n const serviceRef = useRef<GoogleMapsService>({\n autocompleteService: null,\n placesService: null,\n geocoder: null,\n });\n\n useEffect(() => {\n // Use mock data for demo key or test environment\n if (!apiKey || apiKey === 'demo-key' || apiKey === 'test-key') {\n setUseMockData(true);\n setIsLoaded(true);\n setError(null);\n return;\n }\n\n // Check if Google Maps is already loaded\n if (window.google && window.google.maps && window.google.maps.places) {\n initializeServices();\n return;\n }\n\n // Load Google Maps API\n const script = document.createElement('script');\n script.src = `https://maps.googleapis.com/maps/api/js?key=${apiKey}&libraries=places`;\n script.async = true;\n script.defer = true;\n \n script.onload = () => {\n initializeServices();\n };\n \n script.onerror = () => {\n setError('Failed to load Google Maps API');\n };\n\n document.head.appendChild(script);\n\n return () => {\n // Cleanup script if component unmounts\n if (document.head.contains(script)) {\n document.head.removeChild(script);\n }\n };\n }, [apiKey]);\n\n const initializeServices = () => {\n try {\n if (window.google && window.google.maps && window.google.maps.places) {\n serviceRef.current = {\n autocompleteService: new window.google.maps.places.AutocompleteService(),\n placesService: new window.google.maps.places.PlacesService(document.createElement('div')),\n geocoder: new window.google.maps.Geocoder(),\n };\n setIsLoaded(true);\n setError(null);\n }\n } catch {\n setError('Failed to initialize Google Maps services');\n }\n };\n\n return { isLoaded, error, services: serviceRef.current, useMockData };\n};\n"],"mappings":";AAAA,SAAS,WAAW,QAAQ,gBAAgB;AAQrC,IAAM,mBAAmB,CAAC,WAAmB;AAClD,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,KAAK;AAC9C,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAwB,IAAI;AACtD,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,KAAK;AACpD,QAAM,aAAa,OAA0B;AAAA,IAC3C,qBAAqB;AAAA,IACrB,eAAe;AAAA,IACf,UAAU;AAAA,EACZ,CAAC;AAED,YAAU,MAAM;AAEd,QAAI,CAAC,UAAU,WAAW,cAAc,WAAW,YAAY;AAC7D,qBAAe,IAAI;AACnB,kBAAY,IAAI;AAChB,eAAS,IAAI;AACb;AAAA,IACF;AAGA,QAAI,OAAO,UAAU,OAAO,OAAO,QAAQ,OAAO,OAAO,KAAK,QAAQ;AACpE,yBAAmB;AACnB;AAAA,IACF;AAGA,UAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,WAAO,MAAM,+CAA+C,MAAM;AAClE,WAAO,QAAQ;AACf,WAAO,QAAQ;AAEf,WAAO,SAAS,MAAM;AACpB,yBAAmB;AAAA,IACrB;AAEA,WAAO,UAAU,MAAM;AACrB,eAAS,gCAAgC;AAAA,IAC3C;AAEA,aAAS,KAAK,YAAY,MAAM;AAEhC,WAAO,MAAM;AAEX,UAAI,SAAS,KAAK,SAAS,MAAM,GAAG;AAClC,iBAAS,KAAK,YAAY,MAAM;AAAA,MAClC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,qBAAqB,MAAM;AAC/B,QAAI;AACF,UAAI,OAAO,UAAU,OAAO,OAAO,QAAQ,OAAO,OAAO,KAAK,QAAQ;AACpE,mBAAW,UAAU;AAAA,UACnB,qBAAqB,IAAI,OAAO,OAAO,KAAK,OAAO,oBAAoB;AAAA,UACvE,eAAe,IAAI,OAAO,OAAO,KAAK,OAAO,cAAc,SAAS,cAAc,KAAK,CAAC;AAAA,UACxF,UAAU,IAAI,OAAO,OAAO,KAAK,SAAS;AAAA,QAC5C;AACA,oBAAY,IAAI;AAChB,iBAAS,IAAI;AAAA,MACf;AAAA,IACF,QAAQ;AACN,eAAS,2CAA2C;AAAA,IACtD;AAAA,EACF;AAEA,SAAO,EAAE,UAAU,OAAO,UAAU,WAAW,SAAS,YAAY;AACtE;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/MapPreview/MapMarkers.tsx"],"sourcesContent":["import LocationIcon from '@mui/icons-material/LocationOn';\nimport Box from '@mui/material/Box/index.js';\nimport Tooltip from '@mui/material/Tooltip/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, styled, useTheme } from '@mui/material/styles/index.js';\nimport type { FC } from 'react';\nimport React from 'react';\n\nimport { MARKER_PIXELS_PER_DEGREE } from './MapPreview.constants';\nimport type { LatLng, MapMarker } from './MapPreview.types';\nimport { bounceKeyframes } from './mapSurface';\nimport { shadowInk } from '../../../tokens/ink';\nimport { rem, rems } from '../../../tokens/relative';\n\n// Kept module-local: styled() components cannot be exported across a module\n// boundary here without tripping TS2742.\nconst CoordinatesDisplay = styled(Box)(({ theme }) => ({\n position: 'absolute',\n bottom: theme.spacing(2),\n left: theme.spacing(2),\n padding: theme.spacing(1, 1.5),\n background: alpha(theme.palette.background.paper, 0.95),\n backdropFilter: `blur(${rem(theme, 10)})`,\n WebkitBackdropFilter: `blur(${rem(theme, 10)})`,\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n borderRadius: theme.shape.borderRadius,\n zIndex: 1,\n}));\n\nexport interface MapMarkersProps {\n markers: MapMarker[];\n centre: LatLng;\n animated: boolean;\n}\n\n// Markers are placed relative to the current centre, so panning moves them with\n// the surface.\nexport const MapMarkers: FC<MapMarkersProps> = ({ markers, centre, animated }) => {\n const theme = useTheme();\n\n return (\n <>\n {markers.map((markerItem, index) => (\n <Box\n key={`${markerItem.position.lat}-${markerItem.position.lng}-${index}`}\n data-testid={`map-marker-${index}`}\n sx={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: `translate(\n ${rem(theme, (markerItem.position.lng - centre.lng) * MARKER_PIXELS_PER_DEGREE)},\n ${rem(theme, -(markerItem.position.lat - centre.lat) * MARKER_PIXELS_PER_DEGREE)}\n )`,\n zIndex: 3,\n cursor: markerItem.onClick ? 'pointer' : 'default',\n }}\n onClick={markerItem.onClick}\n title={markerItem.title}\n >\n <Tooltip title={markerItem.description || markerItem.title || ''}>\n <LocationIcon\n sx={{\n fontSize: rem(theme, 32),\n color: theme.palette.error.main,\n filter: `drop-shadow(${rems(theme, 0, 2, 4)} ${shadowInk(theme, 0.3)})`,\n animation: animated ? 'bounce 2s infinite' : 'none',\n '@keyframes bounce': bounceKeyframes(theme),\n }}\n />\n </Tooltip>\n </Box>\n ))}\n </>\n );\n};\n\nexport const MapCoordinates: FC<{ position: LatLng; zoom: number }> = ({ position, zoom }) => (\n <CoordinatesDisplay data-testid=\"coordinates-display\">\n <Typography variant=\"caption\" sx={{ fontFamily: 'monospace' }}>\n Lat: {position.lat.toFixed(6)}, Lng: {position.lng.toFixed(6)}\n </Typography>\n {zoom > 0 && (\n <Typography variant=\"caption\" sx={{ fontFamily: 'monospace', display: 'block' }}>\n Zoom: {zoom}\n </Typography>\n )}\n </CoordinatesDisplay>\n);\n"],"mappings":";;;;;;;;;;;;;;;AAAA,OAAO,kBAAkB;AACzB,OAAO,SAAS;AAChB,OAAO,aAAa;AACpB,OAAO,gBAAgB;AACvB,SAAS,OAAO,QAAQ,gBAAgB;AAqCpC,mBAoBQ,KAkBR,YAtCA;AAzBJ,IAAM,qBAAqB,OAAO,GAAG,EAAE,CAAC,EAAE,MAAM,OAAO;AAAA,EACrD,UAAU;AAAA,EACV,QAAQ,MAAM,QAAQ,CAAC;AAAA,EACvB,MAAM,MAAM,QAAQ,CAAC;AAAA,EACrB,SAAS,MAAM,QAAQ,GAAG,GAAG;AAAA,EAC7B,YAAY,MAAM,MAAM,QAAQ,WAAW,OAAO,IAAI;AAAA,EACtD,gBAAgB,QAAQ,IAAI,OAAO,EAAE,CAAC;AAAA,EACtC,sBAAsB,QAAQ,IAAI,OAAO,EAAE,CAAC;AAAA,EAC5C,QAAQ,aAAa,MAAM,MAAM,QAAQ,SAAS,GAAG,CAAC;AAAA,EACtD,cAAc,MAAM,MAAM;AAAA,EAC1B,QAAQ;AACV,EAAE;AAUK,IAAM,aAAkC,CAAC,EAAE,SAAS,QAAQ,SAAS,MAAM;AAChF,QAAM,QAAQ,SAAS;AAEvB,SACE,gCACG,kBAAQ,IAAI,CAAC,YAAY,UACxB;AAAA,IAAC;AAAA;AAAA,MAEC,eAAa,cAAc,KAAK;AAAA,MAChC,IAAI;AAAA,QACF,UAAU;AAAA,QACV,KAAK;AAAA,QACL,MAAM;AAAA,QACN,WAAW;AAAA,gBACP,IAAI,QAAQ,WAAW,SAAS,MAAM,OAAO,OAAO,wBAAwB,CAAC;AAAA,gBAC7E,IAAI,OAAO,EAAE,WAAW,SAAS,MAAM,OAAO,OAAO,wBAAwB,CAAC;AAAA;AAAA,QAElF,QAAQ;AAAA,QACR,QAAQ,WAAW,UAAU,YAAY;AAAA,MAC3C;AAAA,MACA,SAAS,WAAW;AAAA,MACpB,OAAO,WAAW;AAAA,MAElB,8BAAC,WAAQ,OAAO,WAAW,eAAe,WAAW,SAAS,IAC5D;AAAA,QAAC;AAAA;AAAA,UACC,IAAI;AAAA,YACF,UAAU,IAAI,OAAO,EAAE;AAAA,YACvB,OAAO,MAAM,QAAQ,MAAM;AAAA,YAC3B,QAAQ,eAAe,KAAK,OAAO,GAAG,GAAG,CAAC,CAAC,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,YACpE,WAAW,WAAW,uBAAuB;AAAA,YAC7C,qBAAqB,gBAAgB,KAAK;AAAA,UAC5C;AAAA;AAAA,MACF,GACF;AAAA;AAAA,IA1BK,GAAG,WAAW,SAAS,GAAG,IAAI,WAAW,SAAS,GAAG,IAAI,KAAK;AAAA,EA2BrE,CACD,GACH;AAEJ;AAEO,IAAM,iBAAyD,CAAC,EAAE,UAAU,KAAK,MACtF,qBAAC,sBAAmB,eAAY,uBAC9B;AAAA,uBAAC,cAAW,SAAQ,WAAU,IAAI,EAAE,YAAY,YAAY,GAAG;AAAA;AAAA,IACvD,SAAS,IAAI,QAAQ,CAAC;AAAA,IAAE;AAAA,IAAQ,SAAS,IAAI,QAAQ,CAAC;AAAA,KAC9D;AAAA,EACC,OAAO,KACN,qBAAC,cAAW,SAAQ,WAAU,IAAI,EAAE,YAAY,aAAa,SAAS,QAAQ,GAAG;AAAA;AAAA,IACxE;AAAA,KACT;AAAA,GAEJ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/form/AddressAutocomplete/useCurrentLocation.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { coordinatesOf, toAddressDetails } from './AddressAutocomplete.mapper';\nimport type { AddressDetails } from './AddressAutocomplete.types';\nimport { MOCK_ADDRESSES, MOCK_PLACE_DETAILS } from './mockPlaces';\nimport type { GoogleMapsService } from './useGoogleMapsAPI';\n\nconst MOCK_GEOLOCATION_DELAY_MS = 500;\n\nconst GEOLOCATION_OPTIONS: PositionOptions = {\n enableHighAccuracy: true,\n timeout: 10_000,\n maximumAge: 600_000, // 10 minutes\n};\n\ninterface LocationSink {\n setLoading: (loading: boolean) => void;\n setApiError: (message: string | null) => void;\n applyAddress: (address: AddressDetails) => void;\n}\n\n// Mock mode answers with the first canned address after a pause, so the button\n// behaves like a real geolocation round trip.\nconst resolveMockLocation = (sink: LocationSink) => {\n window.setTimeout(() => {\n sink.setLoading(false);\n\n const mockLocation = MOCK_ADDRESSES[0];\n if (!mockLocation) {\n sink.setApiError('No mock location available');\n return;\n }\n\n const mockDetails = MOCK_PLACE_DETAILS[mockLocation.place_id];\n if (!mockDetails) {\n sink.setApiError('Mock location details not found');\n return;\n }\n\n sink.applyAddress(\n toAddressDetails({\n components: mockDetails.address_components,\n formatted: mockDetails.formatted_address,\n coordinates: coordinatesOf(mockDetails.geometry),\n }),\n );\n }, MOCK_GEOLOCATION_DELAY_MS);\n};\n\nconst geocodePosition =\n (geocoder: google.maps.Geocoder, sink: LocationSink) => (position: GeolocationPosition) => {\n const { latitude, longitude } = position.coords;\n const location = new google.maps.LatLng(latitude, longitude);\n\n geocoder.geocode({ location }, (results, status) => {\n sink.setLoading(false);\n\n const place = status === 'OK' ? results?.[0] : undefined;\n if (!place) {\n sink.setApiError('Unable to retrieve address for current location');\n return;\n }\n\n sink.applyAddress(\n toAddressDetails({\n components: place.address_components,\n formatted: place.formatted_address,\n // The device's own fix is more precise than the geocoded place's.\n coordinates: { lat: latitude, lng: longitude },\n }),\n );\n });\n };\n\nexport const useCurrentLocation = ({\n services,\n useMockData,\n setLoading,\n setApiError,\n applyAddress,\n}: {\n services: GoogleMapsService;\n useMockData: boolean;\n setLoading: (loading: boolean) => void;\n setApiError: (message: string | null) => void;\n applyAddress: (address: AddressDetails) => void;\n}) =>\n useCallback(() => {\n if (!navigator.geolocation) {\n setApiError('Geolocation is not supported by this browser');\n return;\n }\n\n const sink: LocationSink = { setLoading, setApiError, applyAddress };\n\n if (useMockData) {\n setLoading(true);\n resolveMockLocation(sink);\n return;\n }\n\n if (!services.geocoder) {\n setApiError('Geocoding service not available');\n return;\n }\n\n setLoading(true);\n navigator.geolocation.getCurrentPosition(\n geocodePosition(services.geocoder, sink),\n () => {\n setLoading(false);\n setApiError('Unable to retrieve your location');\n },\n GEOLOCATION_OPTIONS,\n );\n }, [services, useMockData, setLoading, setApiError, applyAddress]);\n"],"mappings":";;;;;;;;;;AAAA,SAAS,mBAAmB;AAO5B,IAAM,4BAA4B;AAElC,IAAM,sBAAuC;AAAA,EAC3C,oBAAoB;AAAA,EACpB,SAAS;AAAA,EACT,YAAY;AAAA;AACd;AAUA,IAAM,sBAAsB,CAAC,SAAuB;AAClD,SAAO,WAAW,MAAM;AACtB,SAAK,WAAW,KAAK;AAErB,UAAM,eAAe,eAAe,CAAC;AACrC,QAAI,CAAC,cAAc;AACjB,WAAK,YAAY,4BAA4B;AAC7C;AAAA,IACF;AAEA,UAAM,cAAc,mBAAmB,aAAa,QAAQ;AAC5D,QAAI,CAAC,aAAa;AAChB,WAAK,YAAY,iCAAiC;AAClD;AAAA,IACF;AAEA,SAAK;AAAA,MACH,iBAAiB;AAAA,QACf,YAAY,YAAY;AAAA,QACxB,WAAW,YAAY;AAAA,QACvB,aAAa,cAAc,YAAY,QAAQ;AAAA,MACjD,CAAC;AAAA,IACH;AAAA,EACF,GAAG,yBAAyB;AAC9B;AAEA,IAAM,kBACJ,CAAC,UAAgC,SAAuB,CAAC,aAAkC;AACzF,QAAM,EAAE,UAAU,UAAU,IAAI,SAAS;AACzC,QAAM,WAAW,IAAI,OAAO,KAAK,OAAO,UAAU,SAAS;AAE3D,WAAS,QAAQ,EAAE,SAAS,GAAG,CAAC,SAAS,WAAW;AAClD,SAAK,WAAW,KAAK;AAErB,UAAM,QAAQ,WAAW,OAAO,UAAU,CAAC,IAAI;AAC/C,QAAI,CAAC,OAAO;AACV,WAAK,YAAY,iDAAiD;AAClE;AAAA,IACF;AAEA,SAAK;AAAA,MACH,iBAAiB;AAAA,QACf,YAAY,MAAM;AAAA,QAClB,WAAW,MAAM;AAAA;AAAA,QAEjB,aAAa,EAAE,KAAK,UAAU,KAAK,UAAU;AAAA,MAC/C,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;AAEK,IAAM,qBAAqB,CAAC;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAOE,YAAY,MAAM;AAChB,MAAI,CAAC,UAAU,aAAa;AAC1B,gBAAY,8CAA8C;AAC1D;AAAA,EACF;AAEA,QAAM,OAAqB,EAAE,YAAY,aAAa,aAAa;AAEnE,MAAI,aAAa;AACf,eAAW,IAAI;AACf,wBAAoB,IAAI;AACxB;AAAA,EACF;AAEA,MAAI,CAAC,SAAS,UAAU;AACtB,gBAAY,iCAAiC;AAC7C;AAAA,EACF;AAEA,aAAW,IAAI;AACf,YAAU,YAAY;AAAA,IACpB,gBAAgB,SAAS,UAAU,IAAI;AAAA,IACvC,MAAM;AACJ,iBAAW,KAAK;AAChB,kBAAY,kCAAkC;AAAA,IAChD;AAAA,IACA;AAAA,EACF;AACF,GAAG,CAAC,UAAU,aAAa,YAAY,aAAa,YAAY,CAAC;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/MapPreview/MapPreview.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport Paper from '@mui/material/Paper/index.js';\nimport { alpha, styled, useTheme } from '@mui/material/styles/index.js';\nimport type { FC } from 'react';\nimport React from 'react';\n\nimport { glassStyles, resolveMapPreviewProps } from './MapPreview.helpers';\nimport type { MapPreviewProps } from './MapPreview.types';\nimport { MapLayers } from './MapLayers';\nimport { MapCoordinates, MapMarkers } from './MapMarkers';\nimport { StaticMapView } from './StaticMapView';\nimport { useMapPreview } from './useMapPreview';\nimport { rem } from '../../../tokens/relative';\n\n// Kept module-local: styled() components cannot be exported across a module\n// boundary here without tripping TS2742.\nconst MapContainer = styled(Paper)(({ theme }) => ({\n position: 'relative',\n width: '100%',\n borderRadius: theme.shape.borderRadius * 2,\n overflow: 'hidden',\n background: `linear-gradient(135deg, ${alpha(theme.palette.background.paper, 0.9)} 0%, ${alpha(theme.palette.background.paper, 0.8)} 100%)`,\n border: `1px solid ${alpha(theme.palette.divider, 0.18)}`,\n}));\n\nconst MapWrapper = styled(Box)<{ height: string }>(({ height }) => ({\n width: '100%',\n height,\n position: 'relative',\n}));\n\nconst cursorFor = (grabbing: boolean, interactive: boolean): string => {\n if (grabbing) return 'grabbing';\n return interactive ? 'grab' : 'default';\n};\n\nexport const MapPreview: FC<MapPreviewProps> = (componentProps) => {\n const props = resolveMapPreviewProps(componentProps);\n const theme = useTheme();\n const { containerRef, view, controls, pointer, search, handleMapClick } = useMapPreview(props);\n\n // The map's own default height is 400 design px, through the theme's type scale.\n const height = controls.isFullscreen ? '100vh' : (props.height ?? rem(theme, 400));\n const grabbing = pointer.isDragging || pointer.isPanning;\n\n return (\n <MapContainer\n ref={containerRef}\n elevation={props.variant === 'glass' ? 0 : 2}\n data-testid=\"map-preview-container\"\n role=\"img\"\n aria-label={`Map preview centered at ${view.markerPosition.lat.toFixed(4)}, ${view.markerPosition.lng.toFixed(4)} with zoom level ${view.zoom}`}\n tabIndex={0}\n aria-live=\"polite\"\n aria-atomic=\"true\"\n sx={glassStyles(props.variant, theme)}\n >\n <MapWrapper\n height={height}\n onClick={handleMapClick}\n onMouseDown={pointer.handleMouseDown}\n onMouseMove={pointer.handleMouseMove}\n onMouseUp={pointer.handleMouseUp}\n onMouseLeave={pointer.handleMouseUp}\n style={{\n cursor: cursorFor(grabbing, props.interactive),\n transition: props.animated ? 'all 0.3s ease' : 'none',\n }}\n >\n <StaticMapView\n height={height}\n zoom={view.zoom}\n mapType={view.mapType}\n // The built-in centre marker steps aside for an explicit marker list.\n marker={props.marker && props.markers.length === 0}\n markerPosition={view.markerPosition}\n panOffset={view.panOffset}\n />\n\n <MapMarkers markers={props.markers} centre={view.markerPosition} animated={props.animated} />\n\n <MapLayers\n settings={props}\n zoom={view.zoom}\n mapType={view.mapType}\n search={search}\n controls={controls}\n />\n\n <MapCoordinates position={view.markerPosition} zoom={view.zoom} />\n </MapWrapper>\n </MapContainer>\n );\n};\n\nexport default MapPreview;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,SAAS;AAChB,OAAO,WAAW;AAClB,SAAS,OAAO,QAAQ,gBAAgB;AAuDlC,SAYE,KAZF;AAzCN,IAAM,eAAe,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,OAAO;AAAA,EACjD,UAAU;AAAA,EACV,OAAO;AAAA,EACP,cAAc,MAAM,MAAM,eAAe;AAAA,EACzC,UAAU;AAAA,EACV,YAAY,2BAA2B,MAAM,MAAM,QAAQ,WAAW,OAAO,GAAG,CAAC,QAAQ,MAAM,MAAM,QAAQ,WAAW,OAAO,GAAG,CAAC;AAAA,EACnI,QAAQ,aAAa,MAAM,MAAM,QAAQ,SAAS,IAAI,CAAC;AACzD,EAAE;AAEF,IAAM,aAAa,OAAO,GAAG,EAAsB,CAAC,EAAE,OAAO,OAAO;AAAA,EAClE,OAAO;AAAA,EACP;AAAA,EACA,UAAU;AACZ,EAAE;AAEF,IAAM,YAAY,CAAC,UAAmB,gBAAiC;AACrE,MAAI,SAAU,QAAO;AACrB,SAAO,cAAc,SAAS;AAChC;AAEO,IAAM,aAAkC,CAAC,mBAAmB;AACjE,QAAM,QAAQ,uBAAuB,cAAc;AACnD,QAAM,QAAQ,SAAS;AACvB,QAAM,EAAE,cAAc,MAAM,UAAU,SAAS,QAAQ,eAAe,IAAI,cAAc,KAAK;AAG7F,QAAM,SAAS,SAAS,eAAe,UAAW,MAAM,UAAU,IAAI,OAAO,GAAG;AAChF,QAAM,WAAW,QAAQ,cAAc,QAAQ;AAE/C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,WAAW,MAAM,YAAY,UAAU,IAAI;AAAA,MAC3C,eAAY;AAAA,MACZ,MAAK;AAAA,MACL,cAAY,2BAA2B,KAAK,eAAe,IAAI,QAAQ,CAAC,CAAC,KAAK,KAAK,eAAe,IAAI,QAAQ,CAAC,CAAC,oBAAoB,KAAK,IAAI;AAAA,MAC7I,UAAU;AAAA,MACV,aAAU;AAAA,MACV,eAAY;AAAA,MACZ,IAAI,YAAY,MAAM,SAAS,KAAK;AAAA,MAEpC;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,SAAS;AAAA,UACT,aAAa,QAAQ;AAAA,UACrB,aAAa,QAAQ;AAAA,UACrB,WAAW,QAAQ;AAAA,UACnB,cAAc,QAAQ;AAAA,UACtB,OAAO;AAAA,YACL,QAAQ,UAAU,UAAU,MAAM,WAAW;AAAA,YAC7C,YAAY,MAAM,WAAW,kBAAkB;AAAA,UACjD;AAAA,UAEA;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA,MAAM,KAAK;AAAA,gBACX,SAAS,KAAK;AAAA,gBAEd,QAAQ,MAAM,UAAU,MAAM,QAAQ,WAAW;AAAA,gBACjD,gBAAgB,KAAK;AAAA,gBACrB,WAAW,KAAK;AAAA;AAAA,YAClB;AAAA,YAEA,oBAAC,cAAW,SAAS,MAAM,SAAS,QAAQ,KAAK,gBAAgB,UAAU,MAAM,UAAU;AAAA,YAE3F;AAAA,cAAC;AAAA;AAAA,gBACC,UAAU;AAAA,gBACV,MAAM,KAAK;AAAA,gBACX,SAAS,KAAK;AAAA,gBACd;AAAA,gBACA;AAAA;AAAA,YACF;AAAA,YAEA,oBAAC,kBAAe,UAAU,KAAK,gBAAgB,MAAM,KAAK,MAAM;AAAA;AAAA;AAAA,MAClE;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,qBAAQ;","names":[]}
|
package/dist/chunk-BWZKLKDT.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=chunk-BWZKLKDT.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/LazyImage/LazyImage.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport CircularProgress from '@mui/material/CircularProgress/index.js';\nimport { styled, useTheme, type Theme } from '@mui/material/styles/index.js';\nimport React from 'react';\nimport { Skeleton } from '../../layout/Skeleton';\nimport type { ResolvedLazyImageProps } from './LazyImage.hooks';\nimport { imgPassThrough, resolveLazyImageProps, useLazyImage } from './LazyImage.hooks';\nimport type { LazyImageProps } from './LazyImage.types';\nimport { sheen } from '../../../tokens/ink';\nimport { rem } from '../../../tokens/relative';\nimport { fieldHeight } from '../../../tokens/field-height';\n\nconst ImageContainer = styled(Box)(() => ({\n position: 'relative',\n display: 'inline-block',\n overflow: 'hidden',\n}));\n\nconst StyledImage = styled('img')<{\n fadeIn?: boolean;\n fadeInDuration?: number;\n isLoaded?: boolean;\n}>(({ fadeIn, fadeInDuration = 300, isLoaded }) => ({\n display: 'block',\n maxWidth: '100%',\n height: 'auto',\n opacity: fadeIn ? (isLoaded ? 1 : 0) : 1,\n transition: fadeIn ? `opacity ${fadeInDuration}ms ease-in-out` : 'none',\n}));\n\nconst SpinnerOverlay = styled(Box)(({ theme }) => ({\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: sheen(theme, 0.8),\n borderRadius: '50%',\n padding: theme.spacing(1),\n}));\n\nconst FallbackContainer = styled(Box)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: theme.palette.action.disabledBackground,\n color: theme.palette.text.secondary,\n width: '100%',\n height: '100%',\n position: 'absolute',\n top: 0,\n left: 0,\n}));\n\ntype Length = number | string | undefined;\n\n/** A length prop as React `style` and MUI's `Skeleton` read it: a number is design px. */\nconst styleLength = (theme: Theme, value: Length): string | undefined =>\n typeof value === 'number' ? rem(theme, value) : value;\n\n/**\n * A width or height above 0 and up to 1 is a fraction of the container's parent, as in `sx`.\n * A negative number is no fraction: it stays a (negative, so invalid) length.\n */\nconst isFraction = (value: Length): value is number =>\n typeof value === 'number' && value > 0 && value <= 1;\n\n/**\n * A length prop as `sx` reads it on a width or height: a number of 1 or less is\n * a fraction of the parent, and that stays so; any other number is design px.\n */\nconst sxLength = (theme: Theme, value: Length): string | undefined =>\n isFraction(value) ? `${value * 100}%` : styleLength(theme, value);\n\n/**\n * A width or height for what is drawn inside the container. The container alone\n * takes a fraction, so everything in it fills it: a percentage here is measured\n * against the container and would stack (FUT-2666). Otherwise the same as `styleLength`.\n */\nconst innerLength = (theme: Theme, value: Length): string | undefined =>\n isFraction(value) ? '100%' : styleLength(theme, value);\n\n/**\n * A width or height with its default. Only an unset or empty size takes it: `0`\n * is a size, which `||` read as unset (FUT-2669), and `sx` reads `''` as `0%`.\n */\nconst orDefault = (value: Length, fallback: number | string): number | string =>\n value === undefined || value === '' ? fallback : value;\n\n/**\n * A width/height as `metrics` and the `ReactNode` `ErrorFallback` read it\n * (FUT-2774 #4): an explicit empty string is normalized to \"as if unset\"\n * rather than mapped to a component-wide default. Unlike `SkeletonIndicator`\n * (a content-less box with nothing else to size by, hence its own deliberate\n * `'100%'`/`'auto'` fallback), these draw the real image or a `ReactNode`\n * fallback — both have their own intrinsic size, so leaving an unset width\n * unset lets it size naturally (`brand-link.tsx`'s logo relies on exactly\n * this: an unset width capped by its own `sx.maxWidth`).\n */\nconst emptyToUnset = (value: Length): Length => (value === '' ? undefined : value);\n\n/** A length, already resolved to CSS — {@link innerLength} or {@link sxLength}. */\ntype LengthResolver = (theme: Theme, value: Length) => string | undefined;\n\n// A number + `%`, a (small/large/dynamic) viewport unit, or a container-query\n// unit, anywhere in a string, even nested in `calc()`/`min()`/`max()`/`clamp()`.\nconst RELATIVE_LENGTH_UNIT = /[\\d.]+(?:%|[dsl]?v(?:w|h|i|b|min|max)|cq(?:w|h|i|b|min|max))(?![a-zA-Z])/;\n// RELATIVE: {@link isFraction}, or that unit anywhere — borrowing it onto the\n// OTHER axis re-creates this collapse (all these units square, `LazyImage.md`).\nconst isRelativeLength = (value: Length): boolean =>\n isFraction(value) || (typeof value === 'string' && RELATIVE_LENGTH_UNIT.test(value));\n\n/** A resolved axis pair; `aspectRatio` is set when the OTHER axis comes from CSS, not a length. */\ntype AxisPair = { width: string | undefined; height: string | undefined; aspectRatio?: string };\n\n/**\n * The unset-axis DEFAULT for a PLACEHOLDER only (skeleton, `ReactNode`\n * fallback) — never the real image/`metrics` (an unset width sizes it\n * naturally; `brand-link.tsx`'s logo relies on that). Decision (FUT-2805): an\n * unset axis borrows the set one (a square); neither set, both take the\n * theme's field height; both set stays unchanged. `resolve` is `innerLength`\n * (skeleton) or `sxLength` (the container). A RELATIVE single axis\n * ({@link isRelativeLength}) cannot borrow the same way: it keeps its value\n * and squares up via `aspectRatio: '1 / 1'`, the other axis explicitly\n * `'auto'` (never `undefined` — `Skeleton`'s own default, a fixed `40`,\n * would silently win otherwise).\n */\nconst placeholderAxis = (theme: Theme, width: Length, height: Length, resolve: LengthResolver): AxisPair => {\n const w = emptyToUnset(width);\n // `height` always arrives defaulted to the literal `'auto'` when unset\n // (`LAZY_IMAGE_DEFAULTS`) — indistinguishable from an explicit `\"auto\"`,\n // and no distinction is needed: both mean \"no fixed height requested\".\n const h = height === 'auto' ? undefined : emptyToUnset(height);\n\n if (w === undefined && h === undefined) {\n const field = fieldHeight(theme);\n return { width: field, height: field };\n }\n if (h === undefined) {\n if (isRelativeLength(w)) return { width: resolve(theme, w), height: 'auto', aspectRatio: '1 / 1' };\n const resolved = resolve(theme, w);\n return { width: resolved, height: resolved };\n }\n if (w === undefined) {\n if (isRelativeLength(h)) return { width: 'auto', height: resolve(theme, h), aspectRatio: '1 / 1' };\n const resolved = resolve(theme, h);\n return { width: resolved, height: resolved };\n }\n return { width: resolve(theme, w), height: resolve(theme, h) };\n};\n\n/**\n * `ImageContainer`'s own axis: the ordinary `orDefault(...,'auto')` in every\n * state, except a ReactNode `fallback` while showing — the one case where\n * the container is the only thing that CAN fix its own collapse\n * (`FallbackContainer` is `position: absolute`, never feeding shrink-to-fit).\n */\nconst containerAxisFor = (theme: Theme, props: ResolvedLazyImageProps, hasError: boolean): AxisPair => {\n const { width, height, fallback } = props;\n const needsPlaceholderSize = hasError && Boolean(fallback) && typeof fallback !== 'string';\n return needsPlaceholderSize\n ? placeholderAxis(theme, width, height, sxLength)\n : { width: sxLength(theme, orDefault(width, 'auto')), height: sxLength(theme, orDefault(height, 'auto')) };\n};\n\n/** The box the image occupies, as CSS, shared by the real image and every stand-in for it. */\ninterface BoxMetrics {\n width?: string;\n height?: string;\n objectFit: NonNullable<LazyImageProps['objectFit']>;\n objectPosition: string;\n borderRadius?: string;\n}\n\ninterface IndicatorProps {\n props: ResolvedLazyImageProps;\n metrics: BoxMetrics;\n}\n\nconst SkeletonIndicator: React.FC<IndicatorProps> = ({ props }) => {\n const theme = useTheme();\n // FUT-2805: replaces the old literal `'100%'`/`'auto'` fallbacks, which\n // collapsed to 0 in a shrink-to-fit `ImageContainer` with nothing to\n // resolve against.\n const { width, height, aspectRatio } = placeholderAxis(theme, props.width, props.height, innerLength);\n return (\n <Skeleton\n // FUT-2774 #5: `skeletonProps.variant` was typed but never read — the\n // variant was hard-coded regardless of what a caller passed.\n variant={props.skeletonProps.variant ?? 'rectangular'}\n width={width}\n height={height}\n style={aspectRatio ? { aspectRatio } : undefined}\n // FUT-2774 #5: `||` reads a caller's `false` the same as \"unset\", so\n // `skeletonProps.animation={false}` could never turn the animation off.\n animation={props.skeletonProps.animation ?? 'pulse'}\n intensity={props.skeletonProps.intensity}\n borderRadius={styleLength(theme, props.borderRadius)}\n data-testid={`${props['data-testid']}-skeleton`}\n />\n );\n};\n\nconst SpinnerIndicator: React.FC<IndicatorProps> = ({ props }) => {\n const theme = useTheme();\n const { spinnerProps } = props;\n\n return (\n <SpinnerOverlay>\n <CircularProgress\n // FUT-2774 #5: `||` read `spinnerProps.size`/`thickness` of `0` the\n // same as unset — the same class of bug FUT-2669 fixed for\n // `width`/`height`, missed here.\n size={styleLength(theme, spinnerProps.size ?? 40)}\n thickness={spinnerProps.thickness ?? 4}\n sx={{ color: spinnerProps.color || theme.palette.primary.main }}\n data-testid={`${props['data-testid']}-spinner`}\n />\n </SpinnerOverlay>\n );\n};\n\n/**\n * The placeholder sits in the box's flow and gives the box its size: the box's\n * own when one is set, the placeholder's when not. The real image is drawn over\n * it (`OVER_PLACEHOLDER`) until it has faded in. Its load and error are not the\n * image's, so neither reaches the caller; a failing one just retires.\n */\nconst PlaceholderIndicator: React.FC<IndicatorProps & { onError: () => void }> = ({\n props,\n metrics,\n onError,\n}) => {\n if (!props.placeholder) return null;\n\n return (\n <StyledImage\n src={props.placeholder}\n alt={`${props.alt} (loading)`}\n style={metrics}\n decoding={props.decoding}\n loading={props.lazy ? 'lazy' : props.loading}\n onError={onError}\n data-testid={`${props['data-testid']}-placeholder`}\n />\n );\n};\n\nconst LoadingIndicator: React.FC<\n IndicatorProps & { kind: NonNullable<LazyImageProps['loadingState']>; onPlaceholderError: () => void }\n> = ({ kind, onPlaceholderError, ...rest }) => {\n switch (kind) {\n case 'skeleton':\n return <SkeletonIndicator {...rest} />;\n case 'spinner':\n return <SpinnerIndicator {...rest} />;\n case 'placeholder':\n return <PlaceholderIndicator {...rest} onError={onPlaceholderError} />;\n default:\n return null;\n }\n};\n\n/**\n * The real image while the placeholder is up: laid over it and cropped by\n * `objectFit`, so the box never grows to hold both. It takes the flow back\n * when the placeholder goes.\n */\nconst OVER_PLACEHOLDER: React.CSSProperties = {\n position: 'absolute',\n inset: 0,\n width: '100%',\n height: '100%',\n};\n\nconst ErrorFallback: React.FC<IndicatorProps> = ({ props, metrics }) => {\n const theme = useTheme();\n const { alt, fallback, width, height, borderRadius } = props;\n const testId = props['data-testid'];\n\n if (!fallback) return null;\n\n if (typeof fallback === 'string') {\n return (\n <StyledImage\n src={fallback}\n alt={`${alt} (fallback)`}\n style={metrics}\n fadeIn={false}\n isLoaded={true}\n data-testid={`${testId}-fallback`}\n />\n );\n }\n\n return (\n <FallbackContainer\n sx={{\n // FUT-2774 #4 (see `emptyToUnset`); the collapse is fixed by\n // `LazyImage` giving `ImageContainer` ITSELF a size now\n // (`containerAxisFor`) — this `position: absolute` box just fills it.\n width: innerLength(theme, emptyToUnset(width)),\n height: innerLength(theme, orDefault(height, 'auto')),\n borderRadius: styleLength(theme, borderRadius),\n }}\n data-testid={`${testId}-fallback`}\n >\n {fallback}\n </FallbackContainer>\n );\n};\n\n/**\n * LazyImage component with enhanced features for optimized image loading\n * Supports lazy loading, placeholders, error handling, and various loading states\n */\nexport const LazyImage = React.memo<LazyImageProps>(function LazyImage(rawProps) {\n const props = resolveLazyImageProps(rawProps);\n const theme = useTheme();\n const {\n state,\n containerRef,\n effectiveLoadingState,\n handleImageLoad,\n handleImageError,\n handlePlaceholderError,\n showImage,\n showLoading,\n showPlaceholder,\n } = useLazyImage(props);\n\n const { width, height, borderRadius, alt } = props;\n const testId = props['data-testid'];\n const metrics: BoxMetrics = {\n // FUT-2774 #4 (see `emptyToUnset`): `metrics` also sizes the REAL `<img>`,\n // where an unset width means \"the image's own intrinsic size\" —\n // `brand-link.tsx`'s logo relies on exactly that. `height`'s `'auto'`\n // fallback has no such live case to protect: a percentage height against\n // an auto-height containing block computes to `auto` regardless, so\n // sharing `SkeletonIndicator`'s fallback changes nothing observable.\n width: innerLength(theme, emptyToUnset(width)),\n height: innerLength(theme, orDefault(height, 'auto')),\n objectFit: props.objectFit,\n objectPosition: props.objectPosition,\n borderRadius: styleLength(theme, borderRadius),\n };\n\n const containerAxis = containerAxisFor(theme, props, state.hasError);\n\n return (\n <ImageContainer\n ref={containerRef}\n className={props.className}\n sx={{\n width: containerAxis.width,\n height: containerAxis.height,\n aspectRatio: containerAxis.aspectRatio,\n // The same px length the image gets (`metrics`): in `sx` a bare number\n // would be a multiple of `shape.borderRadius`, and this box clips (FUT-2656).\n borderRadius: metrics.borderRadius,\n }}\n data-testid={testId}\n >\n {showLoading && (\n <LoadingIndicator\n kind={effectiveLoadingState}\n props={props}\n metrics={metrics}\n onPlaceholderError={handlePlaceholderError}\n />\n )}\n\n {showImage && (\n <StyledImage\n src={state.currentSrc || undefined}\n alt={alt}\n onLoad={handleImageLoad}\n onError={handleImageError}\n fadeIn={props.fadeIn}\n fadeInDuration={props.fadeInDuration}\n isLoaded={!state.isLoading}\n decoding={props.decoding}\n loading={props.lazy ? 'lazy' : props.loading}\n style={{ ...metrics, ...props.sx, ...(showPlaceholder && OVER_PLACEHOLDER) }}\n aria-label={props['aria-label'] || alt}\n aria-describedby={props['aria-describedby']}\n role={props.role}\n data-testid={`${testId}-img`}\n {...imgPassThrough(props)}\n />\n )}\n\n {state.hasError && <ErrorFallback props={props} metrics={metrics} />}\n </ImageContainer>\n );\n});\n\nLazyImage.displayName = 'LazyImage';\n"],"mappings":"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","names":["LazyImage"]}
|