@12-apps/ui 6.34.0 → 6.35.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 -2
- package/dist/_internal/components/data-display/Alert/Alert.styles.js +2 -1
- package/dist/_internal/components/data-display/AlertDialog/AlertDialog.js +2 -1
- package/dist/_internal/components/data-display/AsyncStateContainer/AsyncStateContainer.js +3 -2
- package/dist/_internal/components/data-display/Avatar/Avatar.js +3 -8
- package/dist/_internal/components/data-display/Avatar/Avatar.view.js +2 -7
- package/dist/_internal/components/data-display/Badge/Badge.js +5 -5
- package/dist/_internal/components/data-display/Badge/Badge.styles.js +3 -3
- package/dist/_internal/components/data-display/Badge/Badge.variants.js +2 -1
- package/dist/_internal/components/data-display/Badge/BadgeContent.js +4 -4
- package/dist/_internal/components/data-display/Banner/Banner.js +3 -2
- package/dist/_internal/components/data-display/Banner/Banner.styles.js +2 -1
- package/dist/_internal/components/data-display/CardKit/CardKebab.js +5 -4
- package/dist/_internal/components/data-display/CardKit/card-actions-context.js +4 -3
- package/dist/_internal/components/data-display/CardKit/list-card-parts.js +2 -1
- package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +12 -11
- package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +9 -8
- package/dist/_internal/components/data-display/Carousel/Carousel.chrome.js +3 -3
- package/dist/_internal/components/data-display/Carousel/Carousel.js +5 -5
- package/dist/_internal/components/data-display/Carousel/Carousel.parts.js +2 -2
- package/dist/_internal/components/data-display/Carousel/Carousel.styles.js +2 -2
- package/dist/_internal/components/data-display/Chart/Chart.js +5 -5
- package/dist/_internal/components/data-display/Chart/SpecChart.js +6 -6
- package/dist/_internal/components/data-display/Chart/chart-context.js +3 -3
- package/dist/_internal/components/data-display/Chart/chart-internals.js +2 -2
- package/dist/_internal/components/data-display/Chart/chart-renderers.js +4 -4
- package/dist/_internal/components/data-display/DataViews/DataViewsBoard.js +3 -2
- package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +60 -59
- package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +76 -75
- package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +5 -4
- package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +10 -9
- package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +9 -8
- package/dist/_internal/components/data-display/DataViews/base-card.js +4 -3
- package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +10 -9
- package/dist/_internal/components/data-display/DataViews/base-list-card-gutters.js +3 -8
- package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +9 -8
- package/dist/_internal/components/data-display/DataViews/base-list-card.js +13 -12
- package/dist/_internal/components/data-display/DataViews/data-views-bar-controls.js +2 -1
- package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +20 -19
- package/dist/_internal/components/data-display/DataViews/data-views-columns-tab.js +3 -2
- package/dist/_internal/components/data-display/DataViews/data-views-columns.js +6 -5
- package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +11 -10
- package/dist/_internal/components/data-display/DataViews/data-views-display-tabs.js +6 -5
- package/dist/_internal/components/data-display/DataViews/data-views-empty.js +5 -4
- package/dist/_internal/components/data-display/DataViews/data-views-export.js +5 -4
- package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +24 -23
- package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +14 -13
- package/dist/_internal/components/data-display/DataViews/data-views-grid-helpers.js +5 -4
- package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +57 -56
- package/dist/_internal/components/data-display/DataViews/data-views-header-row.js +3 -2
- package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +31 -30
- package/dist/_internal/components/data-display/DataViews/data-views-layout-context.js +4 -3
- package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +14 -13
- package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +17 -16
- package/dist/_internal/components/data-display/DataViews/data-views-pagination.js +4 -3
- package/dist/_internal/components/data-display/DataViews/data-views-preset-chips.js +2 -1
- package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +4 -3
- package/dist/_internal/components/data-display/DataViews/data-views-scope-tabs.js +6 -5
- package/dist/_internal/components/data-display/DataViews/data-views-scopes.js +2 -1
- package/dist/_internal/components/data-display/DataViews/data-views-search.js +2 -1
- package/dist/_internal/components/data-display/DataViews/data-views-select-all-strip.js +5 -4
- package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +24 -23
- package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +26 -25
- package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +23 -22
- package/dist/_internal/components/data-display/DataViews/data-views-view-nav.js +5 -4
- package/dist/_internal/components/data-display/DataViews/list-card-cells.js +2 -1
- package/dist/_internal/components/data-display/DataViews/list-card-rails.js +6 -5
- package/dist/_internal/components/data-display/DataViews/save-view-preview.js +3 -2
- package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +8 -7
- package/dist/_internal/components/data-display/DescriptionItem/DescriptionItem.js +3 -2
- package/dist/_internal/components/data-display/ErrorState/ErrorState.js +2 -1
- package/dist/_internal/components/data-display/FleetMap/FleetBody.js +7 -6
- package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +6 -5
- package/dist/_internal/components/data-display/FleetMap/FleetMap.js +9 -9
- package/dist/_internal/components/data-display/InteractiveTooltip/InteractiveTooltip.js +3 -2
- package/dist/_internal/components/data-display/InteractiveTooltip/InteractiveTooltip.styles.js +2 -1
- package/dist/_internal/components/data-display/Lightbox/Lightbox.constants.js +2 -1
- package/dist/_internal/components/data-display/Lightbox/Lightbox.hooks.js +3 -2
- package/dist/_internal/components/data-display/Lightbox/Lightbox.js +9 -8
- package/dist/_internal/components/data-display/Lightbox/LightboxControls.js +3 -2
- package/dist/_internal/components/data-display/Lightbox/LightboxOverlay.js +4 -3
- package/dist/_internal/components/data-display/Lightbox/LightboxStage.js +3 -2
- package/dist/_internal/components/data-display/Lightbox/LightboxThumbnails.js +3 -2
- package/dist/_internal/components/data-display/Lightbox/useLightbox.js +4 -3
- package/dist/_internal/components/data-display/MapPreview/MapDecorations.js +2 -1
- package/dist/_internal/components/data-display/MapPreview/MapMarkers.js +2 -1
- package/dist/_internal/components/data-display/MapPreview/MapPreview.js +5 -4
- package/dist/_internal/components/data-display/MapPreview/StaticMapView.js +3 -2
- package/dist/_internal/components/data-display/Progress/Progress.js +3 -2
- package/dist/_internal/components/data-display/Progress/Progress.styles.js +2 -1
- package/dist/_internal/components/data-display/SectionOnboarding/SectionOnboarding.js +3 -2
- package/dist/_internal/components/data-display/Sheet/Sheet.body.js +1 -1
- package/dist/_internal/components/data-display/Sheet/Sheet.js +1 -1
- package/dist/_internal/components/data-display/Sheet/Sheet.styles.js +1 -1
- package/dist/_internal/components/data-display/StatCard/StatCard.js +2 -1
- package/dist/_internal/components/data-display/Stepper/Stepper.js +2 -1
- package/dist/_internal/components/data-display/Table/Table.js +3 -2
- package/dist/_internal/components/data-display/Table/Table.styles.js +2 -1
- package/dist/_internal/components/data-display/Timeline/Timeline.js +3 -2
- package/dist/_internal/components/data-display/Timeline/TimelineRow.js +2 -1
- package/dist/_internal/components/data-display/TimingDiagram/TimingDiagram.js +3 -2
- package/dist/_internal/components/data-display/TimingDiagram/TimingDiagram.views.js +2 -1
- package/dist/_internal/components/data-display/Tooltip/Tooltip.js +2 -1
- package/dist/_internal/components/data-display/index.js +55 -55
- 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 +7 -6
- package/dist/_internal/components/feedback/ConfirmAction/with-confirmation.js +4 -3
- package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +6 -5
- package/dist/_internal/components/feedback/Sonner/Sonner.js +3 -2
- package/dist/_internal/components/feedback/Sonner/SonnerToast.js +2 -1
- package/dist/_internal/components/feedback/index.js +13 -12
- package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +4 -3
- package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +3 -2
- package/dist/_internal/components/form/AddressAutocomplete/AddressOption.js +2 -1
- package/dist/_internal/components/form/Button/Button.js +3 -2
- package/dist/_internal/components/form/Button/Button.styles.js +2 -1
- package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +8 -7
- package/dist/_internal/components/form/CategorySelect/CategoryPanelFoot.js +3 -2
- package/dist/_internal/components/form/CategorySelect/CategoryPanelHead.js +3 -2
- package/dist/_internal/components/form/CategorySelect/CategoryPanelList.js +4 -3
- package/dist/_internal/components/form/CategorySelect/CategoryQuickActions.js +2 -1
- package/dist/_internal/components/form/CategorySelect/CategoryRows.js +3 -2
- package/dist/_internal/components/form/CategorySelect/CategorySelect.js +11 -10
- package/dist/_internal/components/form/CategorySelect/CategorySelect.styles.js +2 -1
- package/dist/_internal/components/form/CategorySelect/CategoryTrigger.js +3 -2
- package/dist/_internal/components/form/CepField/CepField.js +3 -2
- package/dist/_internal/components/form/Checkbox/Checkbox.js +2 -7
- package/dist/_internal/components/form/CodeEditor/CodeEditor.js +3 -2
- package/dist/_internal/components/form/CodeEditor/CodeEditorToolbar.js +2 -1
- package/dist/_internal/components/form/Command/Command.js +3 -3
- package/dist/_internal/components/form/Command/Command.styles.js +2 -2
- package/dist/_internal/components/form/CreatableSelect/CreatableSelect.js +3 -2
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +3 -2
- package/dist/_internal/components/form/DateRangePicker/DateRangePickerQuickList.js +2 -1
- package/dist/_internal/components/form/Form/Form.js +2 -1
- package/dist/_internal/components/form/HeaderActions/HeaderActions.js +3 -2
- package/dist/_internal/components/form/HeaderButton/HeaderButton.js +2 -1
- package/dist/_internal/components/form/InputOTP/InputOTP.js +3 -2
- package/dist/_internal/components/form/InputOTP/InputOTP.styles.js +2 -1
- package/dist/_internal/components/form/Label/Label.js +3 -3
- package/dist/_internal/components/form/Label/Label.styles.js +2 -2
- package/dist/_internal/components/form/Menubar/Menubar.item.js +3 -3
- package/dist/_internal/components/form/Menubar/Menubar.js +5 -5
- package/dist/_internal/components/form/Menubar/Menubar.styles.js +2 -2
- package/dist/_internal/components/form/Menubar/Menubar.toolbar.js +4 -4
- package/dist/_internal/components/form/PasswordStrength/PasswordStrength.helpers.js +1 -1
- package/dist/_internal/components/form/PasswordStrength/PasswordStrength.js +3 -2
- package/dist/_internal/components/form/PhoneInput/PhoneInput.js +2 -1
- package/dist/_internal/components/form/RadioGroup/RadioGroup.js +4 -3
- package/dist/_internal/components/form/RadioGroup/RadioGroup.styles.js +2 -1
- package/dist/_internal/components/form/RadioGroup/RadioGroup.variants.js +3 -2
- package/dist/_internal/components/form/RichTextEditor/RichTextEditor.js +2 -1
- package/dist/_internal/components/form/SearchPalette/SearchPalette.js +3 -2
- package/dist/_internal/components/form/SearchPalette/SearchPalette.parts.js +2 -1
- package/dist/_internal/components/form/Slider/Slider.js +3 -2
- package/dist/_internal/components/form/Slider/Slider.styles.js +2 -1
- package/dist/_internal/components/form/Switch/Switch.js +4 -3
- package/dist/_internal/components/form/Switch/Switch.parts.js +3 -2
- package/dist/_internal/components/form/Switch/Switch.styles.js +2 -1
- package/dist/_internal/components/form/Textarea/Textarea.js +2 -1
- package/dist/_internal/components/form/Textarea/TextareaRichEditor.js +5 -2
- package/dist/_internal/components/form/Textarea/TextareaRichEditor.js.map +1 -1
- package/dist/_internal/components/form/Toggle/Toggle.js +3 -2
- package/dist/_internal/components/form/Toggle/Toggle.styles.js +2 -1
- package/dist/_internal/components/form/ToggleGroup/ToggleGroup.js +2 -1
- package/dist/_internal/components/form/UploadButton/UploadButton.js +3 -2
- package/dist/_internal/components/form/UploadButton/UploadButton.parts.js +2 -1
- package/dist/_internal/components/form/index.js +43 -43
- package/dist/_internal/components/form/total-form/Fields/CategoryField.js +12 -11
- package/dist/_internal/components/form/total-form/Fields/CepField.js +4 -3
- package/dist/_internal/components/form/total-form/Fields/SelectField.js +3 -2
- package/dist/_internal/components/form/total-form/Fields/TextField.js +3 -2
- package/dist/_internal/components/form/total-form/Fields/ToggleField.js +4 -3
- package/dist/_internal/components/form/total-form/Fields/index.js +19 -18
- package/dist/_internal/components/form/total-form/FormContainer.js +3 -2
- package/dist/_internal/components/form/total-form/SubmitButton.js +4 -3
- package/dist/_internal/components/index.js +146 -146
- package/dist/_internal/components/layout/Box/Box.js +1 -1
- package/dist/_internal/components/layout/ContentToolbar/ColumnsMenu.js +2 -1
- package/dist/_internal/components/layout/ContentToolbar/ContentToolbar.js +2 -1
- package/dist/_internal/components/layout/ContentToolbar/FilterTrigger.js +2 -1
- package/dist/_internal/components/layout/ContentToolbar/MultiSelectDropdown.js +3 -2
- package/dist/_internal/components/layout/ContentToolbar/MultiSelectTriggers.js +2 -1
- package/dist/_internal/components/layout/ContentToolbar/SavedViewsMenu.js +2 -1
- package/dist/_internal/components/layout/ContentToolbar/SortByDropdown.js +2 -1
- package/dist/_internal/components/layout/ContentToolbar/ViewSelector.js +2 -1
- package/dist/_internal/components/layout/Dashboard/Dashboard.js +5 -4
- package/dist/_internal/components/layout/Dashboard/DashboardParts.js +4 -3
- package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.items.js +3 -2
- package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +8 -7
- package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.rail.js +4 -3
- package/dist/_internal/components/layout/SettingsLayout/SettingsPanel.js +5 -4
- package/dist/_internal/components/layout/SettingsLayout/SettingsSectionChips.js +3 -2
- package/dist/_internal/components/layout/SettingsLayout/SettingsSectionHeader.js +2 -1
- package/dist/_internal/components/layout/SettingsLayout/SettingsStatusMarker.js +2 -1
- package/dist/_internal/components/layout/Stack/Stack.js +1 -1
- package/dist/_internal/components/layout/TableFilter/TableFilter.js +2 -1
- package/dist/_internal/components/layout/index.js +14 -13
- package/dist/_internal/components/navigation/AppHeader/AppHeader.brand.js +2 -1
- package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +4 -4
- package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +3 -3
- package/dist/_internal/components/navigation/AppHeader/AppHeader.js +2 -1
- package/dist/_internal/components/navigation/Breadcrumbs/BreadcrumbEntry.js +3 -2
- package/dist/_internal/components/navigation/Breadcrumbs/Breadcrumbs.js +4 -3
- package/dist/_internal/components/navigation/Breadcrumbs/Breadcrumbs.styles.js +2 -1
- package/dist/_internal/components/navigation/CommandPalette/CommandPalette.js +4 -3
- package/dist/_internal/components/navigation/CommandPalette/CommandPaletteResults.js +3 -2
- package/dist/_internal/components/navigation/CommandPalette/ShortcutChip.js +2 -1
- package/dist/_internal/components/navigation/ContextMenu/ContextMenu.js +2 -1
- package/dist/_internal/components/navigation/DropdownMenu/DropdownMenu.js +2 -1
- package/dist/_internal/components/navigation/NavigationMenu/NavigationMegaSection.js +5 -4
- package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.js +7 -6
- package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.shell.js +3 -2
- package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.styles.js +2 -1
- package/dist/_internal/components/navigation/NavigationMenu/NavigationMenuItem.js +3 -2
- package/dist/_internal/components/navigation/NavigationMenu/NavigationStandardBody.js +5 -4
- package/dist/_internal/components/navigation/Pagination/Pagination.js +3 -2
- package/dist/_internal/components/navigation/Pagination/Pagination.styles.js +2 -1
- package/dist/_internal/components/navigation/Tabs/Tabs.js +3 -2
- package/dist/_internal/components/navigation/Tabs/Tabs.styles.js +2 -1
- package/dist/_internal/components/navigation/index.js +25 -25
- package/dist/_internal/components/typography/Blockquote/Blockquote.js +2 -1
- package/dist/_internal/components/typography/Code/Code.js +2 -1
- package/dist/_internal/components/typography/Paragraph/Paragraph.js +2 -8
- package/dist/_internal/components/typography/Text/Text.js +2 -1
- package/dist/_internal/components/typography/index.js +5 -4
- package/dist/_internal/components/utility/AnimatedIcon/AnimatedIcon.js +3 -2
- package/dist/_internal/components/utility/AnimatedIcon/AnimatedIcon.styles.js +2 -1
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.js +4 -3
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.parts.js +2 -1
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStepRow.js +3 -2
- package/dist/_internal/components/utility/index.js +6 -5
- package/dist/_internal/icons/Icon.js +2 -2
- package/dist/_internal/provider/UiProvider.js +1 -1
- package/dist/_internal/provider/mui-bridge.js +1 -1
- package/dist/_internal/provider/use-ui-theme.js +1 -1
- package/dist/_internal/social-login-button/social-login-button.js +5 -4
- package/dist/_internal/user-avatar/user-avatar.js +7 -6
- package/dist/charts.js +6 -6
- package/dist/{chunk-DL6N7W6P.js → chunk-24NXQG5F.js} +5 -2
- package/dist/chunk-24NXQG5F.js.map +1 -0
- package/dist/{chunk-YVDBOVHP.js → chunk-2AKQPXSJ.js} +2 -2
- package/dist/{chunk-GVOMTCLS.js → chunk-2B76FIMN.js} +5 -2
- package/dist/chunk-2B76FIMN.js.map +1 -0
- package/dist/{chunk-PRVK3U6U.js → chunk-2CTTASUD.js} +2 -2
- package/dist/{chunk-B443IIQG.js → chunk-2E2WOBID.js} +7 -4
- package/dist/chunk-2E2WOBID.js.map +1 -0
- package/dist/{chunk-IPPTOL53.js → chunk-2HVNPWFV.js} +7 -3
- package/dist/chunk-2HVNPWFV.js.map +1 -0
- package/dist/{chunk-QXTO3G2T.js → chunk-2OIP3T5O.js} +5 -2
- package/dist/chunk-2OIP3T5O.js.map +1 -0
- package/dist/{chunk-PYJI2YGJ.js → chunk-2PBT2HQH.js} +6 -6
- package/dist/chunk-2PBT2HQH.js.map +1 -0
- package/dist/{chunk-Z2EOT77M.js → chunk-2PWVPTS3.js} +7 -7
- package/dist/chunk-2PWVPTS3.js.map +1 -0
- package/dist/{chunk-HH5CNSJP.js → chunk-2WGMMFGV.js} +13 -10
- package/dist/chunk-2WGMMFGV.js.map +1 -0
- package/dist/{chunk-Y7ZS724A.js → chunk-37VFEWEN.js} +15 -13
- package/dist/chunk-37VFEWEN.js.map +1 -0
- package/dist/{chunk-G2TCNZYD.js → chunk-3A22SBIU.js} +2 -2
- package/dist/{chunk-A4JH5FAL.js → chunk-3CVTQZQJ.js} +2 -2
- package/dist/{chunk-EWSGWLHN.js → chunk-3D6HXKZM.js} +7 -3
- package/dist/chunk-3D6HXKZM.js.map +1 -0
- package/dist/{chunk-GJF3CVIE.js → chunk-3GQ6PNEM.js} +3 -3
- package/dist/chunk-3GQ6PNEM.js.map +1 -0
- package/dist/{chunk-4V7DBU4H.js → chunk-3TVUW7QE.js} +8 -3
- package/dist/chunk-3TVUW7QE.js.map +1 -0
- package/dist/{chunk-SZB2Z6QN.js → chunk-3VMGE7CU.js} +6 -3
- package/dist/chunk-3VMGE7CU.js.map +1 -0
- package/dist/{chunk-HEVST4CS.js → chunk-4GYEIWQP.js} +6 -3
- package/dist/chunk-4GYEIWQP.js.map +1 -0
- package/dist/{chunk-2XGGHYEA.js → chunk-4LQZH4PU.js} +2 -2
- package/dist/{chunk-ZF3JGIJD.js → chunk-4M34ALEP.js} +3 -3
- package/dist/{chunk-OT5DVKXP.js → chunk-4WQ3YXQL.js} +3 -3
- package/dist/{chunk-5LPQ6T5S.js → chunk-56QVP2MU.js} +7 -4
- package/dist/chunk-56QVP2MU.js.map +1 -0
- package/dist/{chunk-DOXNMWUU.js → chunk-57IB5NTM.js} +2 -2
- package/dist/{chunk-OZAP2BEP.js → chunk-57JY4OI2.js} +9 -6
- package/dist/chunk-57JY4OI2.js.map +1 -0
- package/dist/{chunk-YU72SS43.js → chunk-5CKDRLRN.js} +7 -4
- package/dist/chunk-5CKDRLRN.js.map +1 -0
- package/dist/{chunk-N4JEQJBL.js → chunk-5IXHJXJX.js} +2 -2
- package/dist/{chunk-EHCUOX6R.js → chunk-5RP3KXC7.js} +9 -6
- package/dist/chunk-5RP3KXC7.js.map +1 -0
- package/dist/{chunk-RPBA4WH7.js → chunk-5SJWDABY.js} +16 -13
- package/dist/chunk-5SJWDABY.js.map +1 -0
- package/dist/{chunk-YA4YH6WP.js → chunk-5ZQUJ7LT.js} +3 -3
- package/dist/{chunk-Q4KFGRBV.js → chunk-5ZTQTJAJ.js} +5 -5
- package/dist/{chunk-52APLKAG.js → chunk-65YAR3OZ.js} +4 -4
- package/dist/chunk-65YAR3OZ.js.map +1 -0
- package/dist/{chunk-5264DI34.js → chunk-6DC5SVHM.js} +2 -2
- package/dist/{chunk-DQIRSUEK.js → chunk-6KL2CJBO.js} +2 -2
- package/dist/{chunk-63UQJVBW.js → chunk-6QLPSMTA.js} +10 -7
- package/dist/chunk-6QLPSMTA.js.map +1 -0
- package/dist/{chunk-H3R6WSYU.js → chunk-6SKXV236.js} +5 -2
- package/dist/chunk-6SKXV236.js.map +1 -0
- package/dist/{chunk-QJ7I5C4D.js → chunk-6SS5C74Q.js} +6 -3
- package/dist/chunk-6SS5C74Q.js.map +1 -0
- package/dist/{chunk-MAUZCOBB.js → chunk-6SYFPRTT.js} +9 -6
- package/dist/chunk-6SYFPRTT.js.map +1 -0
- package/dist/{chunk-BTVIHTAL.js → chunk-72DKEBJM.js} +8 -5
- package/dist/chunk-72DKEBJM.js.map +1 -0
- package/dist/{chunk-UIKDWXHX.js → chunk-73HBIIRB.js} +6 -6
- package/dist/{chunk-KDIPBEVE.js → chunk-7BZTZ2WG.js} +9 -6
- package/dist/chunk-7BZTZ2WG.js.map +1 -0
- package/dist/{chunk-F4RR4666.js → chunk-7D7CJRL7.js} +5 -2
- package/dist/chunk-7D7CJRL7.js.map +1 -0
- package/dist/{chunk-GL5CYMGK.js → chunk-7DN4UXJ3.js} +9 -6
- package/dist/chunk-7DN4UXJ3.js.map +1 -0
- package/dist/{chunk-DJ2KYLHE.js → chunk-7EQCZO56.js} +13 -7
- package/dist/chunk-7EQCZO56.js.map +1 -0
- package/dist/{chunk-3CBL5FWS.js → chunk-7HFGVT3G.js} +4 -8
- package/dist/chunk-7HFGVT3G.js.map +1 -0
- package/dist/{chunk-COK5VOXC.js → chunk-7LIXQZBG.js} +3 -3
- package/dist/{chunk-GQ4I6Z32.js → chunk-7VJH4FYU.js} +9 -6
- package/dist/chunk-7VJH4FYU.js.map +1 -0
- package/dist/{chunk-K2XK45HG.js → chunk-7ZG7T2YN.js} +2 -2
- package/dist/{chunk-HMHCNNNW.js → chunk-7ZWC5CKA.js} +6 -3
- package/dist/chunk-7ZWC5CKA.js.map +1 -0
- package/dist/{chunk-DKILDT72.js → chunk-A2CTAEIS.js} +5 -5
- package/dist/chunk-A2CTAEIS.js.map +1 -0
- package/dist/{chunk-OYYCANKB.js → chunk-A6AKFPIQ.js} +2 -2
- package/dist/{chunk-DPJZFQF2.js → chunk-AATIHNPI.js} +6 -3
- package/dist/chunk-AATIHNPI.js.map +1 -0
- package/dist/{chunk-DJEGLKW3.js → chunk-AI7NVWIG.js} +9 -6
- package/dist/chunk-AI7NVWIG.js.map +1 -0
- package/dist/{chunk-O63WG6YJ.js → chunk-AJSPLHG4.js} +2 -2
- package/dist/{chunk-CY6HHLYM.js → chunk-AQSX3YH2.js} +4 -4
- package/dist/{chunk-2CEV746H.js → chunk-BBXJQI4S.js} +6 -2
- package/dist/chunk-BBXJQI4S.js.map +1 -0
- package/dist/{chunk-JGDS2SJZ.js → chunk-BD2GGIGS.js} +3 -3
- package/dist/{chunk-SQSFMZTF.js → chunk-BLJDCMFU.js} +10 -6
- package/dist/chunk-BLJDCMFU.js.map +1 -0
- package/dist/{chunk-PYPFDRX4.js → chunk-BNU4RLEC.js} +23 -18
- package/dist/chunk-BNU4RLEC.js.map +1 -0
- package/dist/{chunk-7WK2L3ZO.js → chunk-BO2SDMNQ.js} +2 -2
- package/dist/{chunk-ZSRLRDTP.js → chunk-BXAL7OIS.js} +14 -11
- package/dist/chunk-BXAL7OIS.js.map +1 -0
- package/dist/{chunk-PC2MVKYW.js → chunk-C6FRVGMC.js} +2 -2
- package/dist/{chunk-KCQGJPLO.js → chunk-C6NI3FAV.js} +3 -3
- package/dist/{chunk-YSFQHZ74.js → chunk-C7TCBAVX.js} +2 -2
- package/dist/{chunk-B3OMUMZO.js → chunk-CJHP6E34.js} +10 -6
- package/dist/chunk-CJHP6E34.js.map +1 -0
- package/dist/{chunk-7IQDLEB5.js → chunk-CMTR3WEA.js} +7 -5
- package/dist/chunk-CMTR3WEA.js.map +1 -0
- package/dist/{chunk-6VP2L3DJ.js → chunk-COYGTEN5.js} +6 -3
- package/dist/chunk-COYGTEN5.js.map +1 -0
- package/dist/{chunk-4M6CEQVK.js → chunk-CPTY6UZ6.js} +6 -3
- package/dist/chunk-CPTY6UZ6.js.map +1 -0
- package/dist/{chunk-UXWU5NRC.js → chunk-CRZXSZ5O.js} +2 -2
- package/dist/{chunk-46ADSOCF.js → chunk-CS3RKXT5.js} +2 -2
- package/dist/{chunk-SVSOUC5S.js → chunk-CSTAQX2B.js} +6 -3
- package/dist/chunk-CSTAQX2B.js.map +1 -0
- package/dist/{chunk-ACHUHT2K.js → chunk-CU4TF7C7.js} +6 -3
- package/dist/chunk-CU4TF7C7.js.map +1 -0
- package/dist/{chunk-PO2RWE7N.js → chunk-D5X4FRYX.js} +2 -2
- package/dist/{chunk-VNHLYDTX.js → chunk-DFCQQN6P.js} +13 -10
- package/dist/chunk-DFCQQN6P.js.map +1 -0
- package/dist/{chunk-XNBN5CVF.js → chunk-DHBYO7AO.js} +6 -3
- package/dist/chunk-DHBYO7AO.js.map +1 -0
- package/dist/{chunk-LCVQOJKG.js → chunk-DMYBTD5Y.js} +2 -2
- package/dist/{chunk-GJRBK564.js → chunk-DRE6DSJ7.js} +3 -3
- package/dist/{chunk-TK4NUNN6.js → chunk-DYVAOEW4.js} +6 -3
- package/dist/chunk-DYVAOEW4.js.map +1 -0
- package/dist/{chunk-JIKWZDNK.js → chunk-DZHN5FFX.js} +5 -2
- package/dist/chunk-DZHN5FFX.js.map +1 -0
- package/dist/{chunk-EDBTCEPC.js → chunk-E6YBXAZN.js} +6 -3
- package/dist/chunk-E6YBXAZN.js.map +1 -0
- package/dist/{chunk-D3IXNCEU.js → chunk-E7MSDXED.js} +5 -2
- package/dist/chunk-E7MSDXED.js.map +1 -0
- package/dist/{chunk-BHLGZLXQ.js → chunk-EDO2WS5B.js} +2 -2
- package/dist/{chunk-HWEAW4LF.js → chunk-EFHIMCJN.js} +10 -7
- package/dist/chunk-EFHIMCJN.js.map +1 -0
- package/dist/{chunk-5CIXQBLV.js → chunk-EFV5QJNM.js} +8 -5
- package/dist/chunk-EFV5QJNM.js.map +1 -0
- package/dist/{chunk-FYSYALTY.js → chunk-EFVOT3G5.js} +2 -2
- package/dist/{chunk-IBWVEARQ.js → chunk-EL7CMURV.js} +13 -10
- package/dist/chunk-EL7CMURV.js.map +1 -0
- package/dist/{chunk-7E4X4J2M.js → chunk-EOW2ECB3.js} +2 -2
- package/dist/{chunk-6MSSCBI3.js → chunk-EXZSHZRS.js} +2 -2
- package/dist/{chunk-XYK3HXZY.js → chunk-F5KEWLZK.js} +2 -2
- package/dist/{chunk-7VIINULX.js → chunk-F7HQVKIR.js} +6 -6
- package/dist/{chunk-WVPA3ONO.js → chunk-FXNYV5Z6.js} +2 -2
- package/dist/{chunk-2LG5TEFV.js → chunk-FYTLKHEN.js} +14 -11
- package/dist/chunk-FYTLKHEN.js.map +1 -0
- package/dist/{chunk-OFU66DRT.js → chunk-GE2EKMDT.js} +11 -8
- package/dist/chunk-GE2EKMDT.js.map +1 -0
- package/dist/{chunk-EUDIQQWE.js → chunk-GEXM6DNR.js} +2 -2
- package/dist/{chunk-E6OILRUU.js → chunk-GGWICBJD.js} +2 -2
- package/dist/{chunk-67QSLTT7.js → chunk-GIRRCEVH.js} +4 -4
- package/dist/{chunk-LGZ4EIWV.js → chunk-GUVBR62X.js} +2 -2
- package/dist/{chunk-SNTDLS4A.js → chunk-GVLMG5WQ.js} +7 -4
- package/dist/chunk-GVLMG5WQ.js.map +1 -0
- package/dist/{chunk-VNYP2RMN.js → chunk-GVLZZCSX.js} +2 -2
- package/dist/{chunk-74LYLKO2.js → chunk-GW64UQXI.js} +8 -5
- package/dist/chunk-GW64UQXI.js.map +1 -0
- package/dist/{chunk-D6RKXNLE.js → chunk-GXCOXJS3.js} +3 -3
- package/dist/{chunk-CRDOMIEG.js → chunk-H6YVO55T.js} +9 -6
- package/dist/chunk-H6YVO55T.js.map +1 -0
- package/dist/{chunk-BIIAMH47.js → chunk-HAQMKV5P.js} +2 -2
- package/dist/{chunk-BOU3HR4C.js → chunk-HBICO6AX.js} +11 -9
- package/dist/chunk-HBICO6AX.js.map +1 -0
- package/dist/{chunk-7QLHYUDW.js → chunk-HC5ZSCRG.js} +9 -6
- package/dist/chunk-HC5ZSCRG.js.map +1 -0
- package/dist/{chunk-XOL2QCSP.js → chunk-HJWOB62A.js} +11 -8
- package/dist/chunk-HJWOB62A.js.map +1 -0
- package/dist/{chunk-NMX3JAAB.js → chunk-HXEBKOSM.js} +13 -10
- package/dist/chunk-HXEBKOSM.js.map +1 -0
- package/dist/{chunk-5QTMJ2RU.js → chunk-I2CRLUS7.js} +8 -5
- package/dist/chunk-I2CRLUS7.js.map +1 -0
- package/dist/{chunk-VMZ3JJGG.js → chunk-I62ALI7F.js} +3 -3
- package/dist/{chunk-JKNLKUCX.js → chunk-I6EVBLFX.js} +11 -8
- package/dist/chunk-I6EVBLFX.js.map +1 -0
- package/dist/{chunk-UH27I2EJ.js → chunk-IUCTYNIR.js} +5 -2
- package/dist/chunk-IUCTYNIR.js.map +1 -0
- package/dist/{chunk-3LNKBZTG.js → chunk-IWOVENC3.js} +2 -2
- package/dist/{chunk-V26IDPL4.js → chunk-J4NXTSJY.js} +6 -3
- package/dist/chunk-J4NXTSJY.js.map +1 -0
- package/dist/{chunk-DSIJEJQ7.js → chunk-JFBEZXNL.js} +3 -3
- package/dist/{chunk-TAB6AIPN.js → chunk-JFEEV3XI.js} +3 -3
- package/dist/{chunk-HRHPRIGT.js → chunk-JHEGDDZQ.js} +8 -5
- package/dist/chunk-JHEGDDZQ.js.map +1 -0
- package/dist/{chunk-V6FED3RS.js → chunk-JOR6E23V.js} +2 -2
- package/dist/{chunk-YCGZSKCV.js → chunk-JWK4GI2I.js} +2 -2
- package/dist/{chunk-DELT2W42.js → chunk-JYRQBZEV.js} +2 -2
- package/dist/{chunk-2KLT22S3.js → chunk-K7WSPGI7.js} +15 -7
- package/dist/chunk-K7WSPGI7.js.map +1 -0
- package/dist/{chunk-DY7VTAYO.js → chunk-KE5MX4PI.js} +2 -2
- package/dist/{chunk-3EDZU2H7.js → chunk-KH25WUSX.js} +9 -5
- package/dist/chunk-KH25WUSX.js.map +1 -0
- package/dist/{chunk-ECZXTIDR.js → chunk-KK57AHWS.js} +2 -2
- package/dist/{chunk-HUKVX47W.js → chunk-KLMP2BYC.js} +2 -2
- package/dist/{chunk-SQV3HPTZ.js → chunk-KLWW67WP.js} +7 -4
- package/dist/chunk-KLWW67WP.js.map +1 -0
- package/dist/{chunk-VU4BANG7.js → chunk-KTYZRAB7.js} +3 -3
- package/dist/{chunk-JLWAYBOP.js → chunk-L4QCIUTJ.js} +6 -3
- package/dist/chunk-L4QCIUTJ.js.map +1 -0
- package/dist/{chunk-EIJC5DWG.js → chunk-LDDN254Q.js} +4 -4
- package/dist/{chunk-QYUB2RFN.js → chunk-LI6OLYUB.js} +4 -4
- package/dist/{chunk-TNDV33LP.js → chunk-LOJK733T.js} +3 -3
- package/dist/{chunk-32HU5YFB.js → chunk-LWRI6HGT.js} +11 -7
- package/dist/chunk-LWRI6HGT.js.map +1 -0
- package/dist/{chunk-2SGPNJHJ.js → chunk-M5BTIIL7.js} +8 -5
- package/dist/chunk-M5BTIIL7.js.map +1 -0
- package/dist/{chunk-H37GIAAM.js → chunk-MBSYD3ZU.js} +5 -2
- package/dist/chunk-MBSYD3ZU.js.map +1 -0
- package/dist/{chunk-DYMVVVSU.js → chunk-MGC4QOMP.js} +9 -6
- package/dist/chunk-MGC4QOMP.js.map +1 -0
- package/dist/{chunk-JXTEE5G6.js → chunk-MLBKACV6.js} +5 -2
- package/dist/chunk-MLBKACV6.js.map +1 -0
- package/dist/{chunk-4GKDO4YK.js → chunk-MRB6GROF.js} +5 -2
- package/dist/chunk-MRB6GROF.js.map +1 -0
- package/dist/{chunk-ABCP6NS4.js → chunk-MVKYNDT2.js} +8 -5
- package/dist/chunk-MVKYNDT2.js.map +1 -0
- package/dist/{chunk-S52IVFMS.js → chunk-MXZ43UCQ.js} +3 -3
- package/dist/{chunk-UUFHI7J5.js → chunk-NE6XUN5Z.js} +2 -2
- package/dist/{chunk-MH73XQHW.js → chunk-NEGCJNGJ.js} +9 -6
- package/dist/chunk-NEGCJNGJ.js.map +1 -0
- package/dist/{chunk-WXDJBSES.js → chunk-NIS523UM.js} +2 -2
- package/dist/{chunk-LKAVTJMC.js → chunk-NNQLDFKG.js} +8 -5
- package/dist/chunk-NNQLDFKG.js.map +1 -0
- package/dist/{chunk-EKSSKQUW.js → chunk-NPP44TQG.js} +9 -6
- package/dist/chunk-NPP44TQG.js.map +1 -0
- package/dist/{chunk-ZRHSIFWA.js → chunk-NSJVQ5YJ.js} +7 -3
- package/dist/chunk-NSJVQ5YJ.js.map +1 -0
- package/dist/{chunk-HBYWUSPI.js → chunk-NVNZFT5X.js} +7 -4
- package/dist/chunk-NVNZFT5X.js.map +1 -0
- package/dist/{chunk-WGFIIS6Q.js → chunk-OATHOXIU.js} +7 -4
- package/dist/chunk-OATHOXIU.js.map +1 -0
- package/dist/{chunk-KJ3AXHKF.js → chunk-OGTTJKHI.js} +4 -4
- package/dist/{chunk-SCQJV54H.js → chunk-OOSD7363.js} +8 -5
- package/dist/chunk-OOSD7363.js.map +1 -0
- package/dist/{chunk-BHOSWJDL.js → chunk-OWA7GPWR.js} +8 -5
- package/dist/chunk-OWA7GPWR.js.map +1 -0
- package/dist/{chunk-ZSLOXTYJ.js → chunk-OYP27CYE.js} +2 -2
- package/dist/{chunk-PDLJOQO5.js → chunk-P5JCOFK3.js} +7 -3
- package/dist/chunk-P5JCOFK3.js.map +1 -0
- package/dist/{chunk-V6Z4XS3I.js → chunk-PGGYZU7Q.js} +5 -2
- package/dist/chunk-PGGYZU7Q.js.map +1 -0
- package/dist/{chunk-CZBONNPA.js → chunk-PMP6WJJS.js} +7 -3
- package/dist/chunk-PMP6WJJS.js.map +1 -0
- package/dist/{chunk-FTSVJIEU.js → chunk-PNLM35GU.js} +6 -6
- package/dist/{chunk-2RRXQTOO.js → chunk-PYIASGI7.js} +9 -6
- package/dist/chunk-PYIASGI7.js.map +1 -0
- package/dist/{chunk-JO3Y5H75.js → chunk-QHUTSAFG.js} +6 -3
- package/dist/chunk-QHUTSAFG.js.map +1 -0
- package/dist/{chunk-WPSGP3YG.js → chunk-QKMJUOVH.js} +5 -3
- package/dist/chunk-QKMJUOVH.js.map +1 -0
- package/dist/{chunk-REQAKZ64.js → chunk-QTWXVOPT.js} +2 -2
- package/dist/{chunk-AKPRFFAI.js → chunk-QWHURFJ3.js} +2 -2
- package/dist/{chunk-NNESQ7QG.js → chunk-QY4XNTNG.js} +6 -3
- package/dist/chunk-QY4XNTNG.js.map +1 -0
- package/dist/{chunk-CUN5RJTH.js → chunk-R75DZ3AK.js} +2 -2
- package/dist/{chunk-5EIW2FZY.js → chunk-RNEYZTE4.js} +6 -2
- package/dist/chunk-RNEYZTE4.js.map +1 -0
- package/dist/{chunk-EYPRDTWI.js → chunk-RORP6DWR.js} +10 -7
- package/dist/chunk-RORP6DWR.js.map +1 -0
- package/dist/{chunk-JGOXXKPY.js → chunk-ROT57BP4.js} +7 -4
- package/dist/chunk-ROT57BP4.js.map +1 -0
- package/dist/{chunk-4M7QHSKY.js → chunk-RV4Y4O67.js} +3 -3
- package/dist/chunk-RV4Y4O67.js.map +1 -0
- package/dist/{chunk-YBJZ536V.js → chunk-SAIO6EBW.js} +5 -6
- package/dist/{chunk-YBJZ536V.js.map → chunk-SAIO6EBW.js.map} +1 -1
- package/dist/{chunk-AL6Z2JYR.js → chunk-SKX4NA6E.js} +12 -12
- package/dist/{chunk-EVSKEIXI.js → chunk-SN2YMCTL.js} +3 -3
- package/dist/{chunk-T7LTL7OC.js → chunk-SX3MEC3Q.js} +2 -2
- package/dist/{chunk-DRKYPQNA.js → chunk-TEUX42YW.js} +2 -2
- package/dist/{chunk-2BFUUUDS.js → chunk-TFZI36UD.js} +5 -2
- package/dist/chunk-TFZI36UD.js.map +1 -0
- package/dist/{chunk-UYA2QMH6.js → chunk-TOXTJ7MU.js} +3 -3
- package/dist/{chunk-H3MLYZYP.js → chunk-TPQVLBTY.js} +3 -3
- package/dist/{chunk-4N33SWTW.js → chunk-TTAP5XFX.js} +2 -2
- package/dist/{chunk-Y5WNNEND.js → chunk-TU3EGIKB.js} +2 -2
- package/dist/{chunk-QV5J4TE6.js → chunk-U2IRCTAR.js} +2 -2
- package/dist/{chunk-UTSGY3ON.js → chunk-U4H6MGVE.js} +6 -2
- package/dist/chunk-U4H6MGVE.js.map +1 -0
- package/dist/{chunk-7JSQQZUH.js → chunk-UCA47HM7.js} +3 -3
- package/dist/{chunk-UBWYHYDR.js → chunk-ULIM42PE.js} +5 -5
- package/dist/chunk-ULIM42PE.js.map +1 -0
- package/dist/{chunk-PAAFUJJL.js → chunk-UMP5MQ7X.js} +9 -6
- package/dist/chunk-UMP5MQ7X.js.map +1 -0
- package/dist/{chunk-23FCBIUN.js → chunk-UO7ERXYX.js} +2 -2
- package/dist/{chunk-C3U7FDKI.js → chunk-UUUMNJPP.js} +9 -5
- package/dist/chunk-UUUMNJPP.js.map +1 -0
- package/dist/{chunk-EWGVRRUF.js → chunk-V3LOHY4N.js} +7 -4
- package/dist/chunk-V3LOHY4N.js.map +1 -0
- package/dist/{chunk-UEWIIYGA.js → chunk-VAGHW3K2.js} +2 -2
- package/dist/{chunk-5E6WZAQF.js → chunk-VDGJV7MP.js} +6 -3
- package/dist/chunk-VDGJV7MP.js.map +1 -0
- package/dist/{chunk-PEIAGNCH.js → chunk-VFHGILXI.js} +8 -5
- package/dist/chunk-VFHGILXI.js.map +1 -0
- package/dist/{chunk-7Z2UU2FQ.js → chunk-VR3U4QA5.js} +9 -6
- package/dist/chunk-VR3U4QA5.js.map +1 -0
- package/dist/{chunk-SNBCAH62.js → chunk-VRDNUY4H.js} +3 -3
- package/dist/{chunk-BQGT77IQ.js → chunk-VV7MGILP.js} +4 -4
- package/dist/{chunk-WXTXCJ5V.js → chunk-VYSFKR32.js} +3 -3
- package/dist/chunk-VYSFKR32.js.map +1 -0
- package/dist/{chunk-GPUYB3ST.js → chunk-VZAGBDZ2.js} +2 -2
- package/dist/{chunk-MYAEOSZK.js → chunk-W3CLJ7JE.js} +4 -4
- package/dist/{chunk-UFH3ZVVZ.js → chunk-W5ENK5CM.js} +6 -6
- package/dist/{chunk-2CK7SHQQ.js → chunk-WNUZK7NS.js} +9 -6
- package/dist/chunk-WNUZK7NS.js.map +1 -0
- package/dist/{chunk-H57ZS6W2.js → chunk-WTOYEWW6.js} +12 -13
- package/dist/chunk-WTOYEWW6.js.map +1 -0
- package/dist/{chunk-OSSFOPB7.js → chunk-WVC3BG6J.js} +2 -2
- package/dist/{chunk-QPNTUFV4.js → chunk-WW4N2LRM.js} +4 -4
- package/dist/{chunk-WPE5QYXD.js → chunk-X2AKLDPW.js} +3 -3
- package/dist/{chunk-XLZBZSES.js → chunk-X4F32GUB.js} +7 -4
- package/dist/chunk-X4F32GUB.js.map +1 -0
- package/dist/{chunk-AYRHW4DX.js → chunk-X7PVFAYJ.js} +2 -2
- package/dist/{chunk-VNB7PFCP.js → chunk-XLYFOBBT.js} +4 -4
- package/dist/chunk-XLYFOBBT.js.map +1 -0
- package/dist/{chunk-NJHJZFX5.js → chunk-XREYLKUX.js} +8 -4
- package/dist/chunk-XREYLKUX.js.map +1 -0
- package/dist/{chunk-TOBPKY4V.js → chunk-XSMMFCMQ.js} +2 -2
- package/dist/{chunk-MWBHZZA4.js → chunk-XWWFBH2G.js} +2 -2
- package/dist/{chunk-67VUL6L2.js → chunk-XZBCPL4N.js} +7 -4
- package/dist/chunk-XZBCPL4N.js.map +1 -0
- package/dist/{chunk-ZHFS5L6Q.js → chunk-Y2E73IG2.js} +13 -10
- package/dist/chunk-Y2E73IG2.js.map +1 -0
- package/dist/{chunk-VLVMJDGD.js → chunk-YDPUBGJ7.js} +2 -2
- package/dist/{chunk-Y3HMIUH6.js → chunk-YG2VQUZO.js} +7 -4
- package/dist/chunk-YG2VQUZO.js.map +1 -0
- package/dist/{chunk-IRYSJ74J.js → chunk-YH37X6JT.js} +14 -7
- package/dist/chunk-YH37X6JT.js.map +1 -0
- package/dist/{chunk-NFZRZB5N.js → chunk-YLBRXDYH.js} +9 -6
- package/dist/chunk-YLBRXDYH.js.map +1 -0
- package/dist/{chunk-PKFH6C7W.js → chunk-YSKGLU2V.js} +7 -7
- package/dist/{chunk-37DCYIT5.js → chunk-YU647YW4.js} +2 -2
- package/dist/{chunk-JRODCEIG.js → chunk-YVUD3MY4.js} +2 -2
- package/dist/{chunk-3E3JYKUK.js → chunk-Z35J5B6D.js} +7 -4
- package/dist/chunk-Z35J5B6D.js.map +1 -0
- package/dist/{chunk-27DLUKDF.js → chunk-ZHEZISMI.js} +3 -3
- package/dist/{chunk-RQCJJBPY.js → chunk-ZMC3N23A.js} +6 -6
- package/dist/{chunk-MMPJ2MCE.js → chunk-ZQL5RXVE.js} +6 -3
- package/dist/chunk-ZQL5RXVE.js.map +1 -0
- package/dist/{chunk-P2PDDFMM.js → chunk-ZTKLKOOO.js} +10 -6
- package/dist/chunk-ZTKLKOOO.js.map +1 -0
- package/dist/{chunk-KBMKALKQ.js → chunk-ZW5K4XCQ.js} +5 -5
- package/dist/{chunk-LYKV3C7B.js → chunk-ZWSS3K4F.js} +6 -3
- package/dist/chunk-ZWSS3K4F.js.map +1 -0
- package/dist/{chunk-L7Q5BH4A.js → chunk-ZXSUWFQX.js} +2 -2
- package/dist/{chunk-JWG2BTJ5.js → chunk-ZZM3DOEK.js} +2 -2
- package/dist/data-display/Alert.js +3 -2
- package/dist/data-display/AlertDialog.js +2 -1
- package/dist/data-display/AsyncStateContainer.js +3 -2
- package/dist/data-display/Avatar.js +3 -8
- package/dist/data-display/Badge.js +5 -5
- package/dist/data-display/Banner.js +3 -2
- package/dist/data-display/CardKit.js +16 -15
- package/dist/data-display/Carousel.js +5 -5
- package/dist/data-display/Chart.js +6 -6
- package/dist/data-display/DataViews.js +83 -82
- package/dist/data-display/DescriptionItem.js +3 -2
- package/dist/data-display/ErrorState.js +2 -1
- package/dist/data-display/FleetMap.js +9 -9
- package/dist/data-display/InteractiveTooltip.js +3 -2
- package/dist/data-display/Lightbox.js +9 -8
- package/dist/data-display/MapPreview.js +5 -4
- package/dist/data-display/Progress.js +3 -2
- package/dist/data-display/SectionOnboarding.js +3 -2
- package/dist/data-display/Sheet.js +1 -1
- package/dist/data-display/StatCard.js +2 -1
- package/dist/data-display/Stepper.js +2 -1
- package/dist/data-display/Table.js +3 -2
- package/dist/data-display/Timeline.js +3 -2
- package/dist/data-display/TimingDiagram.js +3 -2
- package/dist/data-display/Tooltip.js +2 -1
- package/dist/feedback/ConfirmAction.js +8 -7
- package/dist/feedback/NotificationStatusNotice.js +6 -5
- package/dist/feedback/Sonner.js +3 -2
- package/dist/form/AddressAutocomplete.js +4 -3
- package/dist/form/Button.js +3 -2
- package/dist/form/CategorySelect.js +11 -10
- package/dist/form/CepField.js +3 -2
- package/dist/form/Checkbox.js +2 -7
- package/dist/form/CodeEditor.js +3 -2
- package/dist/form/Command.js +3 -3
- package/dist/form/CreatableSelect.js +3 -2
- package/dist/form/DateRangePicker.js +3 -2
- package/dist/form/Form.js +2 -1
- package/dist/form/HeaderActions.js +3 -2
- package/dist/form/HeaderButton.js +2 -1
- package/dist/form/InputOTP.js +3 -2
- package/dist/form/Label.js +3 -3
- package/dist/form/Menubar.js +5 -5
- package/dist/form/PasswordStrength.js +3 -2
- package/dist/form/PhoneInput.js +2 -1
- package/dist/form/RadioGroup.js +4 -3
- package/dist/form/RichTextEditor.js +2 -1
- package/dist/form/SearchPalette.js +3 -2
- package/dist/form/Slider.js +3 -2
- package/dist/form/Switch.js +4 -3
- package/dist/form/Textarea.js +2 -1
- package/dist/form/Toggle.js +3 -2
- package/dist/form/ToggleGroup.js +2 -1
- package/dist/form/UploadButton.js +3 -2
- package/dist/form/total-form.js +23 -22
- package/dist/icons.js +2 -2
- package/dist/layout/Box.js +1 -1
- package/dist/layout/ContentToolbar.js +9 -8
- package/dist/layout/Dashboard.js +5 -4
- package/dist/layout/SettingsLayout.js +8 -7
- package/dist/layout/Stack.js +1 -1
- package/dist/layout/TableFilter.js +2 -1
- package/dist/navigation/AppHeader.js +7 -7
- package/dist/navigation/Breadcrumbs.js +4 -3
- package/dist/navigation/CommandPalette.js +4 -3
- package/dist/navigation/ContextMenu.js +2 -1
- package/dist/navigation/DropdownMenu.js +2 -1
- package/dist/navigation/NavigationMenu.js +7 -6
- package/dist/navigation/Pagination.js +3 -2
- package/dist/navigation/Tabs.js +3 -2
- package/dist/provider.js +1 -1
- package/dist/social-login-button.js +5 -4
- package/dist/tokens.js +7 -7
- package/dist/types/components/data-display/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/types/components/data-display/Avatar/Avatar.view.d.ts.map +1 -1
- package/dist/types/components/data-display/Badge/Badge.styles.d.ts +3 -2
- package/dist/types/components/data-display/Badge/Badge.styles.d.ts.map +1 -1
- package/dist/types/components/data-display/Badge/Badge.variants.d.ts.map +1 -1
- package/dist/types/components/data-display/Badge/BadgeContent.d.ts.map +1 -1
- package/dist/types/components/data-display/Banner/Banner.d.ts.map +1 -1
- package/dist/types/components/data-display/Banner/Banner.styles.d.ts.map +1 -1
- package/dist/types/components/data-display/CardKit/list-card-parts.d.ts.map +1 -1
- package/dist/types/components/data-display/Chart/chart-internals.d.ts +1 -1
- package/dist/types/components/data-display/Chart/chart-internals.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/SaveViewModal.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/base-card.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/base-list-card-slots.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-bar-controls.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-columns-tab.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-display-panel.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-display-tabs.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-export.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-filter-panel.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-grid-bodies.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-more-fields.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-more-filters.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-preset-chips.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-range-pill.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-scopes.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-search.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-view-nav.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/list-card-cells.d.ts.map +1 -1
- package/dist/types/components/data-display/ErrorState/ErrorState.d.ts.map +1 -1
- package/dist/types/components/data-display/InteractiveTooltip/InteractiveTooltip.styles.d.ts +1 -1
- package/dist/types/components/data-display/InteractiveTooltip/InteractiveTooltip.styles.d.ts.map +1 -1
- package/dist/types/components/data-display/Lightbox/Lightbox.constants.d.ts +1 -1
- package/dist/types/components/data-display/Lightbox/Lightbox.constants.d.ts.map +1 -1
- package/dist/types/components/data-display/Lightbox/LightboxThumbnails.d.ts.map +1 -1
- package/dist/types/components/data-display/MapPreview/MapDecorations.d.ts.map +1 -1
- package/dist/types/components/data-display/MapPreview/MapMarkers.d.ts.map +1 -1
- package/dist/types/components/data-display/Progress/Progress.styles.d.ts +1 -1
- package/dist/types/components/data-display/Progress/Progress.styles.d.ts.map +1 -1
- package/dist/types/components/data-display/StatCard/StatCard.d.ts.map +1 -1
- package/dist/types/components/data-display/Stepper/Stepper.d.ts.map +1 -1
- package/dist/types/components/data-display/Table/Table.styles.d.ts.map +1 -1
- package/dist/types/components/data-display/Timeline/TimelineRow.d.ts.map +1 -1
- package/dist/types/components/data-display/TimingDiagram/TimingDiagram.d.ts.map +1 -1
- package/dist/types/components/data-display/TimingDiagram/TimingDiagram.views.d.ts.map +1 -1
- package/dist/types/components/data-display/Tooltip/Tooltip.d.ts.map +1 -1
- 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/form/AddressAutocomplete/AddressOption.d.ts.map +1 -1
- package/dist/types/components/form/Button/Button.d.ts.map +1 -1
- package/dist/types/components/form/Button/Button.styles.d.ts.map +1 -1
- package/dist/types/components/form/CategorySelect/CategoryPanelFoot.d.ts.map +1 -1
- package/dist/types/components/form/CategorySelect/CategoryPanelHead.d.ts.map +1 -1
- package/dist/types/components/form/CategorySelect/CategoryQuickActions.d.ts.map +1 -1
- package/dist/types/components/form/CategorySelect/CategorySelect.styles.d.ts.map +1 -1
- package/dist/types/components/form/CodeEditor/CodeEditor.d.ts.map +1 -1
- package/dist/types/components/form/CodeEditor/CodeEditorToolbar.d.ts.map +1 -1
- package/dist/types/components/form/Command/Command.d.ts.map +1 -1
- package/dist/types/components/form/Command/Command.styles.d.ts +3 -2
- package/dist/types/components/form/Command/Command.styles.d.ts.map +1 -1
- package/dist/types/components/form/DateRangePicker/DateRangePickerQuickList.d.ts.map +1 -1
- package/dist/types/components/form/Form/Form.d.ts.map +1 -1
- package/dist/types/components/form/HeaderButton/HeaderButton.d.ts.map +1 -1
- package/dist/types/components/form/InputOTP/InputOTP.styles.d.ts.map +1 -1
- package/dist/types/components/form/Label/Label.d.ts.map +1 -1
- package/dist/types/components/form/Menubar/Menubar.item.d.ts.map +1 -1
- package/dist/types/components/form/PasswordStrength/PasswordStrength.d.ts.map +1 -1
- package/dist/types/components/form/PasswordStrength/PasswordStrength.helpers.d.ts +2 -2
- package/dist/types/components/form/PasswordStrength/PasswordStrength.helpers.d.ts.map +1 -1
- package/dist/types/components/form/PhoneInput/PhoneInput.d.ts.map +1 -1
- package/dist/types/components/form/RadioGroup/RadioGroup.styles.d.ts.map +1 -1
- package/dist/types/components/form/RichTextEditor/RichTextEditor.d.ts.map +1 -1
- package/dist/types/components/form/SearchPalette/SearchPalette.parts.d.ts.map +1 -1
- package/dist/types/components/form/Slider/Slider.styles.d.ts.map +1 -1
- package/dist/types/components/form/Switch/Switch.parts.d.ts.map +1 -1
- package/dist/types/components/form/Switch/Switch.styles.d.ts.map +1 -1
- package/dist/types/components/form/Textarea/Textarea.d.ts.map +1 -1
- package/dist/types/components/form/Textarea/TextareaRichEditor.d.ts.map +1 -1
- package/dist/types/components/form/Toggle/Toggle.styles.d.ts.map +1 -1
- package/dist/types/components/form/ToggleGroup/ToggleGroup.d.ts.map +1 -1
- package/dist/types/components/form/UploadButton/UploadButton.parts.d.ts.map +1 -1
- package/dist/types/components/form/total-form/SubmitButton.d.ts.map +1 -1
- package/dist/types/components/layout/ContentToolbar/ColumnsMenu.d.ts.map +1 -1
- package/dist/types/components/layout/ContentToolbar/ContentToolbar.d.ts.map +1 -1
- package/dist/types/components/layout/ContentToolbar/FilterTrigger.d.ts.map +1 -1
- package/dist/types/components/layout/ContentToolbar/MultiSelectDropdown.d.ts.map +1 -1
- package/dist/types/components/layout/ContentToolbar/MultiSelectTriggers.d.ts.map +1 -1
- package/dist/types/components/layout/ContentToolbar/SavedViewsMenu.d.ts.map +1 -1
- package/dist/types/components/layout/ContentToolbar/SortByDropdown.d.ts.map +1 -1
- package/dist/types/components/layout/ContentToolbar/ViewSelector.d.ts.map +1 -1
- package/dist/types/components/layout/Dashboard/Dashboard.d.ts.map +1 -1
- package/dist/types/components/layout/Dashboard/DashboardParts.d.ts.map +1 -1
- package/dist/types/components/layout/SettingsLayout/SettingsPanel.d.ts.map +1 -1
- package/dist/types/components/layout/SettingsLayout/SettingsSectionChips.d.ts.map +1 -1
- package/dist/types/components/layout/SettingsLayout/SettingsSectionHeader.d.ts.map +1 -1
- package/dist/types/components/layout/SettingsLayout/SettingsStatusMarker.d.ts.map +1 -1
- package/dist/types/components/layout/TableFilter/TableFilter.d.ts.map +1 -1
- package/dist/types/components/navigation/AppHeader/AppHeader.brand.d.ts.map +1 -1
- package/dist/types/components/navigation/AppHeader/AppHeader.d.ts.map +1 -1
- package/dist/types/components/navigation/AppHeader/AppHeader.identity.d.ts.map +1 -1
- package/dist/types/components/navigation/Breadcrumbs/BreadcrumbEntry.d.ts.map +1 -1
- package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.d.ts.map +1 -1
- package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.styles.d.ts.map +1 -1
- package/dist/types/components/navigation/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/types/components/navigation/CommandPalette/CommandPaletteResults.d.ts.map +1 -1
- package/dist/types/components/navigation/CommandPalette/ShortcutChip.d.ts.map +1 -1
- package/dist/types/components/navigation/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/types/components/navigation/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/types/components/navigation/NavigationMenu/NavigationMenu.styles.d.ts.map +1 -1
- package/dist/types/components/navigation/NavigationMenu/NavigationMenuItem.d.ts.map +1 -1
- package/dist/types/components/navigation/Pagination/Pagination.styles.d.ts.map +1 -1
- package/dist/types/components/navigation/Tabs/Tabs.d.ts.map +1 -1
- package/dist/types/components/navigation/Tabs/Tabs.styles.d.ts.map +1 -1
- package/dist/types/components/typography/Blockquote/Blockquote.d.ts.map +1 -1
- package/dist/types/components/typography/Code/Code.d.ts.map +1 -1
- package/dist/types/components/typography/Paragraph/Paragraph.d.ts.map +1 -1
- package/dist/types/components/typography/Text/Text.d.ts.map +1 -1
- package/dist/types/components/utility/AnimatedIcon/AnimatedIcon.styles.d.ts +2 -1
- package/dist/types/components/utility/AnimatedIcon/AnimatedIcon.styles.d.ts.map +1 -1
- package/dist/types/components/utility/WorkflowStep/WorkflowStep.parts.d.ts.map +1 -1
- package/dist/types/icons/Icon.d.ts.map +1 -1
- package/dist/typography/Blockquote.js +2 -1
- package/dist/typography/Code.js +2 -1
- package/dist/typography/Paragraph.js +2 -8
- package/dist/typography/Text.js +2 -1
- package/dist/user-avatar.js +7 -6
- package/dist/utility/AnimatedIcon.js +3 -2
- package/dist/utility/WorkflowStep.js +4 -3
- package/package.json +1 -1
- package/src/components/data-display/Alert/Alert.styles.tsx +2 -2
- package/src/components/data-display/Alert/Alert.tsx +3 -3
- package/src/components/data-display/AlertDialog/AlertDialog.tsx +2 -1
- package/src/components/data-display/Avatar/Avatar.view.tsx +6 -3
- package/src/components/data-display/Badge/Badge.styles.ts +5 -6
- package/src/components/data-display/Badge/Badge.variants.ts +10 -9
- package/src/components/data-display/Badge/BadgeContent.tsx +21 -17
- package/src/components/data-display/Banner/Banner.styles.ts +4 -3
- package/src/components/data-display/Banner/Banner.tsx +2 -1
- package/src/components/data-display/CardKit/list-card-parts.tsx +6 -5
- package/src/components/data-display/Carousel/Carousel.parts.tsx +2 -2
- package/src/components/data-display/Carousel/Carousel.styles.ts +7 -7
- package/src/components/data-display/Chart/Chart.tsx +1 -1
- package/src/components/data-display/Chart/chart-context.ts +1 -1
- package/src/components/data-display/Chart/chart-internals.ts +11 -9
- package/src/components/data-display/DataViews/SaveViewModal.tsx +2 -1
- package/src/components/data-display/DataViews/base-card.tsx +3 -1
- package/src/components/data-display/DataViews/base-list-card-slots.tsx +4 -3
- package/src/components/data-display/DataViews/data-views-bar-controls.tsx +4 -3
- package/src/components/data-display/DataViews/data-views-columns-tab.tsx +3 -2
- package/src/components/data-display/DataViews/data-views-display-panel.tsx +2 -1
- package/src/components/data-display/DataViews/data-views-display-tabs.tsx +3 -2
- package/src/components/data-display/DataViews/data-views-export.tsx +3 -2
- package/src/components/data-display/DataViews/data-views-filter-panel.tsx +2 -1
- package/src/components/data-display/DataViews/data-views-grid-bodies.tsx +3 -2
- package/src/components/data-display/DataViews/data-views-more-fields.tsx +3 -2
- package/src/components/data-display/DataViews/data-views-more-filters.tsx +3 -2
- package/src/components/data-display/DataViews/data-views-preset-chips.tsx +2 -1
- package/src/components/data-display/DataViews/data-views-range-pill.tsx +8 -7
- package/src/components/data-display/DataViews/data-views-scopes.tsx +3 -2
- package/src/components/data-display/DataViews/data-views-search.tsx +4 -3
- package/src/components/data-display/DataViews/data-views-view-nav.tsx +4 -3
- package/src/components/data-display/DataViews/list-card-cells.tsx +3 -2
- package/src/components/data-display/ErrorState/ErrorState.tsx +2 -1
- package/src/components/data-display/InteractiveTooltip/InteractiveTooltip.styles.ts +5 -4
- package/src/components/data-display/InteractiveTooltip/InteractiveTooltip.tsx +1 -1
- package/src/components/data-display/Lightbox/Lightbox.constants.ts +2 -1
- package/src/components/data-display/Lightbox/LightboxThumbnails.tsx +2 -1
- package/src/components/data-display/MapPreview/MapDecorations.tsx +5 -4
- package/src/components/data-display/MapPreview/MapMarkers.tsx +2 -1
- package/src/components/data-display/Progress/Progress.styles.ts +4 -4
- package/src/components/data-display/StatCard/StatCard.tsx +2 -1
- package/src/components/data-display/Stepper/Stepper.tsx +2 -1
- package/src/components/data-display/Table/Table.styles.ts +6 -5
- package/src/components/data-display/Timeline/TimelineRow.tsx +4 -3
- package/src/components/data-display/TimingDiagram/TimingDiagram.tsx +2 -1
- package/src/components/data-display/TimingDiagram/TimingDiagram.views.tsx +6 -5
- package/src/components/data-display/Tooltip/Tooltip.tsx +6 -5
- package/src/components/feedback/Sonner/Sonner.tsx +3 -1
- package/src/components/feedback/Sonner/SonnerToast.tsx +7 -6
- package/src/components/form/AddressAutocomplete/AddressOption.tsx +3 -2
- package/src/components/form/Button/Button.styles.ts +18 -8
- package/src/components/form/Button/Button.tsx +8 -5
- package/src/components/form/CategorySelect/CategoryPanelFoot.tsx +4 -3
- package/src/components/form/CategorySelect/CategoryPanelHead.tsx +4 -3
- package/src/components/form/CategorySelect/CategoryQuickActions.tsx +2 -1
- package/src/components/form/CategorySelect/CategorySelect.styles.ts +11 -10
- package/src/components/form/Checkbox/Checkbox.tsx +2 -2
- package/src/components/form/CodeEditor/CodeEditor.tsx +13 -6
- package/src/components/form/CodeEditor/CodeEditorToolbar.tsx +3 -2
- package/src/components/form/Command/Command.styles.ts +12 -8
- package/src/components/form/Command/Command.tsx +5 -4
- package/src/components/form/DateRangePicker/DateRangePickerQuickList.tsx +3 -2
- package/src/components/form/Form/Form.tsx +3 -2
- package/src/components/form/HeaderButton/HeaderButton.tsx +3 -1
- package/src/components/form/InputOTP/InputOTP.styles.ts +10 -9
- package/src/components/form/Label/Label.styles.ts +6 -6
- package/src/components/form/Label/Label.tsx +2 -1
- package/src/components/form/Menubar/Menubar.item.tsx +2 -1
- package/src/components/form/Menubar/Menubar.styles.ts +6 -6
- package/src/components/form/PasswordStrength/PasswordStrength.helpers.tsx +10 -7
- package/src/components/form/PasswordStrength/PasswordStrength.tsx +19 -9
- package/src/components/form/PhoneInput/PhoneInput.tsx +3 -2
- package/src/components/form/RadioGroup/RadioGroup.styles.ts +15 -14
- package/src/components/form/RichTextEditor/RichTextEditor.tsx +2 -1
- package/src/components/form/SearchPalette/SearchPalette.parts.tsx +6 -5
- package/src/components/form/Slider/Slider.styles.ts +11 -7
- package/src/components/form/Switch/Switch.parts.tsx +2 -1
- package/src/components/form/Switch/Switch.styles.ts +4 -3
- package/src/components/form/Textarea/Textarea.tsx +6 -5
- package/src/components/form/Textarea/TextareaRichEditor.tsx +3 -2
- package/src/components/form/Toggle/Toggle.styles.ts +14 -7
- package/src/components/form/ToggleGroup/ToggleGroup.tsx +6 -5
- package/src/components/form/UploadButton/UploadButton.parts.tsx +2 -1
- package/src/components/form/total-form/SubmitButton.tsx +2 -1
- package/src/components/layout/ContentToolbar/ColumnsMenu.tsx +3 -2
- package/src/components/layout/ContentToolbar/ContentToolbar.tsx +3 -2
- package/src/components/layout/ContentToolbar/FilterTrigger.tsx +3 -2
- package/src/components/layout/ContentToolbar/MultiSelectDropdown.tsx +5 -4
- package/src/components/layout/ContentToolbar/MultiSelectTriggers.tsx +10 -9
- package/src/components/layout/ContentToolbar/SavedViewsMenu.tsx +10 -9
- package/src/components/layout/ContentToolbar/SortByDropdown.tsx +6 -5
- package/src/components/layout/ContentToolbar/ViewSelector.tsx +5 -4
- package/src/components/layout/Dashboard/Dashboard.tsx +4 -3
- package/src/components/layout/Dashboard/DashboardParts.tsx +2 -1
- package/src/components/layout/SettingsLayout/SettingsPanel.tsx +2 -1
- package/src/components/layout/SettingsLayout/SettingsSectionChips.tsx +2 -1
- package/src/components/layout/SettingsLayout/SettingsSectionHeader.tsx +3 -2
- package/src/components/layout/SettingsLayout/SettingsStatusMarker.tsx +2 -1
- package/src/components/layout/TableFilter/TableFilter.tsx +10 -9
- package/src/components/navigation/AppHeader/AppHeader.brand.tsx +2 -1
- package/src/components/navigation/AppHeader/AppHeader.identity.tsx +3 -2
- package/src/components/navigation/AppHeader/AppHeader.tsx +2 -1
- package/src/components/navigation/Breadcrumbs/BreadcrumbEntry.tsx +3 -2
- package/src/components/navigation/Breadcrumbs/Breadcrumbs.styles.tsx +3 -2
- package/src/components/navigation/Breadcrumbs/Breadcrumbs.tsx +2 -1
- package/src/components/navigation/CommandPalette/CommandPalette.tsx +3 -2
- package/src/components/navigation/CommandPalette/CommandPaletteResults.tsx +5 -4
- package/src/components/navigation/CommandPalette/ShortcutChip.tsx +3 -1
- package/src/components/navigation/ContextMenu/ContextMenu.tsx +5 -4
- package/src/components/navigation/DropdownMenu/DropdownMenu.tsx +5 -4
- package/src/components/navigation/NavigationMenu/NavigationMenu.styles.ts +3 -2
- package/src/components/navigation/NavigationMenu/NavigationMenuItem.tsx +2 -1
- package/src/components/navigation/Pagination/Pagination.styles.ts +3 -2
- package/src/components/navigation/Tabs/Tabs.styles.ts +3 -2
- package/src/components/navigation/Tabs/Tabs.tsx +3 -2
- package/src/components/typography/Blockquote/Blockquote.tsx +6 -5
- package/src/components/typography/Code/Code.tsx +11 -10
- package/src/components/typography/Paragraph/Paragraph.tsx +16 -12
- package/src/components/typography/Text/Text.tsx +18 -12
- package/src/components/utility/AnimatedIcon/AnimatedIcon.styles.ts +9 -7
- package/src/components/utility/AnimatedIcon/AnimatedIcon.tsx +1 -1
- package/src/components/utility/WorkflowStep/WorkflowStep.parts.tsx +4 -3
- package/src/icons/Icon.tsx +2 -2
- package/dist/chunk-2BFUUUDS.js.map +0 -1
- package/dist/chunk-2CEV746H.js.map +0 -1
- package/dist/chunk-2CK7SHQQ.js.map +0 -1
- package/dist/chunk-2KLT22S3.js.map +0 -1
- package/dist/chunk-2LG5TEFV.js.map +0 -1
- package/dist/chunk-2RRXQTOO.js.map +0 -1
- package/dist/chunk-2SGPNJHJ.js.map +0 -1
- package/dist/chunk-32HU5YFB.js.map +0 -1
- package/dist/chunk-3CBL5FWS.js.map +0 -1
- package/dist/chunk-3E3JYKUK.js.map +0 -1
- package/dist/chunk-3EDZU2H7.js.map +0 -1
- package/dist/chunk-4GKDO4YK.js.map +0 -1
- package/dist/chunk-4M6CEQVK.js.map +0 -1
- package/dist/chunk-4M7QHSKY.js.map +0 -1
- package/dist/chunk-4V7DBU4H.js.map +0 -1
- package/dist/chunk-52APLKAG.js.map +0 -1
- package/dist/chunk-5CIXQBLV.js.map +0 -1
- package/dist/chunk-5E6WZAQF.js.map +0 -1
- package/dist/chunk-5EIW2FZY.js.map +0 -1
- package/dist/chunk-5LPQ6T5S.js.map +0 -1
- package/dist/chunk-5QTMJ2RU.js.map +0 -1
- package/dist/chunk-63UQJVBW.js.map +0 -1
- package/dist/chunk-67VUL6L2.js.map +0 -1
- package/dist/chunk-6VP2L3DJ.js.map +0 -1
- package/dist/chunk-74LYLKO2.js.map +0 -1
- package/dist/chunk-7IQDLEB5.js.map +0 -1
- package/dist/chunk-7QLHYUDW.js.map +0 -1
- package/dist/chunk-7Z2UU2FQ.js.map +0 -1
- package/dist/chunk-ABCP6NS4.js.map +0 -1
- package/dist/chunk-ACHUHT2K.js.map +0 -1
- package/dist/chunk-B3OMUMZO.js.map +0 -1
- package/dist/chunk-B443IIQG.js.map +0 -1
- package/dist/chunk-BHOSWJDL.js.map +0 -1
- package/dist/chunk-BOU3HR4C.js.map +0 -1
- package/dist/chunk-BTVIHTAL.js.map +0 -1
- package/dist/chunk-C3U7FDKI.js.map +0 -1
- package/dist/chunk-CRDOMIEG.js.map +0 -1
- package/dist/chunk-CZBONNPA.js.map +0 -1
- package/dist/chunk-D3IXNCEU.js.map +0 -1
- package/dist/chunk-DJ2KYLHE.js.map +0 -1
- package/dist/chunk-DJEGLKW3.js.map +0 -1
- package/dist/chunk-DKILDT72.js.map +0 -1
- package/dist/chunk-DL6N7W6P.js.map +0 -1
- package/dist/chunk-DPJZFQF2.js.map +0 -1
- package/dist/chunk-DYMVVVSU.js.map +0 -1
- package/dist/chunk-EDBTCEPC.js.map +0 -1
- package/dist/chunk-EHCUOX6R.js.map +0 -1
- package/dist/chunk-EKSSKQUW.js.map +0 -1
- package/dist/chunk-EWGVRRUF.js.map +0 -1
- package/dist/chunk-EWSGWLHN.js.map +0 -1
- package/dist/chunk-EYPRDTWI.js.map +0 -1
- package/dist/chunk-F4RR4666.js.map +0 -1
- package/dist/chunk-GJF3CVIE.js.map +0 -1
- package/dist/chunk-GL5CYMGK.js.map +0 -1
- package/dist/chunk-GQ4I6Z32.js.map +0 -1
- package/dist/chunk-GVOMTCLS.js.map +0 -1
- package/dist/chunk-H37GIAAM.js.map +0 -1
- package/dist/chunk-H3R6WSYU.js.map +0 -1
- package/dist/chunk-H57ZS6W2.js.map +0 -1
- package/dist/chunk-HBYWUSPI.js.map +0 -1
- package/dist/chunk-HEVST4CS.js.map +0 -1
- package/dist/chunk-HH5CNSJP.js.map +0 -1
- package/dist/chunk-HMHCNNNW.js.map +0 -1
- package/dist/chunk-HRHPRIGT.js.map +0 -1
- package/dist/chunk-HWEAW4LF.js.map +0 -1
- package/dist/chunk-IBWVEARQ.js.map +0 -1
- package/dist/chunk-IPPTOL53.js.map +0 -1
- package/dist/chunk-IRYSJ74J.js.map +0 -1
- package/dist/chunk-JGOXXKPY.js.map +0 -1
- package/dist/chunk-JIKWZDNK.js.map +0 -1
- package/dist/chunk-JKNLKUCX.js.map +0 -1
- package/dist/chunk-JLWAYBOP.js.map +0 -1
- package/dist/chunk-JO3Y5H75.js.map +0 -1
- package/dist/chunk-JXTEE5G6.js.map +0 -1
- package/dist/chunk-KDIPBEVE.js.map +0 -1
- package/dist/chunk-LKAVTJMC.js.map +0 -1
- package/dist/chunk-LYKV3C7B.js.map +0 -1
- package/dist/chunk-MAUZCOBB.js.map +0 -1
- package/dist/chunk-MH73XQHW.js.map +0 -1
- package/dist/chunk-MMPJ2MCE.js.map +0 -1
- package/dist/chunk-NFZRZB5N.js.map +0 -1
- package/dist/chunk-NJHJZFX5.js.map +0 -1
- package/dist/chunk-NMX3JAAB.js.map +0 -1
- package/dist/chunk-NNESQ7QG.js.map +0 -1
- package/dist/chunk-OFU66DRT.js.map +0 -1
- package/dist/chunk-OZAP2BEP.js.map +0 -1
- package/dist/chunk-P2PDDFMM.js.map +0 -1
- package/dist/chunk-PAAFUJJL.js.map +0 -1
- package/dist/chunk-PDLJOQO5.js.map +0 -1
- package/dist/chunk-PEIAGNCH.js.map +0 -1
- package/dist/chunk-PYJI2YGJ.js.map +0 -1
- package/dist/chunk-PYPFDRX4.js.map +0 -1
- package/dist/chunk-QJ7I5C4D.js.map +0 -1
- package/dist/chunk-QXTO3G2T.js.map +0 -1
- package/dist/chunk-RPBA4WH7.js.map +0 -1
- package/dist/chunk-SCQJV54H.js.map +0 -1
- package/dist/chunk-SNTDLS4A.js.map +0 -1
- package/dist/chunk-SQSFMZTF.js.map +0 -1
- package/dist/chunk-SQV3HPTZ.js.map +0 -1
- package/dist/chunk-SVSOUC5S.js.map +0 -1
- package/dist/chunk-SZB2Z6QN.js.map +0 -1
- package/dist/chunk-TK4NUNN6.js.map +0 -1
- package/dist/chunk-UBWYHYDR.js.map +0 -1
- package/dist/chunk-UH27I2EJ.js.map +0 -1
- package/dist/chunk-UTSGY3ON.js.map +0 -1
- package/dist/chunk-V26IDPL4.js.map +0 -1
- package/dist/chunk-V6Z4XS3I.js.map +0 -1
- package/dist/chunk-VNB7PFCP.js.map +0 -1
- package/dist/chunk-VNHLYDTX.js.map +0 -1
- package/dist/chunk-WGFIIS6Q.js.map +0 -1
- package/dist/chunk-WPSGP3YG.js.map +0 -1
- package/dist/chunk-WXTXCJ5V.js.map +0 -1
- package/dist/chunk-XLZBZSES.js.map +0 -1
- package/dist/chunk-XNBN5CVF.js.map +0 -1
- package/dist/chunk-XOL2QCSP.js.map +0 -1
- package/dist/chunk-Y3HMIUH6.js.map +0 -1
- package/dist/chunk-Y7ZS724A.js.map +0 -1
- package/dist/chunk-YU72SS43.js.map +0 -1
- package/dist/chunk-Z2EOT77M.js.map +0 -1
- package/dist/chunk-ZHFS5L6Q.js.map +0 -1
- package/dist/chunk-ZRHSIFWA.js.map +0 -1
- package/dist/chunk-ZSRLRDTP.js.map +0 -1
- /package/dist/{chunk-YVDBOVHP.js.map → chunk-2AKQPXSJ.js.map} +0 -0
- /package/dist/{chunk-PRVK3U6U.js.map → chunk-2CTTASUD.js.map} +0 -0
- /package/dist/{chunk-G2TCNZYD.js.map → chunk-3A22SBIU.js.map} +0 -0
- /package/dist/{chunk-A4JH5FAL.js.map → chunk-3CVTQZQJ.js.map} +0 -0
- /package/dist/{chunk-2XGGHYEA.js.map → chunk-4LQZH4PU.js.map} +0 -0
- /package/dist/{chunk-ZF3JGIJD.js.map → chunk-4M34ALEP.js.map} +0 -0
- /package/dist/{chunk-OT5DVKXP.js.map → chunk-4WQ3YXQL.js.map} +0 -0
- /package/dist/{chunk-DOXNMWUU.js.map → chunk-57IB5NTM.js.map} +0 -0
- /package/dist/{chunk-N4JEQJBL.js.map → chunk-5IXHJXJX.js.map} +0 -0
- /package/dist/{chunk-YA4YH6WP.js.map → chunk-5ZQUJ7LT.js.map} +0 -0
- /package/dist/{chunk-Q4KFGRBV.js.map → chunk-5ZTQTJAJ.js.map} +0 -0
- /package/dist/{chunk-5264DI34.js.map → chunk-6DC5SVHM.js.map} +0 -0
- /package/dist/{chunk-DQIRSUEK.js.map → chunk-6KL2CJBO.js.map} +0 -0
- /package/dist/{chunk-UIKDWXHX.js.map → chunk-73HBIIRB.js.map} +0 -0
- /package/dist/{chunk-COK5VOXC.js.map → chunk-7LIXQZBG.js.map} +0 -0
- /package/dist/{chunk-K2XK45HG.js.map → chunk-7ZG7T2YN.js.map} +0 -0
- /package/dist/{chunk-OYYCANKB.js.map → chunk-A6AKFPIQ.js.map} +0 -0
- /package/dist/{chunk-O63WG6YJ.js.map → chunk-AJSPLHG4.js.map} +0 -0
- /package/dist/{chunk-CY6HHLYM.js.map → chunk-AQSX3YH2.js.map} +0 -0
- /package/dist/{chunk-JGDS2SJZ.js.map → chunk-BD2GGIGS.js.map} +0 -0
- /package/dist/{chunk-7WK2L3ZO.js.map → chunk-BO2SDMNQ.js.map} +0 -0
- /package/dist/{chunk-PC2MVKYW.js.map → chunk-C6FRVGMC.js.map} +0 -0
- /package/dist/{chunk-KCQGJPLO.js.map → chunk-C6NI3FAV.js.map} +0 -0
- /package/dist/{chunk-YSFQHZ74.js.map → chunk-C7TCBAVX.js.map} +0 -0
- /package/dist/{chunk-UXWU5NRC.js.map → chunk-CRZXSZ5O.js.map} +0 -0
- /package/dist/{chunk-46ADSOCF.js.map → chunk-CS3RKXT5.js.map} +0 -0
- /package/dist/{chunk-PO2RWE7N.js.map → chunk-D5X4FRYX.js.map} +0 -0
- /package/dist/{chunk-LCVQOJKG.js.map → chunk-DMYBTD5Y.js.map} +0 -0
- /package/dist/{chunk-GJRBK564.js.map → chunk-DRE6DSJ7.js.map} +0 -0
- /package/dist/{chunk-BHLGZLXQ.js.map → chunk-EDO2WS5B.js.map} +0 -0
- /package/dist/{chunk-FYSYALTY.js.map → chunk-EFVOT3G5.js.map} +0 -0
- /package/dist/{chunk-7E4X4J2M.js.map → chunk-EOW2ECB3.js.map} +0 -0
- /package/dist/{chunk-6MSSCBI3.js.map → chunk-EXZSHZRS.js.map} +0 -0
- /package/dist/{chunk-XYK3HXZY.js.map → chunk-F5KEWLZK.js.map} +0 -0
- /package/dist/{chunk-7VIINULX.js.map → chunk-F7HQVKIR.js.map} +0 -0
- /package/dist/{chunk-WVPA3ONO.js.map → chunk-FXNYV5Z6.js.map} +0 -0
- /package/dist/{chunk-EUDIQQWE.js.map → chunk-GEXM6DNR.js.map} +0 -0
- /package/dist/{chunk-E6OILRUU.js.map → chunk-GGWICBJD.js.map} +0 -0
- /package/dist/{chunk-67QSLTT7.js.map → chunk-GIRRCEVH.js.map} +0 -0
- /package/dist/{chunk-LGZ4EIWV.js.map → chunk-GUVBR62X.js.map} +0 -0
- /package/dist/{chunk-VNYP2RMN.js.map → chunk-GVLZZCSX.js.map} +0 -0
- /package/dist/{chunk-D6RKXNLE.js.map → chunk-GXCOXJS3.js.map} +0 -0
- /package/dist/{chunk-BIIAMH47.js.map → chunk-HAQMKV5P.js.map} +0 -0
- /package/dist/{chunk-VMZ3JJGG.js.map → chunk-I62ALI7F.js.map} +0 -0
- /package/dist/{chunk-3LNKBZTG.js.map → chunk-IWOVENC3.js.map} +0 -0
- /package/dist/{chunk-DSIJEJQ7.js.map → chunk-JFBEZXNL.js.map} +0 -0
- /package/dist/{chunk-TAB6AIPN.js.map → chunk-JFEEV3XI.js.map} +0 -0
- /package/dist/{chunk-V6FED3RS.js.map → chunk-JOR6E23V.js.map} +0 -0
- /package/dist/{chunk-YCGZSKCV.js.map → chunk-JWK4GI2I.js.map} +0 -0
- /package/dist/{chunk-DELT2W42.js.map → chunk-JYRQBZEV.js.map} +0 -0
- /package/dist/{chunk-DY7VTAYO.js.map → chunk-KE5MX4PI.js.map} +0 -0
- /package/dist/{chunk-ECZXTIDR.js.map → chunk-KK57AHWS.js.map} +0 -0
- /package/dist/{chunk-HUKVX47W.js.map → chunk-KLMP2BYC.js.map} +0 -0
- /package/dist/{chunk-VU4BANG7.js.map → chunk-KTYZRAB7.js.map} +0 -0
- /package/dist/{chunk-EIJC5DWG.js.map → chunk-LDDN254Q.js.map} +0 -0
- /package/dist/{chunk-QYUB2RFN.js.map → chunk-LI6OLYUB.js.map} +0 -0
- /package/dist/{chunk-TNDV33LP.js.map → chunk-LOJK733T.js.map} +0 -0
- /package/dist/{chunk-S52IVFMS.js.map → chunk-MXZ43UCQ.js.map} +0 -0
- /package/dist/{chunk-UUFHI7J5.js.map → chunk-NE6XUN5Z.js.map} +0 -0
- /package/dist/{chunk-WXDJBSES.js.map → chunk-NIS523UM.js.map} +0 -0
- /package/dist/{chunk-KJ3AXHKF.js.map → chunk-OGTTJKHI.js.map} +0 -0
- /package/dist/{chunk-ZSLOXTYJ.js.map → chunk-OYP27CYE.js.map} +0 -0
- /package/dist/{chunk-FTSVJIEU.js.map → chunk-PNLM35GU.js.map} +0 -0
- /package/dist/{chunk-REQAKZ64.js.map → chunk-QTWXVOPT.js.map} +0 -0
- /package/dist/{chunk-AKPRFFAI.js.map → chunk-QWHURFJ3.js.map} +0 -0
- /package/dist/{chunk-CUN5RJTH.js.map → chunk-R75DZ3AK.js.map} +0 -0
- /package/dist/{chunk-AL6Z2JYR.js.map → chunk-SKX4NA6E.js.map} +0 -0
- /package/dist/{chunk-EVSKEIXI.js.map → chunk-SN2YMCTL.js.map} +0 -0
- /package/dist/{chunk-T7LTL7OC.js.map → chunk-SX3MEC3Q.js.map} +0 -0
- /package/dist/{chunk-DRKYPQNA.js.map → chunk-TEUX42YW.js.map} +0 -0
- /package/dist/{chunk-UYA2QMH6.js.map → chunk-TOXTJ7MU.js.map} +0 -0
- /package/dist/{chunk-H3MLYZYP.js.map → chunk-TPQVLBTY.js.map} +0 -0
- /package/dist/{chunk-4N33SWTW.js.map → chunk-TTAP5XFX.js.map} +0 -0
- /package/dist/{chunk-Y5WNNEND.js.map → chunk-TU3EGIKB.js.map} +0 -0
- /package/dist/{chunk-QV5J4TE6.js.map → chunk-U2IRCTAR.js.map} +0 -0
- /package/dist/{chunk-7JSQQZUH.js.map → chunk-UCA47HM7.js.map} +0 -0
- /package/dist/{chunk-23FCBIUN.js.map → chunk-UO7ERXYX.js.map} +0 -0
- /package/dist/{chunk-UEWIIYGA.js.map → chunk-VAGHW3K2.js.map} +0 -0
- /package/dist/{chunk-SNBCAH62.js.map → chunk-VRDNUY4H.js.map} +0 -0
- /package/dist/{chunk-BQGT77IQ.js.map → chunk-VV7MGILP.js.map} +0 -0
- /package/dist/{chunk-GPUYB3ST.js.map → chunk-VZAGBDZ2.js.map} +0 -0
- /package/dist/{chunk-MYAEOSZK.js.map → chunk-W3CLJ7JE.js.map} +0 -0
- /package/dist/{chunk-UFH3ZVVZ.js.map → chunk-W5ENK5CM.js.map} +0 -0
- /package/dist/{chunk-OSSFOPB7.js.map → chunk-WVC3BG6J.js.map} +0 -0
- /package/dist/{chunk-QPNTUFV4.js.map → chunk-WW4N2LRM.js.map} +0 -0
- /package/dist/{chunk-WPE5QYXD.js.map → chunk-X2AKLDPW.js.map} +0 -0
- /package/dist/{chunk-AYRHW4DX.js.map → chunk-X7PVFAYJ.js.map} +0 -0
- /package/dist/{chunk-TOBPKY4V.js.map → chunk-XSMMFCMQ.js.map} +0 -0
- /package/dist/{chunk-MWBHZZA4.js.map → chunk-XWWFBH2G.js.map} +0 -0
- /package/dist/{chunk-VLVMJDGD.js.map → chunk-YDPUBGJ7.js.map} +0 -0
- /package/dist/{chunk-PKFH6C7W.js.map → chunk-YSKGLU2V.js.map} +0 -0
- /package/dist/{chunk-37DCYIT5.js.map → chunk-YU647YW4.js.map} +0 -0
- /package/dist/{chunk-JRODCEIG.js.map → chunk-YVUD3MY4.js.map} +0 -0
- /package/dist/{chunk-27DLUKDF.js.map → chunk-ZHEZISMI.js.map} +0 -0
- /package/dist/{chunk-RQCJJBPY.js.map → chunk-ZMC3N23A.js.map} +0 -0
- /package/dist/{chunk-KBMKALKQ.js.map → chunk-ZW5K4XCQ.js.map} +0 -0
- /package/dist/{chunk-L7Q5BH4A.js.map → chunk-ZXSUWFQX.js.map} +0 -0
- /package/dist/{chunk-JWG2BTJ5.js.map → chunk-ZZM3DOEK.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/ContentToolbar/ColumnsMenu.tsx"],"sourcesContent":["'use client';\n\nimport ColumnsIcon from '@mui/icons-material/ViewColumnRounded';\nimport Box from '@mui/material/Box/index.js';\nimport Checkbox from '@mui/material/Checkbox/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport ListSubheader from '@mui/material/ListSubheader/index.js';\nimport Menu from '@mui/material/Menu/index.js';\nimport MenuItem from '@mui/material/MenuItem/index.js';\nimport React, { useState } from 'react';\n\nimport type { ColumnVisibilityOption, ColumnsMenuProps } from './ContentToolbar.types';\nimport { fieldRadiusPx } from '../../../tokens/field-radius';\nimport { fieldHeight } from '../../../tokens/field-height';\n\n/** One column checkbox row; toggling never closes the menu. */\nfunction ColumnRow({\n option,\n onToggle,\n testId,\n}: {\n option: ColumnVisibilityOption;\n onToggle: (id: string, visible: boolean) => void;\n testId?: string;\n}): React.JSX.Element {\n return (\n <MenuItem\n data-testid={testId}\n onClick={() => onToggle(option.id, !option.visible)}\n disabled={option.locked}\n sx={{ gap: 1 }}\n >\n <Checkbox\n checked={option.visible}\n size=\"small\"\n disableRipple\n sx={{ p: 0, pointerEvents: 'none' }}\n tabIndex={-1}\n />\n <Box component=\"span\" sx={{ flex: 1, minWidth: 0, textAlign: 'left' }}>\n {option.label}\n </Box>\n </MenuItem>\n );\n}\n\n/**\n * Stateless column-visibility selector: a neutral icon button (matching\n * {@link FilterTrigger}/{@link SortByDropdown}) opening a checkbox list of the\n * hideable columns. Purely presentational — the caller owns the visibility state\n * and is notified via `onToggle`. The menu stays open while toggling so several\n * columns can be flipped at once.\n */\nexport function ColumnsMenu({\n columns,\n onToggle,\n title = 'Columns',\n ariaLabel = 'Toggle columns',\n 'data-testid': testId,\n}: ColumnsMenuProps): React.JSX.Element {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const open = Boolean(anchorEl);\n const close = (): void => setAnchorEl(null);\n\n return (\n <>\n <IconButton\n size=\"small\"\n data-testid={testId}\n aria-label={ariaLabel}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n onClick={(event) => setAnchorEl(event.currentTarget)}\n sx={{\n width: fieldHeight,\n height: fieldHeight,\n borderRadius: fieldRadiusPx,\n color: 'text.secondary',\n bgcolor: open ? 'action.selected' : 'transparent',\n }}\n >\n <ColumnsIcon sx={{ fontSize: 16 }} />\n </IconButton>\n <Menu\n anchorEl={anchorEl}\n open={open}\n onClose={close}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n slotProps={{ paper: { sx: { minWidth: 200 } } }}\n >\n <ListSubheader sx={{ px: 1.5, py: 0.75, fontSize: '0.75rem', fontWeight: 600, color: 'text.primary', lineHeight: 1.5 }}>\n {title}\n </ListSubheader>\n {columns.map((option) => (\n <ColumnRow\n key={option.id}\n option={option}\n onToggle={onToggle}\n testId={testId ? `${testId}-${option.id}` : undefined}\n />\n ))}\n </Menu>\n </>\n );\n}\n"],"mappings":";;;;;;;;AAEA,OAAO,iBAAiB;AACxB,OAAO,SAAS;AAChB,OAAO,cAAc;AACrB,OAAO,gBAAgB;AACvB,OAAO,mBAAmB;AAC1B,OAAO,UAAU;AACjB,OAAO,cAAc;AACrB,SAAgB,gBAAgB;AAiB5B,SAuCA,UAjCE,KANF;AAVJ,SAAS,UAAU;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AACF,GAIsB;AACpB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAa;AAAA,MACb,SAAS,MAAM,SAAS,OAAO,IAAI,CAAC,OAAO,OAAO;AAAA,MAClD,UAAU,OAAO;AAAA,MACjB,IAAI,EAAE,KAAK,EAAE;AAAA,MAEb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,OAAO;AAAA,YAChB,MAAK;AAAA,YACL,eAAa;AAAA,YACb,IAAI,EAAE,GAAG,GAAG,eAAe,OAAO;AAAA,YAClC,UAAU;AAAA;AAAA,QACZ;AAAA,QACA,oBAAC,OAAI,WAAU,QAAO,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,OAAO,GACjE,iBAAO,OACV;AAAA;AAAA;AAAA,EACF;AAEJ;AASO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,eAAe;AACjB,GAAwC;AACtC,QAAM,CAAC,UAAU,WAAW,IAAI,SAA6B,IAAI;AACjE,QAAM,OAAO,QAAQ,QAAQ;AAC7B,QAAM,QAAQ,MAAY,YAAY,IAAI;AAE1C,SACE,iCACE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,eAAa;AAAA,QACb,cAAY;AAAA,QACZ,iBAAc;AAAA,QACd,iBAAe;AAAA,QACf,SAAS,CAAC,UAAU,YAAY,MAAM,aAAa;AAAA,QACnD,IAAI;AAAA,UACF,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,OAAO;AAAA,UACP,SAAS,OAAO,oBAAoB;AAAA,QACtC;AAAA,QAEA,8BAAC,eAAY,IAAI,EAAE,UAAU,GAAG,GAAG;AAAA;AAAA,IACrC;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT,cAAc,EAAE,UAAU,UAAU,YAAY,QAAQ;AAAA,QACxD,iBAAiB,EAAE,UAAU,OAAO,YAAY,QAAQ;AAAA,QACxD,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,IAAI,EAAE,EAAE;AAAA,QAE9C;AAAA,8BAAC,iBAAc,IAAI,EAAE,IAAI,KAAK,IAAI,MAAM,UAAU,WAAW,YAAY,KAAK,OAAO,gBAAgB,YAAY,IAAI,GAClH,iBACH;AAAA,UACC,QAAQ,IAAI,CAAC,WACZ;AAAA,YAAC;AAAA;AAAA,cAEC;AAAA,cACA;AAAA,cACA,QAAQ,SAAS,GAAG,MAAM,IAAI,OAAO,EAAE,KAAK;AAAA;AAAA,YAHvC,OAAO;AAAA,UAId,CACD;AAAA;AAAA;AAAA,IACH;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/DataViews/data-views-more-fields.tsx"],"sourcesContent":["\"use client\";\n\n/**\n * ONE FIELD, RENDERED INSIDE THE \"MAIS\" PANEL.\n *\n * Split from `data-views-more-filters` at the file-size gate, along the seam\n * that was already there: that module is the trigger, the panel and its\n * footer — the chrome — and this is what goes in it.\n *\n * A field with one or two options renders FLAT: inside a panel there is no\n * space to win back, and two labelled checkboxes are faster than a dropdown\n * needing a second click. Past that it becomes a {@link MultiSelectDropdown} —\n * see `INLINE_OPTION_LIMIT`.\n */\nimport Checkbox from \"@mui/material/Checkbox/index.js\";\n\nimport { MultiSelectDropdown } from \"../../layout/ContentToolbar\";\nimport { Box } from \"../../../mui/Box\";\nimport { Text } from \"../../typography/Text\";\n\nimport type { OverflowField } from \"./data-views-overflow\";\nimport { RangeBounds } from \"./data-views-range-pill\";\nimport { isRangeSet } from \"./data-views-range-values\";\nimport type { RangeValue } from \"./data-views-types\";\nimport { useDataViewsCopy } from \"./data-views-copy-context\";\nimport { fieldRadiusPx } from \"../../../tokens/field-radius\";\nimport { fieldHeight } from \"../../../tokens/field-height\";\nimport { fieldEdge } from \"../../../tokens/field-edge\";\n\n/** What each field's control needs, minus the panel's own chrome. */\nexport interface MoreFieldProps {\n pills: Record<string, string[]>;\n ranges: Record<string, RangeValue>;\n onTogglePill: (fieldId: string, value: string, checked: boolean) => void;\n onChangeRange: (fieldId: string, range: RangeValue) => void;\n testIdPrefix: string;\n}\n\n/**\n * Above this many options a field is a DROPDOWN rather than a flat row of\n * checkboxes. Two options cost two lines and read faster laid out; a \"Cliente\"\n * with a dozen turns the panel into a scrolling wall and buries every field\n * under it, which is exactly what the overflow was meant to avoid.\n */\nconst INLINE_OPTION_LIMIT = 2;\n\n/** One overflowed pill: its options as checkboxes, all visible at once. */\nfunction OverflowPill<T extends Record<string, unknown>>({\n field,\n values,\n onToggle,\n onClear,\n testIdPrefix,\n}: {\n field: OverflowField<T>;\n values: string[];\n onToggle: (value: string, checked: boolean) => void;\n onClear: () => void;\n testIdPrefix: string;\n}): React.JSX.Element {\n const copy = useDataViewsCopy();\n const options = field.pill?.options ?? [];\n if (options.length > INLINE_OPTION_LIMIT) {\n return (\n <MultiSelectDropdown\n extraOptionsHeading={copy.filters.optionsHeading}\n clearText={copy.filters.clear}\n clearLabel={copy.filters.clearRange(field.label)}\n label={field.pill?.label ?? field.label}\n options={options}\n selected={new Set(values)}\n onToggle={onToggle}\n onClear={onClear}\n allLabel={copy.filters.allOption}\n searchable={options.length > 6 ? true : undefined}\n searchPlaceholder={copy.filters.optionSearchPlaceholder}\n noResultsLabel={copy.filters.optionsEmpty}\n layout=\"pill\"\n data-testid={`${testIdPrefix}-more-${field.id}`}\n />\n );\n }\n return (\n <Box sx={{ display: \"flex\", flexWrap: \"wrap\", gap: 0.75 }}>\n {(field.pill?.options ?? []).map((option) => {\n const checked = values.includes(option.value);\n return (\n <Box\n key={option.value}\n component=\"label\"\n data-testid={`${testIdPrefix}-more-${field.id}-${option.value}`}\n sx={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 0.25,\n pr: 1,\n border: 1,\n borderStyle: \"solid\",\n minHeight: fieldHeight,\n borderColor: (theme) => (checked ? theme.palette.primary.main : fieldEdge(theme)),\n bgcolor: checked ? \"action.selected\" : \"transparent\",\n borderRadius: fieldRadiusPx,\n cursor: \"pointer\",\n fontSize: \"0.8125rem\",\n color: checked ? \"primary.main\" : \"text.secondary\",\n }}\n >\n <Checkbox\n size=\"small\"\n checked={checked}\n onChange={(event) => onToggle(option.value, event.target.checked)}\n inputProps={{ \"aria-label\": `${field.label}: ${option.label}` }}\n />\n {option.label}\n </Box>\n );\n })}\n </Box>\n );\n}\n\n\n/**\n * One overflowed range: its presets and its two bounds, as the same controls\n * the pill uses.\n *\n * The whole control DELEGATES to {@link RangeBounds} rather than being built\n * here, which is the point — this panel used to render a raw\n * `<input type=\"date\">`, so the masked `dd/mm/aaaa` field existed only while\n * the filter FITTED on the bar. The moment \"Data\" overflowed it reverted to the\n * native control the mask replaced, and a merchant on a narrow screen never saw\n * the fix at all (FUT-744). `Valor` had the twin bug: a bare `type=\"number\"`\n * plus `Number(raw)` dropped the decimal comma this panel is meant to accept.\n *\n * That also retires the intrinsic-width workaround this pair used to need — a\n * native date input reports a wide minimum (its own mask plus the picker\n * glyph), which is what made two of them refuse to shrink and scrolled the\n * panel sideways. A text input has no such minimum.\n *\n * `RangeBounds` renders the preset chips ITSELF, above the inputs. This panel\n * must NOT render its own row as well: when the delegation above landed, the\n * chips it used to draw by hand stayed behind, and \"Data\" showed Hoje/Ontem/\n * Esta semana/Este mês/Este ano twice — two rows, duplicated test ids, and half\n * the panel's height spent saying the same thing (FUT-751).\n */\nfunction OverflowRange<T extends Record<string, unknown>>({\n field,\n value,\n onChange,\n testIdPrefix,\n}: {\n field: OverflowField<T>;\n value: RangeValue;\n onChange: (range: RangeValue) => void;\n testIdPrefix: string;\n}): React.JSX.Element | null {\n // `group === \"range\"` is what selects this component, so `range` is always\n // set; the guard is for the type, not for a state the caller can reach.\n if (!field.range) return null;\n return (\n <RangeBounds\n field={field.range}\n value={value}\n onChange={onChange}\n testId={`${testIdPrefix}-more-${field.id}`}\n />\n );\n}\n\n/**\n * The trigger, badged with how many fields had no room on the bar — and told\n * apart when some of them are APPLIED.\n *\n * An applied filter can land in here now (it is ranked first, not exempt), so\n * this button is the only thing on screen still saying it exists. A neutral\n * badge reading \"3\" would make \"three filters you have not used\" and \"three\n * filters narrowing this list\" look identical, which is the whole failure the\n * old exemption was written to avoid. So an overflow holding applied filters\n * takes the applied tone and counts them in its own badge.\n\n/**\n * Whether a field has anything applied, and how to unapply it — the two shapes\n * (a pill's selected values, a range's bounds) answered in one place so the\n * group that renders them stays a renderer.\n */\nexport function fieldClearing<T extends Record<string, unknown>>({\n field,\n pills,\n ranges,\n onTogglePill,\n onChangeRange,\n}: {\n field: OverflowField<T>;\n} & Pick<MoreFieldProps, \"pills\" | \"ranges\" | \"onTogglePill\" | \"onChangeRange\">): {\n applied: boolean;\n clear: () => void;\n} {\n if (field.group === \"range\") {\n return {\n applied: isRangeSet(ranges[field.id] ?? {}),\n clear: () => onChangeRange(field.id, {}),\n };\n }\n const values = pills[field.id] ?? [];\n return {\n applied: values.length > 0,\n clear: () => values.forEach((value) => onTogglePill(field.id, value, false)),\n };\n}\n\n\n/** One labelled group in the panel: the field's name, then its control. */\nexport function MoreGroup<T extends Record<string, unknown>>({\n field,\n pills,\n ranges,\n onTogglePill,\n onChangeRange,\n testIdPrefix,\n}: {\n field: OverflowField<T>;\n} & MoreFieldProps): React.JSX.Element {\n const copy = useDataViewsCopy();\n const { applied, clear } = fieldClearing({ field, pills, ranges, onTogglePill, onChangeRange });\n return (\n <Box sx={{ mb: 1.5, \"&:last-of-type\": { mb: 0 } }}>\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, mb: 0.5 }}>\n <Text variant=\"caption\" as=\"span\">\n <Box component=\"span\" sx={{ color: \"text.secondary\" }}>\n {field.label}\n {field.group === \"range\" && isRangeSet(ranges[field.id] ?? {}) ? \" •\" : \"\"}\n </Box>\n </Text>\n {/* The panel's equivalent of the pill's ✕. Without it a field applied\n in here could only be cleared by finding it again on the bar —\n which is where it goes the moment it becomes active, so the\n operator has to close this panel to undo what they just did. */}\n {applied && (\n <Box\n component=\"button\"\n type=\"button\"\n onClick={clear}\n data-testid={`${testIdPrefix}-more-${field.id}-clear`}\n sx={{\n ml: \"auto\",\n border: 0,\n p: 0,\n bgcolor: \"transparent\",\n cursor: \"pointer\",\n font: \"inherit\",\n fontSize: \"0.75rem\",\n color: \"primary.main\",\n \"&:hover\": { textDecoration: \"underline\" },\n }}\n >\n {copy.filters.clear}\n </Box>\n )}\n </Box>\n {field.group === \"pill\" ? (\n <OverflowPill\n field={field}\n values={pills[field.id] ?? []}\n onToggle={(value, checked) => onTogglePill(field.id, value, checked)}\n onClear={() => (pills[field.id] ?? []).forEach((v) => onTogglePill(field.id, v, false))}\n testIdPrefix={testIdPrefix}\n />\n ) : (\n <OverflowRange\n field={field}\n value={ranges[field.id] ?? {}}\n onChange={(range) => onChangeRange(field.id, range)}\n testIdPrefix={testIdPrefix}\n />\n )}\n </Box>\n );\n}\n\n"],"mappings":"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","names":["default"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/DataViews/base-card.tsx"],"sourcesContent":["\"use client\";\n\nimport { type ReactNode } from \"react\";\n\nimport { useTheme, type CSSObject } from \"@mui/material/styles/index.js\";\n\n/** See the note on `CardSx` in `card-surface` — these fragments get merged. */\ntype CardSx = CSSObject | Record<string, unknown>;\n\nimport { Checkbox } from \"../../form/Checkbox\";\nimport { Card } from \"../../layout/Card\";\nimport { Box } from \"../../../mui/Box\";\nimport { Text } from \"../../typography/Text\";\n\nimport { DragHandle, useDragItem } from \"./data-views-drag\";\nimport {\n CARD_RADIUS,\n cardSurfaceStyles,\n isActionable,\n isSelectable,\n slotTestIds,\n type CardSurfaceProps,\n} from \"./card-surface\";\nimport { CARD_ASPECT_RATIOS, type CardAspectRatio } from \"./data-views-types\";\nimport { useDataViewsCopy } from \"./data-views-copy-context\";\n\nexport interface BaseCardProps extends CardSurfaceProps {\n /** Extra body content below the caption (chips, meta). Optional. */\n children?: ReactNode;\n /** Tile proportion. Defaults to \"4:3\". */\n aspectRatio?: CardAspectRatio;\n /**\n * Size multiplier from the zoom slider (1 = base).\n *\n * Applied as `zoom`, so the whole card grows together — padding, typography,\n * the checkbox, the menu and the media alike — in step with its width, which\n * the grid sizes to base × scale. A card at scale 2 renders at ~twice the\n * size, its proportion preserved by `aspectRatio`. Default 1.\n */\n scale?: number;\n /** Display-image node (e.g. an `<img>` / thumbnail) filling the media region. */\n image?: ReactNode;\n /** Shown centered in the media region when there is no `image` (icon/initial). */\n imageFallback?: ReactNode;\n /** First-class title, rendered in the caption. */\n title?: ReactNode;\n /** Secondary caption line under the title. */\n subtitle?: ReactNode;\n /** The 3-dots menu (or any action node) pinned to the top-right corner. */\n menu?: ReactNode;\n /** Toggle this card's selection. Omit to hide the checkbox (non-selectable). */\n onToggleSelect?: () => void;\n /**\n * This card's id for drag purposes.\n *\n * Draggable ONLY inside a {@link DragContainerProvider} — see\n * `data-views-drag`. On the board that is how a card moves between columns;\n * in a grade it is how the operator reorders. Outside a container this is\n * inert and no grip appears.\n */\n dragId?: string | number;\n checkboxTestId?: string;\n}\n\n/**\n * The outlined-tile style: fixed ratio, scaled padding, selected/dimmed states.\n *\n * See the note on the row: `zoom` scales EVERY length in the subtree, including\n * the MUI internals (checkbox, chip, icon button) that no prop of ours reaches.\n * The grid still sizes the track to BASE_CARD_WIDTH x scale, so the tile fills\n * its track physically and lays its contents out in the unscaled box behind it\n * — which is what \"the whole card grows together\" was always meant to mean.\n */\nfunction cardSx(opts: {\n aspectRatio: CardAspectRatio;\n pad: number;\n scale: number;\n interactive: boolean;\n draggable: boolean;\n}): CardSx {\n const { aspectRatio, pad, scale, interactive, draggable } = opts;\n return {\n position: \"relative\",\n zoom: scale,\n aspectRatio: String(CARD_ASPECT_RATIOS[aspectRatio]),\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n p: pad,\n cursor: draggable ? \"grab\" : interactive ? \"pointer\" : undefined,\n ...(draggable ? { touchAction: \"none\", \"&:active\": { cursor: \"grabbing\" } } : {}),\n };\n}\n\n/**\n * How far the first block in flow must start below the tile's top edge to clear\n * the absolute overlays: their 4px inset plus the checkbox's 38px hit area (20px\n * glyph in MUI's 9px padding), which is the taller of the two corners.\n */\nconst OVERLAY_BAND_PX = 42;\n\n/**\n * The top margin each stacked slot needs, in MUI spacing units.\n *\n * The overlays are absolute, so they cost the flow nothing — over MEDIA that is\n * the whole point (a checkbox on a thumbnail reads as a checkbox on a\n * thumbnail). Over TEXT it is a collision: a title-only tile started its first\n * line at the padding edge, directly under the checkbox, and rendered\n * `Selecionada` with the box sitting on the `Se`. So when nothing pictorial is\n * there to absorb them, whichever block comes first clears the band instead.\n */\nfunction contentGaps(opts: {\n hasMedia: boolean;\n hasBody: boolean;\n overlays: boolean;\n pad: number;\n}): { body: number; caption: number } {\n const { hasMedia, hasBody, overlays, pad } = opts;\n const gap = pad * 0.5;\n const clear = !hasMedia && overlays ? Math.max(0, OVERLAY_BAND_PX / 8 - pad) : 0;\n return { body: hasMedia ? gap : clear, caption: hasMedia || hasBody ? gap : clear };\n}\n\n/** The top-corner overlays: the select checkbox (left) and the menu slot (right). */\nfunction CardOverlays({\n selected,\n onToggleSelect,\n checkboxTestId,\n menu,\n}: Pick<BaseCardProps, \"selected\" | \"onToggleSelect\" | \"checkboxTestId\" | \"menu\">): React.JSX.Element {\n const copy = useDataViewsCopy();\n return (\n <>\n {onToggleSelect && (\n <Box sx={{ position: \"absolute\", top: 4, left: 4, zIndex: 2 }}>\n <Checkbox\n checked={selected}\n onChange={() => onToggleSelect()}\n // Selecting must never trigger the card's own click (open/edit).\n onClick={(event) => event.stopPropagation()}\n size=\"small\"\n data-testid={checkboxTestId}\n aria-label={copy.selection.selectRow}\n />\n </Box>\n )}\n {menu && (\n <Box\n sx={{ position: \"absolute\", top: 4, right: 4, zIndex: 2 }}\n // Acting on the menu must never trigger the card's own click.\n onClick={(event) => event.stopPropagation()}\n >\n {menu}\n </Box>\n )}\n </>\n );\n}\n\n/**\n * Media region: fills the tile above the caption; centers `imageFallback` when\n * there is no image so title-only entities still fill the ratio box and mixed\n * grids stay aligned.\n */\nfunction CardMedia({ image, imageFallback }: Pick<BaseCardProps, \"image\" | \"imageFallback\">): React.JSX.Element {\n return (\n <Box\n sx={{\n flex: 1,\n minHeight: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n overflow: \"hidden\",\n borderRadius: 1,\n \"& img\": { width: \"100%\", height: \"100%\", objectFit: \"cover\" },\n }}\n >\n {image ?? imageFallback}\n </Box>\n );\n}\n\n/** The body slot (chips/meta); fills remaining space when there is no media. */\nfunction CardBodyContent({\n children,\n fill,\n topGap,\n}: {\n children: ReactNode;\n fill: boolean;\n topGap: number;\n}): React.JSX.Element {\n return (\n <Box\n sx={{\n flex: fill ? 1 : \"none\",\n minHeight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 0.75,\n mt: topGap,\n overflow: \"hidden\",\n }}\n >\n {children}\n </Box>\n );\n}\n\n/** The title/subtitle caption. */\nfunction CardCaption({\n title,\n subtitle,\n topGap,\n}: {\n title?: ReactNode;\n subtitle?: ReactNode;\n topGap: number;\n}): React.JSX.Element {\n return (\n <Box sx={{ mt: topGap, minWidth: 0 }}>\n {title != null && (\n <Text\n variant=\"heading\"\n size=\"sm\"\n weight=\"bold\"\n as=\"p\"\n style={{\n lineHeight: 1.15,\n fontSize: \"0.95rem\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {title}\n </Text>\n )}\n {subtitle != null && (\n <Text variant=\"caption\" size=\"xs\" color=\"secondary\" as=\"p\">\n {subtitle}\n </Text>\n )}\n </Box>\n );\n}\n\n/** The stacked media / body / caption slots inside the tile (below the overlays). */\nfunction CardContents({\n children,\n image,\n imageFallback,\n title,\n subtitle,\n overlays,\n pad,\n}: Pick<BaseCardProps, \"children\" | \"image\" | \"imageFallback\" | \"title\" | \"subtitle\"> & {\n overlays: boolean;\n pad: number;\n}): React.JSX.Element {\n const hasMedia = image != null || imageFallback != null;\n const hasBody = children != null;\n const hasCaption = title != null || subtitle != null;\n const top = contentGaps({ hasMedia, hasBody, overlays, pad });\n return (\n <>\n {hasMedia && <CardMedia image={image} imageFallback={imageFallback} />}\n {hasBody && (\n <CardBodyContent fill={!hasMedia} topGap={top.body}>\n {children}\n </CardBodyContent>\n )}\n {hasCaption && <CardCaption title={title} subtitle={subtitle} topGap={top.caption} />}\n </>\n );\n}\n\n/**\n * Reusable selectable card shell for the DataViews \"Grade\" (cards) layout, and\n * the ONLY card component that lives in `@12-apps/ui` — every domain \"kind card\"\n * (product, mesa, role, …) lives in the app and composes this envelope. See the\n * per-slot helpers above; this shell just assembles them within a fixed-ratio\n * tile. Reads no context, so it renders standalone as well as inside the grid.\n */\n/**\n * Everything the tile derives from its props before it can render — pulled out\n * so `BaseCard` itself stays inside the complexity budget.\n */\nfunction useCardShell(props: BaseCardProps) {\n const actionable = isActionable(props.state);\n return {\n selectable: isSelectable(props),\n actionable,\n theme: useTheme(),\n slot: slotTestIds(props.testId),\n scale: props.scale ?? 1,\n // The card's own veto over the container's decision — see `CardSurfaceProps`.\n drag: useDragItem(props.draggable === false || !actionable ? undefined : props.dragId),\n };\n}\n\nexport function BaseCard(props: BaseCardProps): React.JSX.Element {\n const { aspectRatio = \"4:3\", selected = false } = props;\n const { menu, onToggleSelect, onClick } = props;\n const { selectable, actionable, theme, slot, scale, drag } = useCardShell(props);\n const dataTestId = props.testId;\n const checkboxTestId = slot(\"checkbox\");\n const pad = 1.5;\n\n return (\n <Card\n variant=\"outlined\"\n onClick={onClick}\n dataTestId={dataTestId}\n className={props.className}\n aria-label={props[\"aria-label\"]}\n aria-disabled={actionable ? undefined : true}\n {...drag.itemProps}\n // A PLAIN OBJECT, not a function. `Card` merges by spreading\n // (`sx={{ ...defaults, ...sx }}`), and spreading a function yields\n // nothing at all — the styles vanish silently, which is exactly how the\n // first version of this shipped with no variants and no effects.\n sx={{\n // The same corner the row uses: a Grade and a Lista of the same records\n // sit beside each other, and a tile that rounds harder than the row\n // reads as a different component.\n borderRadius: CARD_RADIUS,\n // The shared half — variant, colour, selection, effects — identical to\n // the one BaseListCard uses, so a Grade and a Lista of the same records\n // are dressed by one set of rules.\n ...cardSurfaceStyles(\n {\n ...props,\n selectable,\n shape: \"tile\",\n // A card mid-drag is a ghost of itself; the drop target is what the\n // eye should be on.\n state: drag.dragging ? \"disabled\" : props.state,\n },\n theme,\n ),\n // …and the tile's own geometry on top.\n ...cardSx({\n aspectRatio, pad, scale,\n interactive: onClick != null,\n draggable: drag.draggable && drag.handleProps === undefined,\n }),\n }}\n >\n {/* Bottom-left, opposite the menu and clear of the checkbox — a grip in\n the same corner as a control that toggles selection means every drag\n starts with a near-miss on it. */}\n {drag.draggable && (\n <Box sx={{ position: \"absolute\", bottom: 4, left: 4, zIndex: 2 }}>\n <DragHandle\n handleProps={drag.handleProps}\n gated={drag.handleProps !== undefined}\n testId={slot(\"drag\")}\n />\n </Box>\n )}\n <CardOverlays\n selected={selected}\n onToggleSelect={selectable ? onToggleSelect ?? (() => {}) : undefined}\n checkboxTestId={checkboxTestId}\n menu={menu}\n />\n <CardContents\n image={props.image}\n imageFallback={props.imageFallback}\n title={props.title}\n subtitle={props.subtitle}\n overlays={selectable || menu != null}\n pad={pad}\n >\n {props.children}\n </CardContents>\n </Card>\n );\n}\n"],"mappings":"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","names":["default"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/TableFilter/TableFilter.tsx"],"sourcesContent":["'use client';\n\nimport CloseIcon from '@mui/icons-material/Close';\nimport SearchIcon from '@mui/icons-material/Search';\nimport Box from '@mui/material/Box/index.js';\nimport Checkbox from '@mui/material/Checkbox/index.js';\nimport Divider from '@mui/material/Divider/index.js';\nimport FormControlLabel from '@mui/material/FormControlLabel/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport InputAdornment from '@mui/material/InputAdornment/index.js';\nimport Link from '@mui/material/Link/index.js';\nimport TextField from '@mui/material/TextField/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport React, { useRef, useState } from 'react';\n\nimport { TableFilterContext, useTableFilterContext } from './TableFilterContext';\nimport type {\n TableFilterCheckboxFieldProps,\n TableFilterKeywordProps,\n TableFilterLayoutProps,\n TableFilterMainProps,\n TableFilterPanelProps,\n TableFilterProps,\n TableFilterRangeFieldProps,\n TableFilterSectionProps,\n} from './TableFilter.types';\nimport { fieldTextFieldStyles } from '../../../tokens/field-height';\n\nconst PANEL_WIDTH = 280;\n\n/**\n * Compound filter-panel system, MUI port of the reference `TableFilter`. Provides\n * open/close state; `Panel` slides in from the right beside `Main` (no overlap).\n *\n * @example\n * ```tsx\n * <TableFilter open={open} onOpenChange={setOpen} hasActiveFilters={n > 0}>\n * <TableFilter.Layout>\n * <TableFilter.Main>{table}</TableFilter.Main>\n * <TableFilter.Panel onClearAll={clearAll}>\n * <TableFilter.Keyword value={q} onChange={setQ} />\n * <TableFilter.Section title=\"Attributes\">\n * <TableFilter.CheckboxField label=\"Category\" options={cats} selected={sel} onToggle={toggle} />\n * <TableFilter.RangeField label=\"Price\" unit=\"R$\" value={price} onChange={setPrice} />\n * </TableFilter.Section>\n * </TableFilter.Panel>\n * </TableFilter.Layout>\n * </TableFilter>\n * ```\n */\nexport function TableFilter({\n children,\n open,\n onOpenChange,\n hasActiveFilters = false,\n copy,\n}: TableFilterProps): React.JSX.Element {\n return (\n <TableFilterContext.Provider value={{ open, onOpenChange, hasActiveFilters, copy }}>\n {children}\n </TableFilterContext.Provider>\n );\n}\nTableFilter.displayName = 'TableFilter';\n\nconst TableFilterLayout = ({ children, className }: TableFilterLayoutProps): React.JSX.Element => {\n const { open } = useTableFilterContext();\n return (\n <Box\n className={className}\n sx={{\n display: 'flex',\n minHeight: 0,\n minWidth: 0,\n flex: 1,\n alignItems: 'stretch',\n overflow: 'hidden',\n gap: open ? 2 : 0,\n }}\n >\n {children}\n </Box>\n );\n};\nTableFilterLayout.displayName = 'TableFilter.Layout';\n\nconst TableFilterMain = ({ children, className }: TableFilterMainProps): React.JSX.Element => (\n <Box className={className} sx={{ minWidth: 0, flex: 1, overflowY: 'auto', overflowX: 'hidden' }}>\n {children}\n </Box>\n);\nTableFilterMain.displayName = 'TableFilter.Main';\n\nconst TableFilterPanel = ({\n children,\n onClearAll,\n ariaLabel = 'Filters',\n clearTestId,\n}: TableFilterPanelProps): React.JSX.Element => {\n const { open, copy } = useTableFilterContext();\n return (\n <Box\n component=\"aside\"\n aria-label={ariaLabel}\n aria-hidden={!open}\n sx={{\n display: 'flex',\n minHeight: 0,\n flexShrink: 0,\n flexDirection: 'column',\n alignSelf: 'stretch',\n overflow: 'hidden',\n bgcolor: 'background.paper',\n width: open ? PANEL_WIDTH : 0,\n borderLeft: open ? 1 : 0,\n borderColor: 'divider',\n transition: 'width 300ms ease-in-out',\n '@media (prefers-reduced-motion: reduce)': { transition: 'none' },\n }}\n >\n <Box\n sx={{\n display: 'flex',\n minHeight: 0,\n flex: 1,\n flexDirection: 'column',\n overflowY: 'auto',\n overflowX: 'hidden',\n visibility: open ? 'visible' : 'hidden',\n opacity: open ? 1 : 0,\n pointerEvents: open ? 'auto' : 'none',\n transition: 'opacity 200ms ease-out',\n }}\n >\n <Box sx={{ boxSizing: 'border-box', display: 'flex', width: '100%', minWidth: 0, flexDirection: 'column', gap: 2.5, p: 2 }}>\n <Box sx={{ display: 'flex', justifyContent: 'flex-end' }}>\n <Link\n component=\"button\"\n type=\"button\"\n underline=\"hover\"\n data-testid={clearTestId}\n onClick={onClearAll}\n sx={{ fontSize: '0.75rem', color: 'text.secondary' }}\n >\n {copy.clearAllFilters}\n </Link>\n </Box>\n {children}\n </Box>\n </Box>\n </Box>\n );\n};\nTableFilterPanel.displayName = 'TableFilter.Panel';\n\nconst TableFilterKeyword = ({\n value,\n onChange,\n placeholder = 'Press Enter to filter',\n label = 'Filter by keyword',\n testId,\n}: TableFilterKeywordProps): React.JSX.Element => {\n const { copy } = useTableFilterContext();\n const [draft, setDraft] = useState(value);\n const prevValue = useRef(value);\n if (prevValue.current !== value) {\n prevValue.current = value;\n if (draft !== value) setDraft(value);\n }\n\n const commit = (): void => {\n if (draft !== value) onChange(draft);\n };\n const clearKeyword = (): void => {\n setDraft('');\n if (value !== '') onChange('');\n };\n\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n <Typography component=\"label\" sx={{ fontSize: '0.75rem', fontWeight: 500, color: 'text.secondary' }}>\n {label}\n </Typography>\n <TextField\n size=\"small\"\n sx={fieldTextFieldStyles}\n name=\"keyword\"\n placeholder={placeholder}\n value={draft}\n onChange={(event) => setDraft(event.target.value)}\n onBlur={commit}\n onKeyDown={(event) => {\n if (event.key !== 'Enter') return;\n event.preventDefault();\n commit();\n }}\n inputProps={{ 'aria-label': label, 'data-testid': testId }}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon sx={{ fontSize: 16, color: 'text.secondary' }} />\n </InputAdornment>\n ),\n endAdornment:\n draft !== '' ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n aria-label={copy.clearKeyword}\n data-testid={testId ? `${testId}-clear` : undefined}\n onMouseDown={(event) => event.preventDefault()}\n onClick={clearKeyword}\n >\n <CloseIcon sx={{ fontSize: 16 }} />\n </IconButton>\n </InputAdornment>\n ) : null,\n }}\n />\n </Box>\n );\n};\nTableFilterKeyword.displayName = 'TableFilter.Keyword';\n\nconst TableFilterSection = ({ title, children }: TableFilterSectionProps): React.JSX.Element => (\n <Box>\n <Divider sx={{ mb: 2.5 }} />\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1.5 }}>\n <Typography component=\"h2\" sx={{ fontSize: '0.875rem', fontWeight: 600, color: 'text.primary' }}>\n {title}\n </Typography>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>{children}</Box>\n </Box>\n </Box>\n);\nTableFilterSection.displayName = 'TableFilter.Section';\n\nfunction TableFilterCheckboxField<TValue extends string = string>({\n label,\n options,\n selected,\n onToggle,\n testId,\n}: TableFilterCheckboxFieldProps<TValue>): React.JSX.Element {\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }} data-testid={testId}>\n <Typography sx={{ fontSize: '0.75rem', fontWeight: 500, color: 'text.secondary' }}>{label}</Typography>\n <Box sx={{ display: 'flex', flexDirection: 'column' }}>\n {options.map((option) => {\n const checked = selected.has(option.value);\n return (\n <FormControlLabel\n key={option.value}\n control={\n <Checkbox\n size=\"small\"\n checked={checked}\n onChange={(event) => onToggle(option.value, event.target.checked)}\n data-testid={testId ? `${testId}-${option.value}` : undefined}\n sx={{ py: 0.25 }}\n />\n }\n label={\n <Box component=\"span\" sx={{ fontSize: '0.875rem' }}>\n {option.label}\n {option.count != null && (\n <Box component=\"span\" sx={{ color: 'text.secondary' }}>\n {' '}\n ({option.count})\n </Box>\n )}\n </Box>\n }\n sx={{ ml: -0.5, mr: 0 }}\n />\n );\n })}\n </Box>\n </Box>\n );\n}\nTableFilterCheckboxField.displayName = 'TableFilter.CheckboxField';\n\nfunction parseBound(text: string): number | undefined {\n if (text.trim() === '') return undefined;\n const parsed = Number(text);\n return Number.isNaN(parsed) ? undefined : parsed;\n}\n\n/** One numeric bound input (min or max) for {@link TableFilterRangeField}. */\nfunction RangeBound({\n bound,\n error,\n placeholder,\n step,\n ariaLabel,\n testId,\n onChange,\n}: {\n bound: number | undefined;\n error: boolean;\n placeholder: string;\n step?: number;\n ariaLabel: string;\n testId?: string;\n onChange: (next: number | undefined) => void;\n}): React.JSX.Element {\n return (\n <TextField\n size=\"small\"\n sx={fieldTextFieldStyles}\n type=\"number\"\n error={error}\n placeholder={placeholder}\n value={bound != null ? String(bound) : ''}\n onChange={(event) => onChange(parseBound(event.target.value))}\n inputProps={{ step, 'aria-label': ariaLabel, 'data-testid': testId }}\n />\n );\n}\n\n/** Inverted range: both ends set and max < min (surfaced to the user as an error). */\nconst isRangeInverted = (value: { min?: number; max?: number }): boolean =>\n value.min != null && value.max != null && value.max < value.min;\n\nconst TableFilterRangeField = ({\n label,\n value,\n onChange,\n unit,\n step,\n minPlaceholder,\n maxPlaceholder,\n invalidLabel,\n testId,\n}: TableFilterRangeFieldProps): React.JSX.Element => {\n const { copy } = useTableFilterContext();\n const invalid = isRangeInverted(value);\n // A field may override any of the three; unset, they come from the root's\n // table. Neither path reaches an English literal in this package.\n const minText = minPlaceholder ?? copy.rangeMin;\n const maxText = maxPlaceholder ?? copy.rangeMax;\n const invalidText = invalidLabel ?? copy.invalidRange;\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }} data-testid={testId}>\n <Typography sx={{ fontSize: '0.75rem', fontWeight: 500, color: 'text.secondary' }}>\n {label}\n {unit ? ` (${unit})` : ''}\n </Typography>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <RangeBound\n bound={value.min}\n error={invalid}\n placeholder={minText}\n step={step}\n ariaLabel={`${label} ${minText}`}\n testId={testId ? `${testId}-min` : undefined}\n onChange={(min) => onChange({ ...value, min })}\n />\n <Typography component=\"span\" sx={{ color: 'text.secondary' }}>\n –\n </Typography>\n <RangeBound\n bound={value.max}\n error={invalid}\n placeholder={maxText}\n step={step}\n ariaLabel={`${label} ${maxText}`}\n testId={testId ? `${testId}-max` : undefined}\n onChange={(max) => onChange({ ...value, max })}\n />\n </Box>\n {invalid && (\n <Typography\n role=\"alert\"\n data-testid={testId ? `${testId}-error` : undefined}\n sx={{ fontSize: '0.7rem', color: 'error.main' }}\n >\n {invalidText}\n </Typography>\n )}\n </Box>\n );\n};\nTableFilterRangeField.displayName = 'TableFilter.RangeField';\n\nTableFilter.Layout = TableFilterLayout;\nTableFilter.Main = TableFilterMain;\nTableFilter.Panel = TableFilterPanel;\nTableFilter.Keyword = TableFilterKeyword;\nTableFilter.Section = TableFilterSection;\nTableFilter.CheckboxField = TableFilterCheckboxField;\nTableFilter.RangeField = TableFilterRangeField;\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/form/Menubar/Menubar.item.tsx"],"sourcesContent":["import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport Box from '@mui/material/Box/index.js';\nimport Button from '@mui/material/Button/index.js';\nimport Chip from '@mui/material/Chip/index.js';\nimport Divider from '@mui/material/Divider/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 { useTheme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { sizeStyles } from './Menubar.styles';\nimport type { MenubarItem, MenubarProps } from './Menubar.types';\n\nexport interface MenubarItemViewProps {\n item: MenubarItem;\n size: NonNullable<MenubarProps['size']>;\n disabled: boolean;\n isOpen: boolean;\n anchorEl: HTMLElement | null;\n onOpen: (itemId: string, anchorEl: HTMLElement) => void;\n onActivate: (item: MenubarItem) => void;\n onClose: () => void;\n onFocus?: React.FocusEventHandler;\n onBlur?: React.FocusEventHandler;\n}\n\n/** One row of an open menu: its icon, its label, and its shortcut hint. */\nconst DropdownItem: React.FC<{ child: MenubarItem; onActivate: (item: MenubarItem) => void }> = ({\n child,\n onActivate,\n}) =>\n child.divider ? (\n <Divider />\n ) : (\n <MenuItem onClick={() => onActivate(child)} disabled={child.disabled}>\n {child.icon && <ListItemIcon>{child.icon}</ListItemIcon>}\n <ListItemText>{child.label}</ListItemText>\n {child.shortcut && (\n <Chip\n label={child.shortcut}\n size=\"small\"\n variant=\"outlined\"\n sx={{ ml: 2, height: 20, fontSize: '0.7rem' }}\n />\n )}\n </MenuItem>\n );\n\n/**\n * A top-level menubar entry. An entry with children opens its dropdown; one\n * without acts immediately — a decision the click and keyboard paths both need,\n * so it is made once here rather than in each handler.\n */\nexport const MenubarItemView: React.FC<MenubarItemViewProps> = ({\n item,\n size,\n disabled,\n isOpen,\n anchorEl,\n onOpen,\n onActivate,\n onClose,\n onFocus,\n onBlur,\n}) => {\n const theme = useTheme();\n const hasChildren = Boolean(item.children && item.children.length > 0);\n\n const activate = (target: HTMLElement) => {\n if (hasChildren) {\n onOpen(item.id, target);\n } else {\n onActivate(item);\n }\n };\n\n return (\n <Box>\n <Button\n data-testid={`menubar-button-${item.id}`}\n onClick={(e) => activate(e.currentTarget)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n activate(e.currentTarget);\n }\n }}\n // Keeping focus on mousedown is what lets handleMenuClose return it here.\n onMouseDown={(e) => e.preventDefault()}\n onFocus={onFocus}\n onBlur={onBlur}\n disabled={item.disabled || disabled}\n startIcon={item.icon}\n endIcon={hasChildren ? <KeyboardArrowDownIcon /> : null}\n aria-haspopup={hasChildren ? 'menu' : undefined}\n aria-expanded={hasChildren ? isOpen : undefined}\n sx={{ color: 'inherit', textTransform: 'none', ...sizeStyles(theme, size) }}\n >\n {item.label}\n </Button>\n\n {hasChildren && (\n <Menu\n anchorEl={anchorEl}\n open={isOpen}\n onClose={onClose}\n autoFocus\n PaperProps={{ sx: { minWidth: 200, mt: 1 } }}\n >\n {item.children?.map((child) => (\n <DropdownItem key={child.id} child={child} onActivate={onActivate} />\n ))}\n </Menu>\n )}\n </Box>\n );\n};\n"],"mappings":";;;;;AAAA,OAAO,2BAA2B;AAClC,OAAO,SAAS;AAChB,OAAO,YAAY;AACnB,OAAO,UAAU;AACjB,OAAO,aAAa;AACpB,OAAO,kBAAkB;AACzB,OAAO,kBAAkB;AACzB,OAAO,UAAU;AACjB,OAAO,cAAc;AACrB,SAAS,gBAAgB;AAyBrB,cAEA,YAFA;AALJ,IAAM,eAA0F,CAAC;AAAA,EAC/F;AAAA,EACA;AACF,MACE,MAAM,UACJ,oBAAC,WAAQ,IAET,qBAAC,YAAS,SAAS,MAAM,WAAW,KAAK,GAAG,UAAU,MAAM,UACzD;AAAA,QAAM,QAAQ,oBAAC,gBAAc,gBAAM,MAAK;AAAA,EACzC,oBAAC,gBAAc,gBAAM,OAAM;AAAA,EAC1B,MAAM,YACL;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,MAAM;AAAA,MACb,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,IAAI,EAAE,IAAI,GAAG,QAAQ,IAAI,UAAU,SAAS;AAAA;AAAA,EAC9C;AAAA,GAEJ;AAQG,IAAM,kBAAkD,CAAC;AAAA,EAC9D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,cAAc,QAAQ,KAAK,YAAY,KAAK,SAAS,SAAS,CAAC;AAErE,QAAM,WAAW,CAAC,WAAwB;AACxC,QAAI,aAAa;AACf,aAAO,KAAK,IAAI,MAAM;AAAA,IACxB,OAAO;AACL,iBAAW,IAAI;AAAA,IACjB;AAAA,EACF;AAEA,SACE,qBAAC,OACC;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,eAAa,kBAAkB,KAAK,EAAE;AAAA,QACtC,SAAS,CAAC,MAAM,SAAS,EAAE,aAAa;AAAA,QACxC,WAAW,CAAC,MAAM;AAChB,cAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AACtC,cAAE,eAAe;AACjB,qBAAS,EAAE,aAAa;AAAA,UAC1B;AAAA,QACF;AAAA,QAEA,aAAa,CAAC,MAAM,EAAE,eAAe;AAAA,QACrC;AAAA,QACA;AAAA,QACA,UAAU,KAAK,YAAY;AAAA,QAC3B,WAAW,KAAK;AAAA,QAChB,SAAS,cAAc,oBAAC,yBAAsB,IAAK;AAAA,QACnD,iBAAe,cAAc,SAAS;AAAA,QACtC,iBAAe,cAAc,SAAS;AAAA,QACtC,IAAI,EAAE,OAAO,WAAW,eAAe,QAAQ,GAAG,WAAW,OAAO,IAAI,EAAE;AAAA,QAEzE,eAAK;AAAA;AAAA,IACR;AAAA,IAEC,eACC;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,MAAM;AAAA,QACN;AAAA,QACA,WAAS;AAAA,QACT,YAAY,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI,EAAE,EAAE;AAAA,QAE1C,eAAK,UAAU,IAAI,CAAC,UACnB,oBAAC,gBAA4B,OAAc,cAAxB,MAAM,EAA0C,CACpE;AAAA;AAAA,IACH;AAAA,KAEJ;AAEJ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/form/InputOTP/InputOTP.styles.ts"],"sourcesContent":["import { alpha } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\n\nimport { fieldEdge } from '../../../tokens/field-edge';\nimport { fieldRadius } from '../../../tokens/field-radius';\nimport { asFieldSize, fieldHeight } from '../../../tokens/field-height';\nimport { absoluteInk, controlNeutral } from '../../../tokens/ink';\n\ninterface ColorPalette {\n main: string;\n dark?: string;\n light?: string;\n contrastText?: string;\n}\n\n/** `neutral` is not a MUI palette entry, so it is built from the grey ramp. */\nconst neutralPalette = (theme: Theme): ColorPalette => controlNeutral(theme);\n\n/** `danger` is this component's name for the error palette. */\nconst namedPalette = (theme: Theme, color: string): ColorPalette => {\n const colorMap: Record<string, ColorPalette> = {\n primary: theme.palette.primary,\n secondary: theme.palette.secondary,\n success: theme.palette.success,\n warning: theme.palette.warning,\n info: theme.palette.info,\n danger: theme.palette.error,\n };\n\n return colorMap[color] || theme.palette.primary;\n};\n\nconst getColorFromTheme = (theme: Theme, color: string): ColorPalette => {\n if (color === 'neutral') {\n return neutralPalette(theme);\n }\n\n const palette = namedPalette(theme, color);\n const { primary } = theme.palette;\n\n return {\n main: palette.main || primary.main,\n dark: palette.dark || palette.main || primary.dark,\n light: palette.light || palette.main || primary.light,\n contrastText: palette.contrastText || absoluteInk(theme).white,\n };\n};\n\ntype SizeKey = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/** Each slot's type. Its side is the theme's field height for the size (a square). */\nconst SIZES: Record<SizeKey, { fontSize: string }> = {\n xs: { fontSize: '0.75rem' },\n sm: { fontSize: '0.875rem' },\n md: { fontSize: '1rem' },\n lg: { fontSize: '1.125rem' },\n xl: { fontSize: '1.25rem' },\n};\n\nexport interface OtpSlotFlags {\n customColor?: string;\n customSize?: string;\n glass?: boolean;\n gradient?: boolean;\n}\n\nexport const otpSlotSx = (theme: Theme, flags: OtpSlotFlags): CSSObject => {\n const { customColor = 'primary', customSize = 'md', glass, gradient } = flags;\n const palette = getColorFromTheme(theme, customColor);\n const { fontSize } = SIZES[customSize as SizeKey] ?? SIZES.md;\n // A slot is a field: a square of the theme's field height for its size.\n const side = fieldHeight(theme, asFieldSize(customSize));\n\n return {\n width: side,\n height: side,\n '& .MuiOutlinedInput-root': {\n width: side,\n height: side,\n fontSize,\n fontWeight: 600,\n textAlign: 'center',\n borderRadius: fieldRadius(theme),\n ...(glass && {\n backgroundColor: alpha(theme.palette.background.paper, 0.1),\n backdropFilter: 'blur(20px)',\n '& fieldset': { border: `1px solid ${fieldEdge(theme)}` },\n }),\n ...(gradient && {\n '&.Mui-focused fieldset': {\n background: `linear-gradient(135deg, ${palette.main}, ${palette.light})`,\n borderWidth: '2px',\n },\n }),\n '& input': { textAlign: 'center', padding: 0, fontWeight: 'inherit' },\n ...(!glass && { '& fieldset': { borderColor: fieldEdge(theme) } }),\n '&:hover fieldset': { borderColor: palette.main },\n '&.Mui-focused fieldset': { borderColor: palette.main, borderWidth: '2px' },\n },\n };\n};\n"],"mappings":";;;;;;;;;;;;;;;;AAAA,SAAS,aAAa;AAgBtB,IAAM,iBAAiB,CAAC,UAA+B,eAAe,KAAK;AAG3E,IAAM,eAAe,CAAC,OAAc,UAAgC;AAClE,QAAM,WAAyC;AAAA,IAC7C,SAAS,MAAM,QAAQ;AAAA,IACvB,WAAW,MAAM,QAAQ;AAAA,IACzB,SAAS,MAAM,QAAQ;AAAA,IACvB,SAAS,MAAM,QAAQ;AAAA,IACvB,MAAM,MAAM,QAAQ;AAAA,IACpB,QAAQ,MAAM,QAAQ;AAAA,EACxB;AAEA,SAAO,SAAS,KAAK,KAAK,MAAM,QAAQ;AAC1C;AAEA,IAAM,oBAAoB,CAAC,OAAc,UAAgC;AACvE,MAAI,UAAU,WAAW;AACvB,WAAO,eAAe,KAAK;AAAA,EAC7B;AAEA,QAAM,UAAU,aAAa,OAAO,KAAK;AACzC,QAAM,EAAE,QAAQ,IAAI,MAAM;AAE1B,SAAO;AAAA,IACL,MAAM,QAAQ,QAAQ,QAAQ;AAAA,IAC9B,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ;AAAA,IAC9C,OAAO,QAAQ,SAAS,QAAQ,QAAQ,QAAQ;AAAA,IAChD,cAAc,QAAQ,gBAAgB,YAAY,KAAK,EAAE;AAAA,EAC3D;AACF;AAKA,IAAM,QAA+C;AAAA,EACnD,IAAI,EAAE,UAAU,UAAU;AAAA,EAC1B,IAAI,EAAE,UAAU,WAAW;AAAA,EAC3B,IAAI,EAAE,UAAU,OAAO;AAAA,EACvB,IAAI,EAAE,UAAU,WAAW;AAAA,EAC3B,IAAI,EAAE,UAAU,UAAU;AAC5B;AASO,IAAM,YAAY,CAAC,OAAc,UAAmC;AACzE,QAAM,EAAE,cAAc,WAAW,aAAa,MAAM,OAAO,SAAS,IAAI;AACxE,QAAM,UAAU,kBAAkB,OAAO,WAAW;AACpD,QAAM,EAAE,SAAS,IAAI,MAAM,UAAqB,KAAK,MAAM;AAE3D,QAAM,OAAO,YAAY,OAAO,YAAY,UAAU,CAAC;AAEvD,SAAO;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,4BAA4B;AAAA,MAC1B,OAAO;AAAA,MACP,QAAQ;AAAA,MACR;AAAA,MACA,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc,YAAY,KAAK;AAAA,MAC/B,GAAI,SAAS;AAAA,QACX,iBAAiB,MAAM,MAAM,QAAQ,WAAW,OAAO,GAAG;AAAA,QAC1D,gBAAgB;AAAA,QAChB,cAAc,EAAE,QAAQ,aAAa,UAAU,KAAK,CAAC,GAAG;AAAA,MAC1D;AAAA,MACA,GAAI,YAAY;AAAA,QACd,0BAA0B;AAAA,UACxB,YAAY,2BAA2B,QAAQ,IAAI,KAAK,QAAQ,KAAK;AAAA,UACrE,aAAa;AAAA,QACf;AAAA,MACF;AAAA,MACA,WAAW,EAAE,WAAW,UAAU,SAAS,GAAG,YAAY,UAAU;AAAA,MACpE,GAAI,CAAC,SAAS,EAAE,cAAc,EAAE,aAAa,UAAU,KAAK,EAAE,EAAE;AAAA,MAChE,oBAAoB,EAAE,aAAa,QAAQ,KAAK;AAAA,MAChD,0BAA0B,EAAE,aAAa,QAAQ,MAAM,aAAa,MAAM;AAAA,IAC5E;AAAA,EACF;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/ContentToolbar/SortByDropdown.tsx"],"sourcesContent":["'use client';\n\nimport CheckIcon from '@mui/icons-material/Check';\nimport ChevronDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport Box from '@mui/material/Box/index.js';\nimport Button from '@mui/material/Button/index.js';\nimport Divider from '@mui/material/Divider/index.js';\nimport ListSubheader from '@mui/material/ListSubheader/index.js';\nimport Menu from '@mui/material/Menu/index.js';\nimport MenuItem from '@mui/material/MenuItem/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport React, { useState } from 'react';\n\nimport type {\n SortByDropdownProps,\n SortFieldDefinition,\n SortOrderOption,\n} from './ContentToolbar.types';\nimport { fieldRadiusPx } from '../../../tokens/field-radius';\nimport { fieldHeight } from '../../../tokens/field-height';\n\nfunction findActiveField<TField extends string>(\n fields: SortFieldDefinition<TField>[] | undefined,\n activeField: TField,\n): SortFieldDefinition<TField> | undefined {\n return fields?.find((field) => field.value === activeField);\n}\n\nfunction findActiveOrder(\n fieldDef: SortFieldDefinition | undefined,\n activeOrder: string | undefined,\n): SortOrderOption | undefined {\n const options = fieldDef?.orderOptions;\n if (!options?.length) return undefined;\n return options.find((option) => option.value === activeOrder) ?? options[0];\n}\n\nfunction resolveArrowDirection(option: SortOrderOption | undefined, indexInList: number): 'up' | 'down' {\n if (option?.arrowDirection) return option.arrowDirection;\n // A missing (<0) or first index sorts \"down\"; any later option sorts \"up\".\n return indexInList <= 0 ? 'down' : 'up';\n}\n\nfunction buildTriggerLabel(\n fieldDef: SortFieldDefinition | undefined,\n orderOption: SortOrderOption | undefined,\n): string {\n if (!fieldDef) return '';\n if (fieldDef.showOrderInTrigger === false || !orderOption) return fieldDef.label;\n if (fieldDef.triggerLabelStyle === 'range' && fieldDef.orderOptions?.length === 2) {\n const other = fieldDef.orderOptions.find((option) => option.value !== orderOption.value);\n if (other) return `${fieldDef.label} (${orderOption.label.toLowerCase()}-${other.label.toLowerCase()})`;\n }\n return `${fieldDef.label} (${orderOption.label.toLowerCase()})`;\n}\n\n/** The trigger's full label (md+), short label (mobile), and direction arrow. */\nfunction resolveTriggerParts(\n fieldDef: SortFieldDefinition | undefined,\n orderOption: SortOrderOption | undefined,\n orderOptions: SortOrderOption[],\n): { full: string; short: string; arrowSuffix: string } {\n const useRangeLabel = fieldDef?.triggerLabelStyle === 'range' && orderOptions.length === 2;\n const orderIndex = orderOptions.findIndex((option) => option.value === orderOption?.value);\n const arrow = resolveArrowDirection(orderOption, orderIndex);\n const arrowSuffix = orderOptions.length > 0 && !useRangeLabel ? ` ${arrow === 'down' ? '↓' : '↑'}` : '';\n const full = buildTriggerLabel(fieldDef, orderOption);\n return { full, short: fieldDef?.label ?? full, arrowSuffix };\n}\n\nconst sectionLabelSx = { px: 1, py: 0.75, fontSize: '0.75rem', fontWeight: 600, color: 'text.primary', lineHeight: 1.5 } as const;\n\n/** A fixed-width check slot (empty when unchecked) so labels align. */\nfunction SortCheck({ checked }: { checked: boolean }): React.JSX.Element {\n return (\n <Box component=\"span\" sx={{ display: 'flex', width: 16, flexShrink: 0, alignItems: 'center', justifyContent: 'center' }} aria-hidden>\n {checked ? <CheckIcon sx={{ fontSize: 14 }} /> : null}\n </Box>\n );\n}\n\n/** One `id`/`label` menu row with a leading check + testid. */\nfunction SortRow({\n value,\n label,\n checked,\n onSelect,\n}: {\n value: string;\n label: string;\n checked: boolean;\n onSelect: () => void;\n}): React.JSX.Element {\n return (\n <MenuItem data-testid={`sort-${value}-option`} onClick={onSelect} sx={{ gap: 1 }}>\n <SortCheck checked={checked} />\n <Box component=\"span\" sx={{ flex: 1, minWidth: 0, textAlign: 'left' }}>\n {label}\n </Box>\n </MenuItem>\n );\n}\n\ninterface SortMenuProps<TField extends string> {\n anchorEl: HTMLElement | null;\n open: boolean;\n close: () => void;\n orderOptions: SortOrderOption[];\n activeOrderValue: string | undefined;\n onOrderSelect: (value: string) => void;\n fields: SortFieldDefinition<TField>[];\n activeField: TField;\n onFieldSelect: (field: TField) => void;\n orderHeading: string;\n sortHeading: string;\n}\n\n/** The Order + Sort sections of the dropdown menu. */\nfunction SortMenu<TField extends string>({\n anchorEl,\n open,\n close,\n orderOptions,\n activeOrderValue,\n onOrderSelect,\n fields,\n activeField,\n onFieldSelect,\n orderHeading,\n sortHeading,\n}: SortMenuProps<TField>): React.JSX.Element {\n return (\n <Menu\n anchorEl={anchorEl}\n open={open}\n onClose={close}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\n transformOrigin={{ vertical: 'top', horizontal: 'left' }}\n slotProps={{ paper: { sx: { minWidth: 180 } } }}\n >\n {orderOptions.length > 0 && [\n <ListSubheader key=\"order-label\" sx={sectionLabelSx}>\n {orderHeading}\n </ListSubheader>,\n ...orderOptions.map((option) => (\n <SortRow\n key={`order-${option.value}`}\n value={option.value}\n label={option.label}\n checked={activeOrderValue === option.value}\n onSelect={() => onOrderSelect(option.value)}\n />\n )),\n <Divider key=\"order-divider\" />,\n ]}\n <ListSubheader sx={sectionLabelSx}>{sortHeading}</ListSubheader>\n {fields.map((field) => (\n <SortRow\n key={field.value}\n value={field.value}\n label={field.label}\n checked={activeField === field.value}\n onSelect={() => onFieldSelect(field.value)}\n />\n ))}\n </Menu>\n );\n}\n\n/**\n * Generic \"Sort By\" dropdown: a \"Sort By:\" label + a trigger whose menu has an\n * **Order** section (direction within the active field) and a **Sort** section\n * (which field). The Order section is hidden when the field defines no order\n * options. Faithful MUI port of the reference control.\n */\nexport function SortByDropdown<TField extends string = string>({\n fields,\n activeField,\n activeOrder,\n onFieldChange,\n onOrderChange,\n orderHeading,\n sortHeading,\n triggerPrefix,\n 'data-testid': testId,\n}: SortByDropdownProps<TField>): React.JSX.Element {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const open = Boolean(anchorEl);\n const close = (): void => setAnchorEl(null);\n\n const safeFields = fields ?? [];\n const activeFieldDef = findActiveField(fields, activeField);\n const orderOptions = activeFieldDef?.orderOptions ?? [];\n const activeOrderOption = findActiveOrder(activeFieldDef, activeOrder);\n const trigger = resolveTriggerParts(activeFieldDef, activeOrderOption, orderOptions);\n\n function handleFieldChange(field: TField): void {\n // Switch field in ONE callback. Previously this also fired `onOrderChange`\n // to reset the order, but a consumer whose `onOrderChange` derives the field\n // from its own (now-stale) prop would re-apply the OLD field — silently\n // reverting the field change (e.g. picking \"E-mail\" snapped back to \"Nome\").\n // The field-change consumer owns the resulting order.\n onFieldChange(field);\n close();\n }\n\n return (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, fontSize: '0.875rem' }}>\n <Typography\n component=\"span\"\n sx={{ display: { xs: 'none', md: 'inline' }, color: 'text.secondary', fontSize: '0.875rem' }}\n >\n {triggerPrefix}\n </Typography>\n <Button\n variant=\"text\"\n size=\"small\"\n color=\"inherit\"\n data-testid={testId}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n onClick={(event) => setAnchorEl(event.currentTarget)}\n sx={{ minWidth: 0, height: fieldHeight, px: 1, gap: 0.5, borderRadius: fieldRadiusPx, color: 'text.primary', textTransform: 'none', fontWeight: 600 }}\n >\n {/* Full \"Nome (crescente)\" on md+; just the field name on mobile — the\n arrow already conveys the direction, so the parenthetical is dropped. */}\n <Box component=\"span\" sx={{ display: { xs: 'none', md: 'inline' } }}>\n {trigger.full}\n </Box>\n <Box component=\"span\" sx={{ display: { xs: 'inline', md: 'none' } }}>\n {trigger.short}\n </Box>\n {trigger.arrowSuffix}\n <ChevronDownIcon sx={{ fontSize: 14 }} />\n </Button>\n <SortMenu\n orderHeading={orderHeading}\n sortHeading={sortHeading}\n anchorEl={anchorEl}\n open={open}\n close={close}\n orderOptions={orderOptions}\n activeOrderValue={activeOrderOption?.value}\n onOrderSelect={(value) => {\n onOrderChange?.(value);\n close();\n }}\n fields={safeFields}\n activeField={activeField}\n onFieldSelect={handleFieldChange}\n />\n </Box>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/Table/Table.styles.ts"],"sourcesContent":["import { alpha, keyframes } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\n\nimport type { TableDensity, TableStripeColor } from './Table.types';\n\nconst pulseAnimation = keyframes`\n 0% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 1;\n }\n 70% {\n box-shadow: 0 0 0 10px currentColor;\n opacity: 0;\n }\n 100% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 0;\n }\n`;\n\n// Density configurations\nconst getDensityConfig = (density: TableDensity = 'normal') => {\n const configs = {\n compact: {\n rowHeight: 36,\n cellPadding: '6px 12px',\n fontSize: '0.8125rem',\n headerPadding: '8px 12px' },\n normal: {\n rowHeight: 52,\n cellPadding: '12px 16px',\n fontSize: '0.875rem',\n headerPadding: '16px 16px' },\n comfortable: {\n rowHeight: 68,\n cellPadding: '18px 24px',\n fontSize: '0.875rem',\n headerPadding: '20px 24px' } };\n return configs[density];\n};\n\nconst getStripeColorFromTheme = (theme: { palette: { primary: { main: string }; secondary: { main: string }; info: { main: string }; success: { main: string }; warning: { main: string }; error: { main: string }; action: { hover: string } } }, stripeColor: TableStripeColor = 'neutral') => {\n const colorMap: Record<TableStripeColor, string> = {\n primary: theme.palette.primary.main,\n secondary: theme.palette.secondary.main,\n info: theme.palette.info.main,\n success: theme.palette.success.main,\n warning: theme.palette.warning.main,\n danger: theme.palette.error.main,\n neutral: theme.palette.action.hover };\n return colorMap[stripeColor];\n};\n\n/**\n * The zebra stripe for one body row.\n *\n * `neutral` — the default — resolves to `palette.action.hover`, which ALREADY\n * carries its subtlety in its own alpha (`rgba(0,0,0,0.04)` in the light\n * theme). MUI's `alpha()` REPLACES that channel rather than multiplying it, so\n * re-alpha-ing it at 0.5 amplified the tint 12.5× into `rgba(0,0,0,0.5)` —\n * solid #808080 on a white card, which reads as a selected or errored row\n * rather than as a stripe (FUT-755). It is used as-is instead.\n *\n * The named colours are opaque `*.main` values with no alpha of their own, so\n * they still need one.\n */\nconst stripeRowColor = (\n theme: Parameters<typeof getStripeColorFromTheme>[0],\n stripeColor: TableStripeColor = 'neutral',\n): string => {\n const color = getStripeColorFromTheme(theme, stripeColor);\n return stripeColor === 'neutral' ? color : alpha(color, 0.15);\n};\n\n// One variant applies at a time, so a lookup replaces the mutually exclusive\n// spreads.\nconst TABLE_VARIANTS: Record<string, (args: VariantArgs) => CSSObject> = {\n default: ({ theme }) => ({\n backgroundColor: theme.palette.background.paper,\n '& .MuiTableHead-root': {\n backgroundColor: alpha(theme.palette.primary.main, 0.1) } }),\n striped: ({ theme, stripeColor }) => ({\n backgroundColor: theme.palette.background.paper,\n '& .MuiTableBody-root .MuiTableRow-root:nth-of-type(even)': {\n backgroundColor: stripeRowColor(theme, stripeColor) } }),\n glass: ({ theme }) => ({\n backgroundColor: alpha(theme.palette.background.paper, 0.1),\n backdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}` }),\n minimal: ({ theme }) => ({\n backgroundColor: 'transparent',\n '& .MuiTableCell-root': {\n borderBottom: `1px solid ${alpha(theme.palette.divider, 0.1)}` } }),\n gradient: ({ theme }) => ({\n background: `linear-gradient(135deg, ${alpha(theme.palette.primary.main, 0.05)}, ${alpha(theme.palette.secondary.main, 0.05)})`,\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n '& .MuiTableHead-root': {\n background: `linear-gradient(135deg, ${alpha(theme.palette.primary.main, 0.15)}, ${alpha(theme.palette.secondary.main, 0.15)})` },\n '& .MuiTableCell-root': {\n borderBottom: `1px solid ${alpha(theme.palette.divider, 0.15)}` } }) };\n\ntype VariantArgs = {\n theme: Theme;\n densityConfig: ReturnType<typeof getDensityConfig>;\n stripeColor?: TableStripeColor;\n};\n\nconst tableVariantStyles = (args: VariantArgs, customVariant?: string): CSSObject =>\n customVariant ? (TABLE_VARIANTS[customVariant]?.(args) ?? {}) : {};\n\n// Sticky headers and row hover are independent of the variant.\nconst stickyHeaderStyles = (\n theme: Theme,\n densityConfig: ReturnType<typeof getDensityConfig>,\n): CSSObject => ({\n '& .MuiTableHead-root': {\n position: 'sticky',\n top: 0,\n zIndex: 100,\n backgroundColor: theme.palette.background.paper,\n '& .MuiTableCell-root': {\n borderBottom: `2px solid ${theme.palette.divider}`,\n fontWeight: 600,\n padding: densityConfig.headerPadding } } });\n\nconst hoverableRowStyles = (theme: Theme): CSSObject => ({\n '& .MuiTableBody-root .MuiTableRow-root:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.08),\n cursor: 'pointer',\n transition: 'background-color 0.15s ease-in-out' } });\n\n// glow and pulse combine into three distinct looks, spelled out rather than\n// layered — the glow-only shadow differs from the one used when both are on.\nconst emphasisStyles = (theme: Theme, glow?: boolean, pulse?: boolean): CSSObject => {\n if (glow && pulse) return ({\n position: 'relative',\n boxShadow: `0 0 20px 5px ${alpha(theme.palette.primary.main, 0.3)} !important`,\n filter: 'brightness(1.05)',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n borderRadius: 'inherit',\n backgroundColor: theme.palette.primary.main,\n opacity: 0.1,\n animation: `${pulseAnimation} 2s infinite`,\n pointerEvents: 'none',\n zIndex: -1 } });\n if (glow) return ({\n boxShadow: `0 0 20px 5px ${alpha(theme.palette.primary.main, 0.3)} !important`,\n filter: 'brightness(1.05)' });\n if (pulse) return ({\n position: 'relative',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n borderRadius: 'inherit',\n backgroundColor: theme.palette.primary.main,\n opacity: 0.1,\n animation: `${pulseAnimation} 2s infinite`,\n pointerEvents: 'none',\n zIndex: -1 } });\n\n return {};\n};\n\n// The table's own styling, lifted out so the styled() callback just forwards\n// its props.\nexport const tableStyles = ({\n theme,\n customVariant,\n glow,\n pulse,\n hoverable,\n density,\n stickyHeader,\n stripeColor = 'neutral' }: {\n theme: Theme;\n customVariant?: string;\n glow?: boolean;\n pulse?: boolean;\n hoverable?: boolean;\n density?: TableDensity;\n stickyHeader?: boolean;\n stripeColor?: TableStripeColor;\n}): CSSObject => {\n const densityConfig = getDensityConfig(density);\n \n return {\n borderRadius: theme.spacing(1),\n overflow: 'hidden',\n transition: 'all 0.3s ease',\n position: 'relative',\n\n // Density styles\n '& .MuiTableCell-root': {\n padding: densityConfig.cellPadding,\n fontSize: densityConfig.fontSize,\n height: densityConfig.rowHeight },\n\n // Sticky header\n ...tableVariantStyles({ theme, densityConfig, stripeColor }, customVariant),\n ...(stickyHeader ? stickyHeaderStyles(theme, densityConfig) : {}),\n ...(hoverable ? hoverableRowStyles(theme) : {}),\n ...emphasisStyles(theme, glow, pulse),\n\n\n // Variant styles\n\n\n\n\n\n\n\n\n\n\n // Hoverable rows\n\n\n // Selection styles\n '& .MuiTableRow-root.selected': {\n backgroundColor: alpha(theme.palette.primary.main, 0.12),\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.16) } },\n\n // Glow effect\n\n\n // Pulse animation\n\n\n // Both glow and pulse\n\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/TimingDiagram/TimingDiagram.views.tsx"],"sourcesContent":["import 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 { Theme } from '@mui/material/styles/index.js';\nimport type { FC, ReactElement } from 'react';\nimport React from 'react';\n\nimport type { TimingData } from './TimingDiagram.types';\nimport { onMedia, sheen, uiInk } from '../../../tokens/ink';\n\nexport type PhaseKey = 'dns' | 'connect' | 'ssl' | 'request' | 'response';\n\n// Each phase's colour, from the theme's named timing set (`uiInk`).\nexport const phaseColors = (theme: Theme): Record<PhaseKey, string> => {\n const phases = uiInk(theme).timingPhases;\n return {\n dns: phases.dns,\n connect: phases.connect,\n ssl: phases.tls,\n request: phases.request,\n response: phases.response,\n };\n};\n\nexport interface Phase {\n key: string;\n label: string;\n value?: number;\n}\n\nexport interface TimingViewProps {\n phases: Phase[];\n percentages: Record<string, number>;\n data: TimingData;\n animated: boolean;\n showLabels: boolean;\n showTooltips: boolean;\n height: number;\n}\n\nexport const formatTime = (ms: number): string => {\n if (ms < 1000) return `${ms}ms`;\n return `${(ms / 1000).toFixed(2)}s`;\n};\n\nconst colorOf = (theme: Theme, phase: Phase): string => phaseColors(theme)[phase.key as PhaseKey];\nconst widthOf = (percentages: Record<string, number>, phase: Phase): number =>\n percentages[phase.key] ?? 0;\n\n// Waterfall and stacked both offer the same hover explanation of a segment; only\n// whether tooltips are on at all varies.\nconst withTooltip = (\n phase: Phase,\n enabled: boolean,\n element: ReactElement,\n): ReactElement =>\n enabled ? (\n <Tooltip\n key={phase.key}\n title={`${phase.label}: ${formatTime(phase.value!)}`}\n placement=\"top\"\n role=\"tooltip\"\n aria-describedby={`tooltip-${phase.key}`}\n >\n {element}\n </Tooltip>\n ) : (\n element\n );\n\nconst WaterfallContainer = styled(Box)(({ theme }) => ({\n position: 'relative',\n width: '100%',\n marginTop: theme.spacing(2),\n}));\n\nconst WaterfallBar = styled(Box, {\n shouldForwardProp: (prop) =>\n !['phaseColor', 'offset', 'width', 'animated'].includes(prop as string),\n})<{\n phaseColor: string;\n offset: number;\n width: number;\n animated: boolean;\n}>(({ theme, phaseColor, offset, width, animated }) => ({\n position: 'absolute',\n height: 32,\n left: `${offset}%`,\n width: `${width}%`,\n background: `linear-gradient(90deg, ${phaseColor} 0%, ${alpha(phaseColor, 0.8)} 100%)`,\n borderRadius: theme.shape.borderRadius,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.palette.getContrastText(phaseColor),\n fontSize: '0.75rem',\n fontWeight: 500,\n boxShadow: `0 2px 8px ${alpha(phaseColor, 0.3)}`,\n transition: animated ? 'all 0.5s ease' : 'none',\n animation: animated ? 'slideIn 0.5s ease' : 'none',\n '@keyframes slideIn': {\n from: {\n transform: 'translateX(-20px)',\n opacity: 0,\n },\n to: {\n transform: 'translateX(0)',\n opacity: 1,\n },\n },\n '&:hover': {\n transform: 'translateY(-2px)',\n boxShadow: `0 4px 12px ${alpha(phaseColor, 0.5)}`,\n zIndex: 10,\n },\n}));\n\nconst TimelineAxis = styled(Box)(({ theme }) => ({\n display: 'flex',\n justifyContent: 'space-between',\n marginTop: theme.spacing(1),\n paddingTop: theme.spacing(1),\n borderTop: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n}));\n\nconst TimeLabel = styled(Typography)(({ theme }) => ({\n fontSize: '0.7rem',\n color: theme.palette.text.secondary,\n fontWeight: 500,\n}));\n\nexport const WaterfallView: FC<TimingViewProps> = ({\n phases,\n percentages,\n data,\n animated,\n showLabels,\n showTooltips,\n height,\n}) => {\n const theme = useTheme();\n // Each bar starts where the previous one ended, so the row reads as a timeline.\n let offset = 0;\n\n return (\n <WaterfallContainer style={{ height: height + 40 }} data-variant=\"waterfall\">\n {phases.map((phase, index) => {\n const width = widthOf(percentages, phase);\n const currentOffset = offset;\n offset += width;\n\n return withTooltip(\n phase,\n showTooltips,\n <WaterfallBar\n key={phase.key}\n data-testid={`timing-segment-${phase.key}`}\n phaseColor={colorOf(theme, phase)}\n offset={currentOffset}\n width={width}\n animated={animated}\n data-animated={animated.toString()}\n style={{\n top: index * 8,\n width: `${width}%`,\n left: `${currentOffset}%`,\n }}\n >\n {showLabels && width > 10 && (\n <span data-testid=\"timing-label\">{formatTime(phase.value!)}</span>\n )}\n </WaterfallBar>,\n );\n })}\n <TimelineAxis style={{ marginTop: height }}>\n <TimeLabel>0ms</TimeLabel>\n <TimeLabel>{formatTime(data.total / 2)}</TimeLabel>\n <TimeLabel>{formatTime(data.total)}</TimeLabel>\n </TimelineAxis>\n </WaterfallContainer>\n );\n};\n\nconst StackedBar = styled(Box, {\n shouldForwardProp: (prop) => prop !== 'animated',\n})<{ animated: boolean }>(({ theme, animated }) => ({\n display: 'flex',\n width: '100%',\n height: 40,\n borderRadius: theme.shape.borderRadius,\n overflow: 'hidden',\n boxShadow: theme.shadows[2],\n ...(animated && {\n '& > div': {\n animation: 'expandWidth 0.8s ease',\n },\n '@keyframes expandWidth': {\n from: { width: 0 },\n to: { width: '100%' },\n },\n }),\n}));\n\nconst StackedSegment = styled(Box, {\n shouldForwardProp: (prop) => !['phaseColor', 'width'].includes(prop as string),\n})<{ phaseColor: string; width: number }>(({ theme, phaseColor, width }) => ({\n width: `${width}%`,\n background: `linear-gradient(135deg, ${phaseColor} 0%, ${alpha(phaseColor, 0.85)} 100%)`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: onMedia(theme),\n fontSize: '0.7rem',\n fontWeight: 600,\n position: 'relative',\n transition: 'all 0.3s ease',\n '&:hover': {\n filter: 'brightness(1.1)',\n zIndex: 1,\n },\n}));\n\nexport const StackedView: FC<TimingViewProps> = ({\n phases,\n percentages,\n data,\n animated,\n showLabels,\n showTooltips,\n}) => {\n const theme = useTheme();\n return (\n <Box data-variant=\"stacked\">\n <StackedBar animated={animated} data-animated={animated.toString()}>\n {phases.map((phase) => {\n const width = widthOf(percentages, phase);\n\n return withTooltip(\n phase,\n showTooltips,\n <StackedSegment\n key={phase.key}\n data-testid={`timing-segment-${phase.key}`}\n phaseColor={colorOf(theme, phase)}\n width={width}\n style={{ width: `${width}%` }}\n >\n {showLabels && width > 10 && (\n <span data-testid=\"timing-label\">{formatTime(phase.value!)}</span>\n )}\n </StackedSegment>,\n );\n })}\n </StackedBar>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', mt: 1 }}>\n <Typography variant=\"caption\" color=\"text.secondary\">\n 0ms\n </Typography>\n <Typography variant=\"caption\" color=\"text.secondary\" fontWeight=\"bold\">\n Total: {formatTime(data.total)}\n </Typography>\n </Box>\n </Box>\n );\n};\n\nconst HorizontalBar = styled(Box)(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1),\n marginTop: theme.spacing(2),\n}));\n\nconst HorizontalSegment = styled(Box, {\n shouldForwardProp: (prop) => !['phaseColor', 'width', 'animated'].includes(prop as string),\n})<{\n phaseColor: string;\n width: number;\n animated: boolean;\n}>(({ theme, phaseColor, animated }) => ({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(2),\n '& .label': {\n minWidth: 80,\n fontSize: '0.85rem',\n fontWeight: 500,\n color: theme.palette.text.secondary,\n },\n '& .bar': {\n flex: 1,\n height: 24,\n borderRadius: theme.shape.borderRadius,\n background: `linear-gradient(90deg, ${phaseColor} 0%, ${alpha(phaseColor, 0.7)} 100%)`,\n position: 'relative',\n overflow: 'hidden',\n boxShadow: `0 2px 6px ${alpha(phaseColor, 0.25)}`,\n ...(animated && {\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n background: `linear-gradient(90deg, transparent 0%, ${sheen(theme, 0.3)} 50%, transparent 100%)`,\n animation: 'shimmer 2s infinite',\n },\n '@keyframes shimmer': {\n from: { transform: 'translateX(-100%)' },\n to: { transform: 'translateX(100%)' },\n },\n }),\n },\n '& .value': {\n minWidth: 60,\n textAlign: 'right',\n fontSize: '0.85rem',\n fontWeight: 600,\n color: phaseColor,\n },\n}));\n\nexport const HorizontalView: FC<TimingViewProps> = ({\n phases,\n percentages,\n data,\n animated,\n}) => {\n const theme = useTheme();\n\n return (\n <HorizontalBar data-variant=\"horizontal\">\n {phases.map((phase) => (\n <HorizontalSegment\n key={phase.key}\n data-testid={`timing-segment-${phase.key}`}\n phaseColor={colorOf(theme, phase)}\n width={widthOf(percentages, phase)}\n animated={animated}\n data-animated={animated.toString()}\n >\n <Typography className=\"label\">{phase.label}</Typography>\n <Box className=\"bar\" style={{ width: `${percentages[phase.key]}%` }} />\n <Typography className=\"value\" data-testid=\"timing-label\">\n {formatTime(phase.value!)}\n </Typography>\n </HorizontalSegment>\n ))}\n <Box sx={{ mt: 2, pt: 2, borderTop: `1px solid ${alpha(theme.palette.divider, 0.2)}` }}>\n <Typography variant=\"body2\" fontWeight=\"bold\" color=\"primary\">\n Total Time: {formatTime(data.total)}\n </Typography>\n </Box>\n </HorizontalBar>\n );\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/form/AddressAutocomplete/AddressOption.tsx"],"sourcesContent":["import LocationIcon from '@mui/icons-material/LocationOn';\nimport Box from '@mui/material/Box/index.js';\nimport { alpha, styled } from '@mui/material/styles/index.js';\nimport type { FC, HTMLAttributes } from 'react';\nimport React from 'react';\n\nimport type { AddressOptionValue } from './AddressAutocomplete.types';\n\n// Module-local: styled() components cannot be exported across a module boundary\n// here without tripping TS2742.\nconst SuggestionItem = styled(Box)(({ theme }) => ({\n padding: theme.spacing(1.5),\n display: 'flex',\n alignItems: 'flex-start',\n gap: theme.spacing(1.5),\n cursor: 'pointer',\n transition: theme.transitions.create(['background-color']),\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.08),\n },\n}));\n\nconst LocationIconWrapper = styled(Box)(({ theme }) => ({\n marginTop: theme.spacing(0.5),\n color: theme.palette.text.secondary,\n}));\n\nconst AddressText = styled(Box)(({ theme }) => ({\n flex: 1,\n '& .primary': {\n fontSize: '0.9rem',\n fontWeight: 500,\n color: theme.palette.text.primary,\n marginBottom: theme.spacing(0.25),\n },\n '& .secondary': {\n fontSize: '0.8rem',\n color: theme.palette.text.secondary,\n },\n}));\n\n// Predictions carry the street line and the rest already split; freeSolo text has\n// to be split on the first comma to get the same two lines.\nconst optionText = (option: AddressOptionValue) => {\n if (typeof option === 'string') {\n return {\n testId: 'address-suggestion-text',\n primary: option.split(',')[0],\n secondary: option.split(',').slice(1).join(','),\n };\n }\n\n return {\n testId: 'address-prediction-text',\n primary: option.structured_formatting?.main_text || option.description?.split(',')[0],\n secondary:\n option.structured_formatting?.secondary_text ||\n option.description?.split(',').slice(1).join(','),\n };\n};\n\nexport interface AddressOptionProps {\n optionProps: HTMLAttributes<HTMLLIElement>;\n option: AddressOptionValue;\n index: number;\n}\n\nexport const AddressOption: FC<AddressOptionProps> = ({ optionProps, option, index }) => {\n const { testId, primary, secondary } = optionText(option);\n\n return (\n <li {...optionProps} data-testid={`address-suggestion-${index}`}>\n <SuggestionItem>\n <LocationIconWrapper>\n <LocationIcon fontSize=\"small\" />\n </LocationIconWrapper>\n <AddressText data-testid={testId}>\n <div className=\"primary\">{primary}</div>\n <div className=\"secondary\">{secondary}</div>\n </AddressText>\n </SuggestionItem>\n </li>\n );\n};\n"],"mappings":";AAAA,OAAO,kBAAkB;AACzB,OAAO,SAAS;AAChB,SAAS,OAAO,cAAc;AAwEpB,cAEF,YAFE;AAhEV,IAAM,iBAAiB,OAAO,GAAG,EAAE,CAAC,EAAE,MAAM,OAAO;AAAA,EACjD,SAAS,MAAM,QAAQ,GAAG;AAAA,EAC1B,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,KAAK,MAAM,QAAQ,GAAG;AAAA,EACtB,QAAQ;AAAA,EACR,YAAY,MAAM,YAAY,OAAO,CAAC,kBAAkB,CAAC;AAAA,EACzD,WAAW;AAAA,IACT,iBAAiB,MAAM,MAAM,QAAQ,QAAQ,MAAM,IAAI;AAAA,EACzD;AACF,EAAE;AAEF,IAAM,sBAAsB,OAAO,GAAG,EAAE,CAAC,EAAE,MAAM,OAAO;AAAA,EACtD,WAAW,MAAM,QAAQ,GAAG;AAAA,EAC5B,OAAO,MAAM,QAAQ,KAAK;AAC5B,EAAE;AAEF,IAAM,cAAc,OAAO,GAAG,EAAE,CAAC,EAAE,MAAM,OAAO;AAAA,EAC9C,MAAM;AAAA,EACN,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO,MAAM,QAAQ,KAAK;AAAA,IAC1B,cAAc,MAAM,QAAQ,IAAI;AAAA,EAClC;AAAA,EACA,gBAAgB;AAAA,IACd,UAAU;AAAA,IACV,OAAO,MAAM,QAAQ,KAAK;AAAA,EAC5B;AACF,EAAE;AAIF,IAAM,aAAa,CAAC,WAA+B;AACjD,MAAI,OAAO,WAAW,UAAU;AAC9B,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,SAAS,OAAO,MAAM,GAAG,EAAE,CAAC;AAAA,MAC5B,WAAW,OAAO,MAAM,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG;AAAA,IAChD;AAAA,EACF;AAEA,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,SAAS,OAAO,uBAAuB,aAAa,OAAO,aAAa,MAAM,GAAG,EAAE,CAAC;AAAA,IACpF,WACE,OAAO,uBAAuB,kBAC9B,OAAO,aAAa,MAAM,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG;AAAA,EACpD;AACF;AAQO,IAAM,gBAAwC,CAAC,EAAE,aAAa,QAAQ,MAAM,MAAM;AACvF,QAAM,EAAE,QAAQ,SAAS,UAAU,IAAI,WAAW,MAAM;AAExD,SACE,oBAAC,QAAI,GAAG,aAAa,eAAa,sBAAsB,KAAK,IAC3D,+BAAC,kBACC;AAAA,wBAAC,uBACC,8BAAC,gBAAa,UAAS,SAAQ,GACjC;AAAA,IACA,qBAAC,eAAY,eAAa,QACxB;AAAA,0BAAC,SAAI,WAAU,WAAW,mBAAQ;AAAA,MAClC,oBAAC,SAAI,WAAU,aAAa,qBAAU;AAAA,OACxC;AAAA,KACF,GACF;AAEJ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/navigation/DropdownMenu/DropdownMenu.tsx"],"sourcesContent":["import ChevronRight from '@mui/icons-material/ChevronRight';\nimport MoreVert from '@mui/icons-material/MoreVert';\nimport Box from '@mui/material/Box/index.js';\nimport Divider from '@mui/material/Divider/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 Typography from '@mui/material/Typography/index.js';\nimport { alpha, styled } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\nimport React, { cloneElement, isValidElement,useRef, useState } from 'react';\n\nimport type { DropdownMenuItem,DropdownMenuProps } from './DropdownMenu.types';\nimport { modeInk, shadowInk, sheen } from '../../../tokens/ink';\n\n// Resolves every light/dark decision once. The inline version repeated\n// `theme.palette.mode === 'dark' ? … : …` nine times, and two of those had the\n// SAME expression on both branches (background.paper, and common.white for the\n// inset highlight) — so they read as mode-dependent while never varying.\nconst glassTokens = (theme: Theme) => {\n const isDark = theme.palette.mode === 'dark';\n\n return {\n edge: modeInk(theme),\n dropShadowAlpha: isDark ? 0.4 : 0.12,\n insetHighlightAlpha: isDark ? 0.2 : 0.8,\n sheenAlpha: isDark ? 0.1 : 0.8,\n };\n};\n\nconst glassMenuStyles = (theme: Theme): CSSObject => {\n const { edge, dropShadowAlpha, insetHighlightAlpha, sheenAlpha } = glassTokens(theme);\n\n return {\n backgroundColor: alpha(theme.palette.background.paper, 0.75),\n backdropFilter: 'blur(24px) saturate(1.8)',\n WebkitBackdropFilter: 'blur(24px) saturate(1.8)', // Safari support\n border: `1px solid ${alpha(edge, 0.12)}`,\n boxShadow: [\n `0 8px 32px ${shadowInk(theme, dropShadowAlpha)}`,\n `0 0 0 1px ${alpha(edge, 0.05)}`,\n `inset 0 1px 0 ${sheen(theme, insetHighlightAlpha)}`,\n ].join(', '),\n // Enhanced glass morphism with subtle gradient overlay\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n background: `linear-gradient(135deg, ${sheen(theme, sheenAlpha)} 0%, transparent 50%)`,\n borderRadius: 'inherit',\n pointerEvents: 'none',\n zIndex: 1,\n },\n // Ensure content appears above the overlay\n '& .MuiList-root': {\n position: 'relative',\n zIndex: 2,\n },\n };\n};\n\nconst StyledMenu = styled(Menu, {\n shouldForwardProp: (prop) => prop !== 'customVariant' && prop !== 'size',\n})<{ customVariant?: string; size?: string }>(({ theme, customVariant, size }) => ({\n '& .MuiPaper-root': {\n minWidth: 180,\n borderRadius: theme.spacing(1),\n\n ...(customVariant === 'glass' && glassMenuStyles(theme)),\n\n ...(customVariant === 'minimal' && {\n boxShadow: `0 2px 8px ${shadowInk(theme, 0.08)}`,\n border: `1px solid ${theme.palette.divider}`,\n }),\n\n ...(size === 'sm' && {\n '& .MuiMenuItem-root': {\n fontSize: '0.875rem',\n minHeight: 32,\n padding: theme.spacing(0.75, 2),\n },\n }),\n\n ...(size === 'lg' && {\n '& .MuiMenuItem-root': {\n fontSize: '1.125rem',\n minHeight: 48,\n padding: theme.spacing(1.5, 3),\n },\n }),\n },\n}));\n\nconst StyledMenuItem = styled(MenuItem, {\n shouldForwardProp: (prop) => !['color', 'showIconSpace'].includes(prop as string),\n})<{ color?: string; showIconSpace?: boolean }>(({ theme, color, showIconSpace }) => ({\n borderRadius: theme.spacing(0.5),\n margin: theme.spacing(0.5, 1),\n transition: 'all 0.2s ease',\n\n ...(showIconSpace && {\n paddingLeft: theme.spacing(5),\n }),\n\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.08),\n },\n\n ...(color &&\n color !== 'default' && {\n color:\n theme.palette[color as 'primary' | 'secondary' | 'error' | 'warning' | 'info' | 'success']\n ?.main || theme.palette.text.primary,\n '& .MuiListItemIcon-root': {\n color:\n theme.palette[color as 'primary' | 'secondary' | 'error' | 'warning' | 'info' | 'success']\n ?.main || theme.palette.text.primary,\n },\n '&:hover': {\n backgroundColor: alpha(\n theme.palette[color as 'primary' | 'secondary' | 'error' | 'warning' | 'info' | 'success']\n ?.main || theme.palette.primary.main,\n 0.08,\n ),\n },\n }),\n}));\n\nconst MenuHeader = styled(Typography)(({ theme }) => ({\n padding: theme.spacing(1, 2),\n fontSize: '0.75rem',\n fontWeight: 600,\n textTransform: 'uppercase',\n color: theme.palette.text.secondary,\n letterSpacing: 0.5,\n}));\n\nconst ShortcutText = styled(Typography)(({ theme }) => ({\n fontSize: '0.75rem',\n color: theme.palette.text.secondary,\n marginLeft: 'auto',\n paddingLeft: theme.spacing(2),\n}));\n\nconst renderMenuItem = (\n item: DropdownMenuItem,\n handleItemClick: (item: DropdownMenuItem) => void,\n showIconSpace?: boolean,\n size?: string,\n) => {\n if (item.type === 'divider') {\n return <Divider key={item.id} sx={{ my: 0.5 }} />;\n }\n\n if (item.type === 'header') {\n return <MenuHeader key={item.id}>{item.label}</MenuHeader>;\n }\n\n if (item.component) {\n return (\n <Box key={item.id} sx={{ px: 2, py: 1 }}>\n {item.component}\n </Box>\n );\n }\n\n return renderLeafMenuItem(item, handleItemClick, showIconSpace, size);\n};\n\nconst renderLeafMenuItem = (\n item: DropdownMenuItem,\n handleItemClick: (item: DropdownMenuItem) => void,\n showIconSpace?: boolean,\n size?: string,\n) => {\n const hasIcon = !!item.icon;\n const hasChildren = item.children && item.children.length > 0;\n\n return (\n <StyledMenuItem\n key={item.id}\n disabled={item.disabled}\n onClick={!item.disabled ? () => handleItemClick(item) : undefined} // ← change\n color={item.color}\n showIconSpace={showIconSpace && !hasIcon}\n data-testid={item.dataTestId}\n >\n {hasIcon && (\n <ListItemIcon sx={{ minWidth: size === 'sm' ? 32 : 40 }}>{item.icon}</ListItemIcon>\n )}\n <ListItemText primary={item.label} />\n {item.shortcut && <ShortcutText variant=\"caption\">{item.shortcut}</ShortcutText>}\n {hasChildren && item.showChevron !== false && (\n <ChevronRight fontSize=\"small\" sx={{ ml: 1, opacity: 0.5 }} />\n )}\n </StyledMenuItem>\n );\n};\n\n// Open state and anchor are each either caller-supplied or ours. Resolving both\n// here keeps those four branches out of the render body.\nconst resolveMenuState = (\n controlledOpen: boolean | undefined,\n internalOpen: boolean,\n providedAnchorEl: DropdownMenuProps['anchorEl'],\n anchorRef: React.RefObject<HTMLElement | null>,\n) => {\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n const anchorEl = providedAnchorEl || anchorRef.current;\n\n return { isControlled, open, anchorEl, isOpen: Boolean(anchorEl) && open };\n};\n\n// Open/close state is either ours or the caller's; every handler has to respect\n// that, so they are grouped here rather than repeating the isControlled check\n// inline four times in the render.\nconst useDropdownHandlers = ({\n isControlled,\n open,\n setInternalOpen,\n onOpen,\n onClose,\n closeOnItemClick,\n anchorRef,\n}: {\n isControlled: boolean;\n open: boolean;\n setInternalOpen: (value: boolean) => void;\n onOpen?: () => void;\n onClose?: () => void;\n closeOnItemClick?: boolean;\n anchorRef: React.RefObject<HTMLElement | null>;\n}) => {\n const handleOpen = () => {\n if (!isControlled) {\n setInternalOpen(true);\n }\n onOpen?.();\n };\n\n const handleClose = () => {\n if (!isControlled) {\n setInternalOpen(false);\n }\n onClose?.();\n };\n\n const handleItemClick = (item: DropdownMenuItem) => {\n item.onClick?.();\n if (closeOnItemClick && !item.children?.length) {\n handleClose();\n }\n };\n\n const handleTriggerClick = (event: React.MouseEvent<HTMLElement>) => {\n if (isControlled) return;\n\n if (open) {\n handleClose();\n return;\n }\n\n (anchorRef as React.MutableRefObject<HTMLElement>).current = event.currentTarget;\n handleOpen();\n };\n\n return { handleClose, handleItemClick, handleTriggerClick };\n};\n\n// The trigger is either a caller-supplied element we clone to attach our click\n// handler and ref, arbitrary children we wrap, or the default kebab icon.\nconst DropdownTrigger: React.FC<{\n trigger: DropdownMenuProps['trigger'];\n anchorRef: React.RefObject<HTMLElement | null>;\n onTriggerClick: (event: React.MouseEvent<HTMLElement>) => void;\n}> = ({ trigger, anchorRef, onTriggerClick }) => {\n if (isValidElement(trigger)) {\n return cloneElement(\n trigger as React.ReactElement<{\n onClick?: (event: React.MouseEvent<HTMLElement>) => void;\n ref?: React.Ref<HTMLElement>;\n }>,\n { onClick: onTriggerClick, ref: anchorRef },\n );\n }\n\n if (trigger) {\n return (\n <Box ref={anchorRef} onClick={onTriggerClick}>\n {trigger}\n </Box>\n );\n }\n\n return (\n <Box\n ref={anchorRef}\n onClick={onTriggerClick}\n sx={{ cursor: 'pointer', display: 'inline-flex' }}\n >\n <MoreVert />\n </Box>\n );\n};\n\nexport const DropdownMenu = React.forwardRef<HTMLDivElement, DropdownMenuProps>(\n (\n {\n variant = 'default',\n items,\n trigger,\n open: controlledOpen,\n onOpen,\n onClose,\n size = 'md',\n maxHeight = 400,\n minWidth = 180,\n closeOnItemClick = true,\n showIconSpace = false,\n anchorEl: providedAnchorEl,\n ...menuProps\n },\n ref,\n ) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const anchorRef = useRef<HTMLElement>(null);\n\n const { isControlled, open, anchorEl, isOpen } = resolveMenuState(\n controlledOpen,\n internalOpen,\n providedAnchorEl,\n anchorRef,\n );\n\n const { handleClose, handleItemClick, handleTriggerClick } = useDropdownHandlers({\n isControlled,\n open,\n setInternalOpen,\n onOpen,\n onClose,\n closeOnItemClick,\n anchorRef,\n });\n\n const triggerElement = (\n <DropdownTrigger trigger={trigger} anchorRef={anchorRef} onTriggerClick={handleTriggerClick} />\n );\n\n return (\n <>\n {trigger !== undefined && triggerElement}\n <StyledMenu\n ref={ref}\n anchorEl={anchorEl}\n open={isOpen}\n onClose={handleClose}\n customVariant={variant}\n size={size}\n PaperProps={{\n sx: {\n maxHeight,\n minWidth,\n overflow: 'auto',\n },\n }}\n transformOrigin={{ horizontal: 'left', vertical: 'top' }}\n anchorOrigin={{ horizontal: 'left', vertical: 'bottom' }}\n {...menuProps}\n >\n {items.map((item) => renderMenuItem(item, handleItemClick, showIconSpace, size))}\n </StyledMenu>\n </>\n );\n },\n);\n\nDropdownMenu.displayName = 'DropdownMenu';\n"],"mappings":";;;;;;;AAAA,OAAO,kBAAkB;AACzB,OAAO,cAAc;AACrB,OAAO,SAAS;AAChB,OAAO,aAAa;AACpB,OAAO,kBAAkB;AACzB,OAAO,kBAAkB;AACzB,OAAO,UAAU;AACjB,OAAO,cAAc;AACrB,OAAO,gBAAgB;AACvB,SAAS,OAAO,cAAc;AAE9B,OAAO,SAAS,cAAc,gBAAe,QAAQ,gBAAgB;AAgJ1D,SAuML,UAvMK,KA4BP,YA5BO;AAvIX,IAAM,cAAc,CAAC,UAAiB;AACpC,QAAM,SAAS,MAAM,QAAQ,SAAS;AAEtC,SAAO;AAAA,IACL,MAAM,QAAQ,KAAK;AAAA,IACnB,iBAAiB,SAAS,MAAM;AAAA,IAChC,qBAAqB,SAAS,MAAM;AAAA,IACpC,YAAY,SAAS,MAAM;AAAA,EAC7B;AACF;AAEA,IAAM,kBAAkB,CAAC,UAA4B;AACnD,QAAM,EAAE,MAAM,iBAAiB,qBAAqB,WAAW,IAAI,YAAY,KAAK;AAEpF,SAAO;AAAA,IACL,iBAAiB,MAAM,MAAM,QAAQ,WAAW,OAAO,IAAI;AAAA,IAC3D,gBAAgB;AAAA,IAChB,sBAAsB;AAAA;AAAA,IACtB,QAAQ,aAAa,MAAM,MAAM,IAAI,CAAC;AAAA,IACtC,WAAW;AAAA,MACT,cAAc,UAAU,OAAO,eAAe,CAAC;AAAA,MAC/C,aAAa,MAAM,MAAM,IAAI,CAAC;AAAA,MAC9B,iBAAiB,MAAM,OAAO,mBAAmB,CAAC;AAAA,IACpD,EAAE,KAAK,IAAI;AAAA;AAAA,IAEX,aAAa;AAAA,MACX,SAAS;AAAA,MACT,UAAU;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,YAAY,2BAA2B,MAAM,OAAO,UAAU,CAAC;AAAA,MAC/D,cAAc;AAAA,MACd,eAAe;AAAA,MACf,QAAQ;AAAA,IACV;AAAA;AAAA,IAEA,mBAAmB;AAAA,MACjB,UAAU;AAAA,MACV,QAAQ;AAAA,IACV;AAAA,EACF;AACF;AAEA,IAAM,aAAa,OAAO,MAAM;AAAA,EAC9B,mBAAmB,CAAC,SAAS,SAAS,mBAAmB,SAAS;AACpE,CAAC,EAA6C,CAAC,EAAE,OAAO,eAAe,KAAK,OAAO;AAAA,EACjF,oBAAoB;AAAA,IAClB,UAAU;AAAA,IACV,cAAc,MAAM,QAAQ,CAAC;AAAA,IAE7B,GAAI,kBAAkB,WAAW,gBAAgB,KAAK;AAAA,IAEtD,GAAI,kBAAkB,aAAa;AAAA,MACjC,WAAW,aAAa,UAAU,OAAO,IAAI,CAAC;AAAA,MAC9C,QAAQ,aAAa,MAAM,QAAQ,OAAO;AAAA,IAC5C;AAAA,IAEA,GAAI,SAAS,QAAQ;AAAA,MACnB,uBAAuB;AAAA,QACrB,UAAU;AAAA,QACV,WAAW;AAAA,QACX,SAAS,MAAM,QAAQ,MAAM,CAAC;AAAA,MAChC;AAAA,IACF;AAAA,IAEA,GAAI,SAAS,QAAQ;AAAA,MACnB,uBAAuB;AAAA,QACrB,UAAU;AAAA,QACV,WAAW;AAAA,QACX,SAAS,MAAM,QAAQ,KAAK,CAAC;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AACF,EAAE;AAEF,IAAM,iBAAiB,OAAO,UAAU;AAAA,EACtC,mBAAmB,CAAC,SAAS,CAAC,CAAC,SAAS,eAAe,EAAE,SAAS,IAAc;AAClF,CAAC,EAA+C,CAAC,EAAE,OAAO,OAAO,cAAc,OAAO;AAAA,EACpF,cAAc,MAAM,QAAQ,GAAG;AAAA,EAC/B,QAAQ,MAAM,QAAQ,KAAK,CAAC;AAAA,EAC5B,YAAY;AAAA,EAEZ,GAAI,iBAAiB;AAAA,IACnB,aAAa,MAAM,QAAQ,CAAC;AAAA,EAC9B;AAAA,EAEA,WAAW;AAAA,IACT,iBAAiB,MAAM,MAAM,QAAQ,QAAQ,MAAM,IAAI;AAAA,EACzD;AAAA,EAEA,GAAI,SACF,UAAU,aAAa;AAAA,IACrB,OACE,MAAM,QAAQ,KAA2E,GACrF,QAAQ,MAAM,QAAQ,KAAK;AAAA,IACjC,2BAA2B;AAAA,MACzB,OACE,MAAM,QAAQ,KAA2E,GACrF,QAAQ,MAAM,QAAQ,KAAK;AAAA,IACnC;AAAA,IACA,WAAW;AAAA,MACT,iBAAiB;AAAA,QACf,MAAM,QAAQ,KAA2E,GACrF,QAAQ,MAAM,QAAQ,QAAQ;AAAA,QAClC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACJ,EAAE;AAEF,IAAM,aAAa,OAAO,UAAU,EAAE,CAAC,EAAE,MAAM,OAAO;AAAA,EACpD,SAAS,MAAM,QAAQ,GAAG,CAAC;AAAA,EAC3B,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,OAAO,MAAM,QAAQ,KAAK;AAAA,EAC1B,eAAe;AACjB,EAAE;AAEF,IAAM,eAAe,OAAO,UAAU,EAAE,CAAC,EAAE,MAAM,OAAO;AAAA,EACtD,UAAU;AAAA,EACV,OAAO,MAAM,QAAQ,KAAK;AAAA,EAC1B,YAAY;AAAA,EACZ,aAAa,MAAM,QAAQ,CAAC;AAC9B,EAAE;AAEF,IAAM,iBAAiB,CACrB,MACA,iBACA,eACA,SACG;AACH,MAAI,KAAK,SAAS,WAAW;AAC3B,WAAO,oBAAC,WAAsB,IAAI,EAAE,IAAI,IAAI,KAAvB,KAAK,EAAqB;AAAA,EACjD;AAEA,MAAI,KAAK,SAAS,UAAU;AAC1B,WAAO,oBAAC,cAA0B,eAAK,SAAf,KAAK,EAAgB;AAAA,EAC/C;AAEA,MAAI,KAAK,WAAW;AAClB,WACE,oBAAC,OAAkB,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,GACnC,eAAK,aADE,KAAK,EAEf;AAAA,EAEJ;AAEA,SAAO,mBAAmB,MAAM,iBAAiB,eAAe,IAAI;AACtE;AAEA,IAAM,qBAAqB,CACzB,MACA,iBACA,eACA,SACG;AACH,QAAM,UAAU,CAAC,CAAC,KAAK;AACvB,QAAM,cAAc,KAAK,YAAY,KAAK,SAAS,SAAS;AAE5D,SACE;AAAA,IAAC;AAAA;AAAA,MAEC,UAAU,KAAK;AAAA,MACf,SAAS,CAAC,KAAK,WAAW,MAAM,gBAAgB,IAAI,IAAI;AAAA,MACxD,OAAO,KAAK;AAAA,MACZ,eAAe,iBAAiB,CAAC;AAAA,MACjC,eAAa,KAAK;AAAA,MAEjB;AAAA,mBACC,oBAAC,gBAAa,IAAI,EAAE,UAAU,SAAS,OAAO,KAAK,GAAG,GAAI,eAAK,MAAK;AAAA,QAEtE,oBAAC,gBAAa,SAAS,KAAK,OAAO;AAAA,QAClC,KAAK,YAAY,oBAAC,gBAAa,SAAQ,WAAW,eAAK,UAAS;AAAA,QAChE,eAAe,KAAK,gBAAgB,SACnC,oBAAC,gBAAa,UAAS,SAAQ,IAAI,EAAE,IAAI,GAAG,SAAS,IAAI,GAAG;AAAA;AAAA;AAAA,IAbzD,KAAK;AAAA,EAeZ;AAEJ;AAIA,IAAM,mBAAmB,CACvB,gBACA,cACA,kBACA,cACG;AACH,QAAM,eAAe,mBAAmB;AACxC,QAAM,OAAO,eAAe,iBAAiB;AAC7C,QAAM,WAAW,oBAAoB,UAAU;AAE/C,SAAO,EAAE,cAAc,MAAM,UAAU,QAAQ,QAAQ,QAAQ,KAAK,KAAK;AAC3E;AAKA,IAAM,sBAAsB,CAAC;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAQM;AACJ,QAAM,aAAa,MAAM;AACvB,QAAI,CAAC,cAAc;AACjB,sBAAgB,IAAI;AAAA,IACtB;AACA,aAAS;AAAA,EACX;AAEA,QAAM,cAAc,MAAM;AACxB,QAAI,CAAC,cAAc;AACjB,sBAAgB,KAAK;AAAA,IACvB;AACA,cAAU;AAAA,EACZ;AAEA,QAAM,kBAAkB,CAAC,SAA2B;AAClD,SAAK,UAAU;AACf,QAAI,oBAAoB,CAAC,KAAK,UAAU,QAAQ;AAC9C,kBAAY;AAAA,IACd;AAAA,EACF;AAEA,QAAM,qBAAqB,CAAC,UAAyC;AACnE,QAAI,aAAc;AAElB,QAAI,MAAM;AACR,kBAAY;AACZ;AAAA,IACF;AAEA,IAAC,UAAkD,UAAU,MAAM;AACnE,eAAW;AAAA,EACb;AAEA,SAAO,EAAE,aAAa,iBAAiB,mBAAmB;AAC5D;AAIA,IAAM,kBAID,CAAC,EAAE,SAAS,WAAW,eAAe,MAAM;AAC/C,MAAI,eAAe,OAAO,GAAG;AAC3B,WAAO;AAAA,MACL;AAAA,MAIA,EAAE,SAAS,gBAAgB,KAAK,UAAU;AAAA,IAC5C;AAAA,EACF;AAEA,MAAI,SAAS;AACX,WACE,oBAAC,OAAI,KAAK,WAAW,SAAS,gBAC3B,mBACH;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,SAAS;AAAA,MACT,IAAI,EAAE,QAAQ,WAAW,SAAS,cAAc;AAAA,MAEhD,8BAAC,YAAS;AAAA;AAAA,EACZ;AAEJ;AAEO,IAAM,eAAe,MAAM;AAAA,EAChC,CACE;AAAA,IACE,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,CAAC,cAAc,eAAe,IAAI,SAAS,KAAK;AACtD,UAAM,YAAY,OAAoB,IAAI;AAE1C,UAAM,EAAE,cAAc,MAAM,UAAU,OAAO,IAAI;AAAA,MAC/C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,UAAM,EAAE,aAAa,iBAAiB,mBAAmB,IAAI,oBAAoB;AAAA,MAC/E;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,UAAM,iBACJ,oBAAC,mBAAgB,SAAkB,WAAsB,gBAAgB,oBAAoB;AAG/F,WACE,iCACG;AAAA,kBAAY,UAAa;AAAA,MAC1B;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA,MAAM;AAAA,UACN,SAAS;AAAA,UACT,eAAe;AAAA,UACf;AAAA,UACA,YAAY;AAAA,YACV,IAAI;AAAA,cACF;AAAA,cACA;AAAA,cACA,UAAU;AAAA,YACZ;AAAA,UACF;AAAA,UACA,iBAAiB,EAAE,YAAY,QAAQ,UAAU,MAAM;AAAA,UACvD,cAAc,EAAE,YAAY,QAAQ,UAAU,SAAS;AAAA,UACtD,GAAG;AAAA,UAEH,gBAAM,IAAI,CAAC,SAAS,eAAe,MAAM,iBAAiB,eAAe,IAAI,CAAC;AAAA;AAAA,MACjF;AAAA,OACF;AAAA,EAEJ;AACF;AAEA,aAAa,cAAc;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/form/Switch/Switch.styles.ts"],"sourcesContent":["import { alpha } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\n\nimport {\n bounceAnimation,\n glowAnimation,\n pulseAnimation,\n rippleAnimation,\n shimmerAnimation,\n spinAnimation,\n} from './Switch.animations';\nimport {\n DISABLED,\n IOS_BASE_OFFSET,\n IOS_THUMB_SHADOW,\n IOS_TRAVEL_INSET,\n SWITCH_GLASS,\n SWITCH_GLOW,\n NEUTRAL_CONTRAST,\n SWITCH_FOCUS_RING,\n SWITCH_GRADIENT,\n SWITCH_HOVER,\n SWITCH_PULSE,\n SWITCH_RIPPLE,\n SWITCH_SPINNER,\n SWITCH_TRANSITION,\n RESTING_THUMB,\n THUMB_ELEVATION,\n THUMB_RADIUS,\n TRACK_LABEL,\n TRACK_RADIUS,\n geometryOf,\n iosTrackShadow,\n lookOf,\n seconds,\n showsTrackLabels,\n trackColor,\n type SwitchGeometry,\n type SwitchLook,\n} from './Switch.metrics';\nimport type { SwitchVariant } from './Switch.base';\n\nimport { absoluteInk, controlNeutral, neutralTones } from '../../../tokens/ink';\nimport { inkOver, px } from '../../../tokens/theme';\nimport type { ColorValue, SizeValue } from '../../../tokens/vocabulary';\n\n// Every number below comes from `./Switch.metrics`, which the native renderer\n// reads too — see its header. The palette and the shadows stay on the MUI\n// theme so a host that re-themes either keeps moving the web.\ninterface ColorPalette {\n main: string;\n dark?: string;\n light?: string;\n contrastText?: string;\n}\n\n/** `neutral` is not a MUI palette entry, so it is the controls' neutral tone. */\nconst neutralPalette = (theme: Theme): ColorPalette => controlNeutral(theme);\n\n/**\n * Resolves a colour name to a full palette, filling any step the theme leaves\n * out from `main` and then from the primary palette. `danger` is this\n * component's name for the error palette; the rest map straight through.\n */\nconst getColorFromTheme = (theme: Theme, color: string): ColorPalette => {\n if (color === 'neutral') {\n return neutralPalette(theme);\n }\n\n const colorMap: Record<string, ColorPalette | undefined> = {\n primary: theme.palette.primary,\n secondary: theme.palette.secondary,\n success: theme.palette.success,\n warning: theme.palette.warning,\n info: theme.palette.info,\n danger: theme.palette.error,\n };\n const palette = colorMap[color] ?? theme.palette.primary;\n const { primary } = theme.palette;\n\n return {\n main: palette.main || primary.main,\n dark: palette.dark || palette.main || primary.dark,\n light: palette.light || palette.main || primary.light,\n contrastText: palette.contrastText || NEUTRAL_CONTRAST,\n };\n};\n\nexport interface SwitchFlags {\n customVariant?: SwitchVariant;\n customColor?: ColorValue;\n customSize?: SizeValue;\n glow?: boolean;\n glass?: boolean;\n gradient?: boolean;\n trackWidth?: number;\n trackHeight?: number;\n onText?: string;\n offText?: string;\n loading?: boolean;\n ripple?: boolean;\n pulse?: boolean;\n}\n\nconst thumbShadow = (theme: Theme, look: SwitchLook): string =>\n look === 'ios' ? IOS_THUMB_SHADOW : (theme.shadows[THUMB_ELEVATION[look]] ?? 'none');\n\n/** The ripple that expands from the thumb on hover. */\nconst rippleOverlay = (palette: ColorPalette): CSSObject => ({\n content: '\"\"',\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: '100%',\n height: '100%',\n borderRadius: '50%',\n background: alpha(palette.main, SWITCH_RIPPLE.alpha),\n animation: `${rippleAnimation} ${seconds(SWITCH_RIPPLE.ms)} ease-out`,\n transform: 'translate(-50%, -50%)',\n pointerEvents: 'none',\n});\n\n/**\n * The ink on the CHECKED track — the thumb, the `on` wording and any on-icon\n * (FUT-1924).\n *\n * All three stated `#fff`, and the checked track is `palette.main`: the one\n * surface in this component the TENANT picks. A store with a pale brand got a\n * white thumb on a pale green bar, which does not read as a knob at all — the\n * switch looks OFF while it is on, so this is a state a user misreads rather\n * than a colour they dislike.\n *\n * The `gradient` flag paints the track `light → main → dark`, so the fills the\n * thumb travels over are handed over together and {@link inkOver} takes the\n * worst of them.\n *\n * The RESTING track is not here on purpose: it is `theme.palette.action.disabled`\n * washed over the page, which no tenant chooses, and a white thumb on it is the\n * conventional look in both modes.\n */\nconst checkedInk = (flags: SwitchFlags, palette: ColorPalette): string => {\n const fills = flags.gradient\n ? [palette.light || palette.main, palette.main, palette.dark || palette.main]\n : [palette.main];\n\n return inkOver(fills, palette.contrastText || NEUTRAL_CONTRAST);\n};\n\n/** The checked track: the filled bar behind the thumb once the switch is on. */\nconst checkedTrack = (flags: SwitchFlags, palette: ColorPalette): CSSObject => ({\n backgroundColor: palette.main,\n opacity: 1,\n border: 0,\n position: 'relative',\n overflow: 'hidden',\n ...(flags.glow && {\n animation: `${glowAnimation} ${seconds(SWITCH_GLOW.ms)} ease-in-out infinite`,\n boxShadow: `0 0 ${SWITCH_GLOW.blur}px ${alpha(palette.main, SWITCH_GLOW.alpha)}, inset 0 0 ${SWITCH_GLOW.insetBlur}px ${alpha(palette.main, SWITCH_GLOW.insetAlpha)}`,\n }),\n ...(flags.gradient && {\n background: `linear-gradient(${SWITCH_GRADIENT.checked.angleDeg}deg, ${palette.light || palette.main} ${SWITCH_GRADIENT.checked.stops[0]}%, ${palette.main} ${SWITCH_GRADIENT.checked.stops[1]}%, ${palette.dark || palette.main} ${SWITCH_GRADIENT.checked.stops[2]}%)`,\n backgroundSize: '200% 100%',\n animation: `${shimmerAnimation} ${seconds(SWITCH_GRADIENT.shimmerMs)} ease infinite`,\n }),\n});\n\nconst switchBaseSx = (\n theme: Theme,\n flags: SwitchFlags,\n palette: ColorPalette,\n geometry: SwitchGeometry,\n look: SwitchLook,\n): CSSObject => {\n const { width, thumbSize, padding } = geometry;\n const isIos = look === 'ios';\n\n return {\n padding,\n margin: 0,\n transitionDuration: `${SWITCH_TRANSITION.ms}ms`,\n transitionTimingFunction: SWITCH_TRANSITION.easing,\n ...(isIos && { transform: `translateX(${IOS_BASE_OFFSET}px)` }),\n '&:hover': {\n '& .MuiSwitch-thumb': {\n transform: flags.loading ? 'none' : `scale(${SWITCH_HOVER.thumbScale})`,\n boxShadow: `${theme.shadows[SWITCH_HOVER.elevation]}, 0 0 ${SWITCH_HOVER.blur}px ${alpha(palette.main, SWITCH_HOVER.alpha)}`,\n },\n ...(flags.ripple && { '&::after': rippleOverlay(palette) }),\n },\n '&.Mui-checked': {\n // The thumb travels the track minus its own width and both paddings; the\n // iOS look insets differently, so it gets its own distance.\n transform: `translateX(${width - thumbSize - padding * 2}px)`,\n color: checkedInk(flags, palette),\n '& .MuiSwitch-thumb': {\n animation: flags.loading ? 'none' : `${bounceAnimation} ${seconds(SWITCH_TRANSITION.ms)} ease-out`,\n /*\n GLASS KEEPS ITS WASH AND GAINS AN OUTLINE (FUT-2067).\n\n It used to keep the wash and nothing else, on the argument that a\n translucent thumb MEANS to show the track through itself, so painting\n it opaque would be repainting the variant rather than fixing it. The\n first half of that is still true and this still does not touch the\n fill. The second half was doing more work than the number supports:\n `SWITCH_GLASS.thumbAlpha` is **0.9**, so nine parts in ten of the knob\n are `background.paper` and one part is the track. On a pale brand that\n composites to within about 1.1:1 of the bar it is sitting on — the\n same \"reads as OFF while it is on\" state FUT-1924 exists for, in the\n one variant whose own argument points AT the tenant-controlled\n surface.\n\n So the separation moves to the EDGE, which is the thing a glass\n surface is allowed to have. The colour is {@link checkedInk} — the\n same derivation the opaque thumb gets, so there is one rule for \"what\n reads on this track\" rather than two — at full strength rather than\n the `divider` hairline at `borderAlpha` 0.2 the resting thumb wears,\n which on a pale track is not an outline at all.\n\n Checked only. The resting track is `action.disabled` washed over the\n page, which no tenant chooses, so the quiet hairline stays right\n there — the same split {@link checkedInk}'s own docblock makes.\n */\n ...(flags.glass\n ? { borderColor: checkedInk(flags, palette) }\n : { backgroundColor: checkedInk(flags, palette) }),\n },\n '& + .MuiSwitch-track': checkedTrack(flags, palette),\n '&.Mui-disabled + .MuiSwitch-track': { opacity: DISABLED.checkedTrackOpacity },\n ...(isIos && { transform: `translateX(${width - thumbSize - IOS_TRAVEL_INSET}px)` }),\n },\n '&.Mui-focusVisible .MuiSwitch-thumb': {\n color: palette.main,\n border: `${SWITCH_FOCUS_RING.width}px solid ${alpha(palette.main, SWITCH_FOCUS_RING.alpha)}`,\n },\n '&.Mui-disabled .MuiSwitch-thumb': { color: neutralTones(theme).surface },\n '&.Mui-disabled + .MuiSwitch-track': { opacity: DISABLED.trackOpacity },\n };\n};\n\nconst thumbSx = (\n theme: Theme,\n flags: SwitchFlags,\n palette: ColorPalette,\n thumbSize: number,\n look: SwitchLook,\n): CSSObject => ({\n width: thumbSize,\n height: thumbSize,\n borderRadius: THUMB_RADIUS[look](thumbSize),\n // `.Mui-checked` above replaces this for the brand-filled track; see\n // {@link RESTING_THUMB} for why the resting one stays white.\n backgroundColor: RESTING_THUMB,\n boxShadow: thumbShadow(theme, look),\n transition: `all ${seconds(SWITCH_TRANSITION.ms)} ${SWITCH_TRANSITION.easing}`,\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n ...(flags.glass && {\n backgroundColor: alpha(theme.palette.background.paper, SWITCH_GLASS.thumbAlpha),\n backdropFilter: `blur(${SWITCH_GLASS.thumbBlur}px)`,\n border: `1px solid ${alpha(theme.palette.divider, SWITCH_GLASS.borderAlpha)}`,\n }),\n ...(flags.pulse && { animation: `${pulseAnimation} ${seconds(SWITCH_PULSE.ms)} ease-in-out infinite` }),\n ...(flags.loading && {\n // A spinner drawn inside the thumb rather than over the whole control.\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n width: thumbSize * SWITCH_SPINNER.sizeRatio,\n height: thumbSize * SWITCH_SPINNER.sizeRatio,\n border: `${SWITCH_SPINNER.borderWidth}px solid ${palette.main}`,\n borderTop: `${SWITCH_SPINNER.borderWidth}px solid transparent`,\n borderRadius: '50%',\n animation: `${spinAnimation} ${seconds(SWITCH_SPINNER.ms)} linear infinite`,\n },\n }),\n ...(look === 'material' && {\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n width: '100%',\n height: '100%',\n borderRadius: 'inherit',\n backgroundColor: palette.main,\n opacity: 0,\n transform: 'scale(0)',\n transition: 'all 0.3s ease',\n },\n }),\n});\n\n/** The on/off wording the `label` variant prints inside the track. */\nconst trackLabels = (\n theme: Theme,\n flags: SwitchFlags,\n palette: ColorPalette,\n onText?: string,\n offText?: string,\n): CSSObject => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingLeft: theme.spacing(TRACK_LABEL.insetUnits),\n paddingRight: theme.spacing(TRACK_LABEL.insetUnits),\n fontSize: px(TRACK_LABEL.fontSize),\n fontWeight: TRACK_LABEL.fontWeight,\n color: theme.palette.text.secondary,\n '&::before, &::after': {\n content: '\"\"',\n position: 'absolute',\n fontSize: px(TRACK_LABEL.fontSize),\n fontWeight: TRACK_LABEL.fontWeight,\n top: '50%',\n transform: 'translateY(-50%)',\n zIndex: 1,\n },\n ...(onText && {\n '&::before': {\n content: `\"${onText}\"`,\n left: theme.spacing(TRACK_LABEL.insetUnits),\n // The `on` word sits at the end the thumb travels TO, which is the\n // filled half of the track once checked.\n color: checkedInk(flags, palette),\n },\n }),\n ...(offText && {\n '&::after': {\n content: `\"${offText}\"`,\n right: theme.spacing(TRACK_LABEL.insetUnits),\n color: theme.palette.text.secondary,\n },\n }),\n});\n\nconst trackSx = (\n theme: Theme,\n flags: SwitchFlags,\n palette: ColorPalette,\n height: number,\n look: SwitchLook,\n): CSSObject => {\n const { glass, gradient, onText, offText, customVariant } = flags;\n\n return {\n borderRadius: TRACK_RADIUS[look](height),\n backgroundColor: trackColor(\n { black: absoluteInk(theme).black, disabled: theme.palette.action.disabled },\n look,\n ),\n opacity: 1,\n transition: `all ${seconds(SWITCH_TRANSITION.ms)} ${SWITCH_TRANSITION.easing}`,\n position: 'relative',\n boxShadow: look === 'ios' ? iosTrackShadow() : 'none',\n ...(glass && {\n backgroundColor: alpha(theme.palette.background.paper, SWITCH_GLASS.trackAlpha),\n backdropFilter: `blur(${SWITCH_GLASS.trackBlur}px)`,\n border: `1px solid ${alpha(theme.palette.divider, SWITCH_GLASS.borderAlpha)}`,\n }),\n ...(gradient &&\n !glass && {\n background: `linear-gradient(${SWITCH_GRADIENT.resting.angleDeg}deg, ${alpha(palette.light || palette.main, SWITCH_GRADIENT.resting.lightAlpha)}, ${alpha(palette.main, SWITCH_GRADIENT.resting.mainAlpha)})`,\n }),\n ...(showsTrackLabels(customVariant, onText, offText) &&\n trackLabels(theme, flags, palette, onText, offText)),\n };\n};\n\n/**\n * The same checked-track ink, for the two ICONS the control overlays on the\n * track — which are drawn as components rather than styles, so they cannot\n * reach {@link checkedInk} directly.\n */\nexport const onTrackInk = (theme: Theme, flags: SwitchFlags): string =>\n checkedInk(flags, getColorFromTheme(theme, flags.customColor ?? 'primary'));\n\nexport const switchSx = (theme: Theme, flags: SwitchFlags): CSSObject => {\n const palette = getColorFromTheme(theme, flags.customColor ?? 'primary');\n const geometry = geometryOf(flags.customSize, flags.trackWidth, flags.trackHeight);\n const look = lookOf(flags.customVariant);\n\n return {\n width: geometry.width,\n height: geometry.height,\n padding: 0,\n overflow: 'visible',\n '& .MuiSwitch-switchBase': switchBaseSx(theme, flags, palette, geometry, look),\n '& .MuiSwitch-thumb': thumbSx(theme, flags, palette, geometry.thumbSize, look),\n '& .MuiSwitch-track': trackSx(theme, flags, palette, geometry.height, look),\n };\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/Badge/BadgeContent.tsx"],"sourcesContent":["import CloseIcon from '@mui/icons-material/Close';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport type { FC, ReactNode } from 'react';\nimport React from 'react';\n\nimport { BADGE_CONTENT_GAP, BADGE_SIZES } from './Badge.metrics';\nimport { getSizeStyles } from './Badge.styles';\nimport type { BadgeSize } from './Badge.types';\nimport { px } from '../../../tokens/theme';\n\n// Derived from the shared metrics: `xl` takes `lg`'s glyph, which is what the\n// hand-written map did through its `?? CLOSE_ICON_SIZES.lg` fallback.\nconst CLOSE_ICON_SIZES: Record<string, string> = Object.fromEntries(\n Object.entries(BADGE_SIZES).map(([size, metrics]) => [size, px(metrics.closeIconSize)]),\n);\n\nconst makeTestId =\n (dataTestId?: string) =>\n (suffix: string): string =>\n dataTestId ? `${dataTestId}-${suffix}` : `badge-${suffix}`;\n\nconst BadgeIcon: FC<{ icon: ReactNode; size: BadgeSize; testId: string }> = ({\n icon,\n size,\n testId,\n}) => (\n <span\n key=\"icon\"\n data-testid={testId}\n style={{\n fontSize: getSizeStyles(size).iconSize,\n display: 'inline-flex',\n alignItems: 'center',\n }}\n >\n {icon}\n </span>\n);\n\nconst BadgeCloseButton: FC<{ size: BadgeSize; testId: string; onClose: (e: React.MouseEvent) => void }> = ({\n size,\n testId,\n onClose,\n}) => (\n <IconButton\n key=\"close\"\n size=\"small\"\n onClick={onClose}\n data-testid={testId}\n sx={{\n p: 0,\n ml: 0.5,\n color: 'inherit',\n '& svg': { fontSize: CLOSE_ICON_SIZES[size] ?? CLOSE_ICON_SIZES.lg },\n '&:hover': { opacity: 0.8 },\n }}\n >\n <CloseIcon />\n </IconButton>\n);\n\n// The badge's inner run: optional icon, the content itself, optional close\n// button. A dot badge shows none of it.\nexport const buildBadgeContent = ({\n variant,\n size,\n icon,\n closable,\n dataTestId,\n baseContent,\n onClose,\n}: {\n variant: string;\n size: BadgeSize;\n icon?: ReactNode;\n closable?: boolean;\n dataTestId?: string;\n baseContent: ReactNode;\n onClose: (e: React.MouseEvent) => void;\n}): ReactNode => {\n if (variant === 'dot') return '';\n\n const testId = makeTestId(dataTestId);\n const parts: ReactNode[] = [];\n\n if (icon) parts.push(<BadgeIcon key=\"icon\" icon={icon} size={size} testId={testId('icon')} />);\n\n if (baseContent !== null && baseContent !== undefined) {\n parts.push(\n <span key=\"content\" data-testid={testId('content')}>\n {baseContent}\n </span>,\n );\n }\n\n if (closable && !variant.includes('dot')) {\n parts.push(\n <BadgeCloseButton key=\"close\" size={size} testId={testId('close')} onClose={onClose} />,\n );\n }\n\n if (parts.length === 0) return null;\n\n return (\n <span style={{ display: 'inline-flex', alignItems: 'center', gap: `${BADGE_CONTENT_GAP}px` }}>{parts}</span>\n );\n};\n"],"mappings":";;;;;;;;;;;;AAAA,OAAO,eAAe;AACtB,OAAO,gBAAgB;AAyBrB;AAdF,IAAM,mBAA2C,OAAO;AAAA,EACtD,OAAO,QAAQ,WAAW,EAAE,IAAI,CAAC,CAAC,MAAM,OAAO,MAAM,CAAC,MAAM,GAAG,QAAQ,aAAa,CAAC,CAAC;AACxF;AAEA,IAAM,aACJ,CAAC,eACD,CAAC,WACC,aAAa,GAAG,UAAU,IAAI,MAAM,KAAK,SAAS,MAAM;AAE5D,IAAM,YAAsE,CAAC;AAAA,EAC3E;AAAA,EACA;AAAA,EACA;AACF,MACE;AAAA,EAAC;AAAA;AAAA,IAEC,eAAa;AAAA,IACb,OAAO;AAAA,MACL,UAAU,cAAc,IAAI,EAAE;AAAA,MAC9B,SAAS;AAAA,MACT,YAAY;AAAA,IACd;AAAA,IAEC;AAAA;AAAA,EARG;AASN;AAGF,IAAM,mBAAoG,CAAC;AAAA,EACzG;AAAA,EACA;AAAA,EACA;AACF,MACE;AAAA,EAAC;AAAA;AAAA,IAEC,MAAK;AAAA,IACL,SAAS;AAAA,IACT,eAAa;AAAA,IACb,IAAI;AAAA,MACF,GAAG;AAAA,MACH,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,SAAS,EAAE,UAAU,iBAAiB,IAAI,KAAK,iBAAiB,GAAG;AAAA,MACnE,WAAW,EAAE,SAAS,IAAI;AAAA,IAC5B;AAAA,IAEA,8BAAC,aAAU;AAAA;AAAA,EAZP;AAaN;AAKK,IAAM,oBAAoB,CAAC;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAQiB;AACf,MAAI,YAAY,MAAO,QAAO;AAE9B,QAAM,SAAS,WAAW,UAAU;AACpC,QAAM,QAAqB,CAAC;AAE5B,MAAI,KAAM,OAAM,KAAK,oBAAC,aAAqB,MAAY,MAAY,QAAQ,OAAO,MAAM,KAApD,MAAuD,CAAE;AAE7F,MAAI,gBAAgB,QAAQ,gBAAgB,QAAW;AACrD,UAAM;AAAA,MACJ,oBAAC,UAAmB,eAAa,OAAO,SAAS,GAC9C,yBADO,SAEV;AAAA,IACF;AAAA,EACF;AAEA,MAAI,YAAY,CAAC,QAAQ,SAAS,KAAK,GAAG;AACxC,UAAM;AAAA,MACJ,oBAAC,oBAA6B,MAAY,QAAQ,OAAO,OAAO,GAAG,WAA7C,OAA+D;AAAA,IACvF;AAAA,EACF;AAEA,MAAI,MAAM,WAAW,EAAG,QAAO;AAE/B,SACE,oBAAC,UAAK,OAAO,EAAE,SAAS,eAAe,YAAY,UAAU,KAAK,GAAG,iBAAiB,KAAK,GAAI,iBAAM;AAEzG;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/form/total-form/SubmitButton.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport { fieldHeight } from '../../../tokens/field-height';\nimport { Button } from '../Button';\nimport { useFormContext } from './FormContext';\n\n/** Props for {@link SubmitButton}. */\nexport interface SubmitButtonProps {\n /** Button label. */\n children: React.ReactNode;\n /** Test id; defaults to `total-form-submit`. Override when a page renders more than one form. */\n dataTestId?: string;\n}\n\n/**\n * Submit control wired to {@link useFormContext}. Wraps the existing `@12-apps/ui`\n * `Button` as a `type=\"submit\"` button (testid `total-form-submit`) and\n * reflects the form's `submitting` state via `loading`/`disabled`.\n *\n * It matches the form field height and never wraps its label, so it aligns with\n * an adjacent input on the same row (and stays full-width when the row stacks).\n */\nexport function SubmitButton({\n children,\n dataTestId = 'total-form-submit',\n}: SubmitButtonProps): React.ReactElement {\n const { submitting } = useFormContext();\n\n return (\n <Button\n type=\"submit\"\n dataTestId={dataTestId}\n loading={submitting}\n disabled={submitting}\n // `Button` replaces (not merges) its size styles with this `sx`, so restate\n // the md padding/font here alongside the theme's field height — the height\n // every input on the form stands at — and no-wrap alignment.\n sx={{ height: fieldHeight, px: 2, fontSize: '1rem', flexShrink: 0, whiteSpace: 'nowrap' }}\n >\n {children}\n </Button>\n );\n}\n"],"mappings":";;;;;;;;;;;AA+BI;AAPG,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA,aAAa;AACf,GAA0C;AACxC,QAAM,EAAE,WAAW,IAAI,eAAe;AAEtC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL;AAAA,MACA,SAAS;AAAA,MACT,UAAU;AAAA,MAIV,IAAI,EAAE,QAAQ,aAAa,IAAI,GAAG,UAAU,QAAQ,YAAY,GAAG,YAAY,SAAS;AAAA,MAEvF;AAAA;AAAA,EACH;AAEJ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/SettingsLayout/SettingsStatusMarker.tsx"],"sourcesContent":["'use client';\n\nimport LockOutlinedIcon from '@mui/icons-material/LockOutlined';\nimport Box from '@mui/material/Box/index.js';\nimport React from 'react';\n\nimport { SR_ONLY_SX, STATUS_COLOR } from './SettingsLayout.styles';\nimport type { SettingsNavStatus } from './SettingsLayout.types';\n\nexport interface SettingsStatusMarkerProps {\n /** Which situation to draw. */\n status: SettingsNavStatus;\n /** What it means, in the host's language — the only carrier a screen reader gets. */\n label?: string;\n /** `data-testid` for the marker element. */\n testId?: string;\n}\n\n/**\n * The situation marker beside a settings entry: a coloured dot, or a padlock\n * when the plan does not include the section.\n *\n * The label is rendered as visually-hidden text INSIDE the marker rather than as\n * an `aria-label` on it, so it lands in the accessible name of the row that\n * contains it. A row reading \"Endereço, ligado\" is one utterance; a decorative\n * dot with a title attribute beside it is two, and the second one is skipped.\n *\n * Colour alone never says which of the three states this is — that is the whole\n * reason `label` exists, and why a marker without one is a marker with no\n * meaning attached.\n */\nexport function SettingsStatusMarker({\n status,\n label,\n testId,\n}: SettingsStatusMarkerProps): React.JSX.Element {\n const hidden = label ? <Box component=\"span\" sx={SR_ONLY_SX}>{label}</Box> : null;\n\n if (status === 'locked') {\n return (\n <Box\n component=\"span\"\n data-testid={testId}\n data-status={status}\n sx={{ display: 'inline-flex', alignItems: 'center', color: 'text.disabled' }}\n >\n <LockOutlinedIcon sx={{ fontSize: 16 }} />\n {hidden}\n </Box>\n );\n }\n\n return (\n <Box\n component=\"span\"\n data-testid={testId}\n data-status={status}\n sx={{ display: 'inline-flex', alignItems: 'center' }}\n >\n <Box\n component=\"span\"\n sx={{\n width: 8,\n height: 8,\n borderRadius: '50%',\n flex: '0 0 auto',\n bgcolor: STATUS_COLOR[status],\n }}\n />\n {hidden}\n </Box>\n );\n}\n\nSettingsStatusMarker.displayName = 'SettingsStatusMarker';\n"],"mappings":";;;;;;AAEA,OAAO,sBAAsB;AAC7B,OAAO,SAAS;AAiCS,cAInB,YAJmB;AALlB,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AACF,GAAiD;AAC/C,QAAM,SAAS,QAAQ,oBAAC,OAAI,WAAU,QAAO,IAAI,YAAa,iBAAM,IAAS;AAE7E,MAAI,WAAW,UAAU;AACvB,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,eAAa;AAAA,QACb,eAAa;AAAA,QACb,IAAI,EAAE,SAAS,eAAe,YAAY,UAAU,OAAO,gBAAgB;AAAA,QAE3E;AAAA,8BAAC,oBAAiB,IAAI,EAAE,UAAU,GAAG,GAAG;AAAA,UACvC;AAAA;AAAA;AAAA,IACH;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,eAAa;AAAA,MACb,eAAa;AAAA,MACb,IAAI,EAAE,SAAS,eAAe,YAAY,SAAS;AAAA,MAEnD;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,IAAI;AAAA,cACF,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,cAAc;AAAA,cACd,MAAM;AAAA,cACN,SAAS,aAAa,MAAM;AAAA,YAC9B;AAAA;AAAA,QACF;AAAA,QACC;AAAA;AAAA;AAAA,EACH;AAEJ;AAEA,qBAAqB,cAAc;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/form/RadioGroup/RadioGroup.styles.ts"],"sourcesContent":["import { alpha } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\n\nimport { glowAnimation, rippleAnimation, scaleAnimation, slideAnimation } from './RadioGroup.animations';\n\nimport { fieldEdge } from '../../../tokens/field-edge';\nimport { fieldRadius } from '../../../tokens/field-radius';\nimport { asFieldSize, FIELD_BORDER_WIDTH, fieldHeight } from '../../../tokens/field-height';\nimport { absoluteInk, controlNeutral } from '../../../tokens/ink';\n\n/** The segment track's padding and border: its corner is the segments' plus these. */\nconst SEGMENT_TRACK_PADDING = 4;\nconst SEGMENT_TRACK_BORDER = 1;\n\ninterface ColorPalette {\n main: string;\n dark?: string;\n light?: string;\n contrastText?: string;\n}\n\n/** `neutral` is not a MUI palette entry, so it is the controls' neutral tone. */\nconst neutralPalette = (theme: Theme): ColorPalette => controlNeutral(theme);\n\n/** `danger` is this component's name for the error palette; the rest map straight through. */\nconst namedPalette = (theme: Theme, color: string): ColorPalette => {\n const colorMap: Record<string, ColorPalette> = {\n primary: theme.palette.primary,\n secondary: theme.palette.secondary,\n success: theme.palette.success,\n warning: theme.palette.warning,\n info: theme.palette.info,\n danger: theme.palette.error,\n };\n\n return colorMap[color] || theme.palette.primary;\n};\n\n/**\n * Resolves a colour name to a full palette, filling any step the theme leaves\n * out from `main` and then from the primary palette. Split into three so the\n * fallback chains do not all count against one function.\n */\nconst getColorFromTheme = (theme: Theme, color: string): ColorPalette => {\n if (color === 'neutral') {\n return neutralPalette(theme);\n }\n\n const palette = namedPalette(theme, color);\n const { primary } = theme.palette;\n\n // namedPalette always yields a palette, so these need no optional chaining;\n // each step still falls back to `main` and then to primary when the theme\n // leaves it out.\n return {\n main: palette.main || primary.main,\n dark: palette.dark || palette.main || primary.dark,\n light: palette.light || palette.main || primary.light,\n contrastText: palette.contrastText || absoluteInk(theme).white,\n };\n};\n\ntype SizeKey = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nconst pickSize = <T,>(map: Record<SizeKey, T>, size: string): T => map[size as SizeKey] ?? map.md;\n\nconst CARD_SIZES: Record<SizeKey, CSSObject> = {\n xs: { padding: '8px', minHeight: '60px' },\n sm: { padding: '12px', minHeight: '70px' },\n md: { padding: '16px', minHeight: '80px' },\n lg: { padding: '20px', minHeight: '90px' },\n xl: { padding: '24px', minHeight: '100px' },\n};\n\nconst BUTTON_SIZES: Record<SizeKey, CSSObject> = {\n xs: { padding: '6px 12px', fontSize: '0.75rem', minHeight: '32px' },\n sm: { padding: '8px 16px', fontSize: '0.875rem', minHeight: '36px' },\n md: { padding: '10px 20px', fontSize: '1rem', minHeight: '40px' },\n lg: { padding: '12px 24px', fontSize: '1.125rem', minHeight: '44px' },\n xl: { padding: '14px 28px', fontSize: '1.25rem', minHeight: '48px' },\n};\n\nconst SEGMENT_SIZES: Record<SizeKey, CSSObject> = {\n xs: { padding: '4px 8px', fontSize: '0.75rem' },\n sm: { padding: '6px 12px', fontSize: '0.875rem' },\n md: { padding: '8px 16px', fontSize: '1rem' },\n lg: { padding: '10px 20px', fontSize: '1.125rem' },\n xl: { padding: '12px 24px', fontSize: '1.25rem' },\n};\n\nexport interface SurfaceFlags {\n selected?: boolean;\n customColor?: string;\n glass?: boolean;\n gradient?: boolean;\n glow?: boolean;\n customSize?: string;\n animated?: boolean;\n}\n\nexport const formLabelSx = (theme: Theme, glass?: boolean, error?: boolean): CSSObject => ({\n marginBottom: theme.spacing(2),\n fontWeight: 600,\n color: error ? theme.palette.error.main : theme.palette.text.primary,\n ...(glass && {\n backgroundColor: alpha(theme.palette.background.paper, 0.1),\n backdropFilter: 'blur(10px)',\n padding: '8px 12px',\n borderRadius: '8px',\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n display: 'inline-block',\n }),\n});\n\n/** The card's resting surface, before glass/gradient/glow override parts of it. */\nconst cardBase = (theme: Theme, flags: SurfaceFlags, palette: ColorPalette): CSSObject => {\n const { selected, animated, customSize = 'md' } = flags;\n\n return {\n cursor: 'pointer',\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n border: `2px solid ${selected ? palette.main : fieldEdge(theme)}`,\n backgroundColor: selected ? alpha(palette.main, 0.05) : theme.palette.background.paper,\n position: 'relative' as const,\n overflow: 'hidden' as const,\n ...(animated && { animation: `${slideAnimation} 0.4s ease-out` }),\n // A radial wash that grows from the centre as the card is selected or hovered.\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: selected ? '100%' : '0',\n height: selected ? '100%' : '0',\n background: `radial-gradient(circle, ${alpha(palette.main, 0.1)} 0%, transparent 70%)`,\n transform: 'translate(-50%, -50%)',\n transition: 'all 0.5s ease',\n borderRadius: '50%',\n },\n '&:hover': {\n borderColor: palette.main,\n backgroundColor: alpha(palette.main, 0.02),\n transform: 'translateY(-2px) scale(1.02)',\n boxShadow: `${theme.shadows[4]}, 0 10px 30px -5px ${alpha(palette.main, 0.2)}`,\n '&::before': { width: '120%', height: '120%' },\n },\n '&:active': { transform: 'scale(0.98)' },\n ...pickSize(CARD_SIZES, customSize),\n };\n};\n\nexport const radioCardSx = (theme: Theme, flags: SurfaceFlags): CSSObject => {\n const { selected, customColor = 'primary', glass, gradient, glow } = flags;\n const palette = getColorFromTheme(theme, customColor);\n\n return {\n ...cardBase(theme, flags, palette),\n ...(glass && {\n backgroundColor: selected\n ? alpha(palette.main, 0.1)\n : alpha(theme.palette.background.paper, 0.1),\n backdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n }),\n ...(gradient &&\n selected && {\n background: `linear-gradient(135deg, ${alpha(palette.main, 0.1)}, ${alpha(palette.light || palette.main, 0.05)})`,\n borderColor: palette.main,\n }),\n ...(glow &&\n selected && {\n animation: `${glowAnimation} 2s ease-in-out infinite`,\n boxShadow: `0 0 15px ${alpha(palette.main, 0.4)}`,\n }),\n };\n};\n\n/** The pill button's resting surface, before glass/gradient override parts of it. */\nconst buttonBase = (theme: Theme, flags: SurfaceFlags, palette: ColorPalette): CSSObject => {\n const { selected, animated, customSize = 'md' } = flags;\n\n return {\n borderRadius: fieldRadius(theme),\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n fontWeight: 500,\n border: `${FIELD_BORDER_WIDTH}px solid ${selected ? palette.main : fieldEdge(theme)}`,\n backgroundColor: selected ? palette.main : 'transparent',\n color: selected ? palette.contrastText || absoluteInk(theme).white : theme.palette.text.primary,\n position: 'relative' as const,\n overflow: 'hidden' as const,\n ...(animated && selected && { animation: `${scaleAnimation} 0.3s ease-out` }),\n // Sized to zero until pressed, when the ripple keyframes expand it.\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: 0,\n height: 0,\n borderRadius: '50%',\n backgroundColor: alpha(palette.contrastText || absoluteInk(theme).white, 0.3),\n transform: 'translate(-50%, -50%)',\n pointerEvents: 'none' as const,\n },\n '&:active::after': {\n animation: `${rippleAnimation} 0.6s ease-out`,\n width: '100%',\n height: '100%',\n },\n '&:hover': {\n borderColor: palette.main,\n backgroundColor: selected ? palette.dark : alpha(palette.main, 0.1),\n transform: 'translateY(-1px) scale(1.02)',\n boxShadow: `0 4px 12px ${alpha(palette.main, 0.2)}`,\n },\n '&:active': { transform: 'scale(0.98)' },\n ...pickSize(BUTTON_SIZES, customSize),\n // The theme's field height for the size, in place of the table's own.\n minHeight: fieldHeight(theme, asFieldSize(customSize)),\n paddingTop: 0,\n paddingBottom: 0,\n };\n};\n\nexport const buttonRadioSx = (theme: Theme, flags: SurfaceFlags): CSSObject => {\n const { selected, customColor = 'primary', glass, gradient } = flags;\n const palette = getColorFromTheme(theme, customColor);\n\n return {\n ...buttonBase(theme, flags, palette),\n ...(glass && {\n backgroundColor: selected\n ? alpha(palette.main, 0.8)\n : alpha(theme.palette.background.paper, 0.1),\n backdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n }),\n ...(gradient &&\n selected && {\n background: `linear-gradient(135deg, ${palette.main}, ${palette.dark})`,\n border: 'none',\n }),\n };\n};\n\nexport const segmentContainerSx = (\n theme: Theme,\n glass?: boolean,\n customColor = 'primary',\n): CSSObject => {\n const palette = getColorFromTheme(theme, customColor);\n\n return {\n padding: `${SEGMENT_TRACK_PADDING}px`,\n // Concentric with the segments inside it, which take the field radius.\n borderRadius: fieldRadius(theme) + SEGMENT_TRACK_PADDING + SEGMENT_TRACK_BORDER,\n backgroundColor: glass\n ? alpha(theme.palette.background.paper, 0.1)\n : alpha(palette.main, 0.05),\n backdropFilter: glass ? 'blur(20px)' : 'none',\n border: `${SEGMENT_TRACK_BORDER}px solid ${alpha(theme.palette.divider, 0.2)}`,\n display: 'flex',\n gap: '2px',\n };\n};\n\n/**\n * An underline that grows from the centre outwards, and is already full width\n * when the segment is the selected one.\n */\nconst segmentUnderline = (color: string, selected: boolean): CSSObject => ({\n content: '\"\"',\n position: 'absolute',\n bottom: 0,\n left: selected ? 0 : '50%',\n width: selected ? '100%' : 0,\n height: '2px',\n backgroundColor: color,\n transition: 'all 0.3s ease',\n transform: selected ? 'translateX(0)' : 'translateX(-50%)',\n});\n\nexport const segmentButtonSx = (theme: Theme, flags: SurfaceFlags): CSSObject => {\n const { selected, customColor = 'primary', customSize = 'md', animated } = flags;\n const palette = getColorFromTheme(theme, customColor);\n\n return {\n flex: 1,\n borderRadius: fieldRadius(theme),\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n fontWeight: 500,\n backgroundColor: selected ? theme.palette.background.paper : 'transparent',\n color: selected ? palette.main : theme.palette.text.secondary,\n boxShadow: selected\n ? `${theme.shadows[2]}, inset 0 1px 3px ${alpha(palette.main, 0.1)}`\n : 'none',\n position: 'relative' as const,\n overflow: 'hidden' as const,\n ...(animated && selected && { animation: `${scaleAnimation} 0.3s ease-out` }),\n '&::before': segmentUnderline(palette.main, Boolean(selected)),\n '&:hover': {\n backgroundColor: selected\n ? theme.palette.background.paper\n : alpha(theme.palette.action.hover, 0.08),\n color: palette.main,\n '&::before': { width: '100%', left: 0, transform: 'translateX(0)' },\n },\n '&:active': { transform: 'scale(0.98)' },\n ...pickSize(SEGMENT_SIZES, customSize),\n // Each segment is a field; the track around it adds its own inset.\n minHeight: fieldHeight(theme, asFieldSize(customSize)),\n paddingTop: 0,\n paddingBottom: 0,\n };\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/DataViews/data-views-display-tabs.tsx"],"sourcesContent":["\"use client\";\n\nimport type { DataViewsCopy } from \"./data-views-copy\";\nimport ArrowDownwardRoundedIcon from \"@mui/icons-material/ArrowDownwardRounded\";\nimport ArrowUpwardRoundedIcon from \"@mui/icons-material/ArrowUpwardRounded\";\nimport useMediaQuery from \"@mui/material/useMediaQuery/index.js\";\nimport type { Theme } from \"@mui/material/styles/index.js\";\n\nimport { useDataViewsCopy } from \"./data-views-copy-context\";\nimport type { SortFieldDefinition } from \"../../layout/ContentToolbar\";\nimport { Box } from \"../../../mui/Box\";\nimport { Text } from \"../../typography/Text\";\n\nimport {\n BoardGlyph,\n ColumnsGlyph,\n GridGlyph,\n ListGlyph,\n RowsGlyph,\n TableGlyph,\n} from \"./data-views-glyphs\";\nimport {\n useDataViewsLayout,\n type DataViewsDensity,\n type DataViewsLayout,\n} from \"./data-views-layout-context\";\n\n/**\n * Two of the three tabs inside the \"Exibir\" panel — Ordenar and Exibição. The\n * Colunas tab is its own file (`data-views-columns-tab.tsx`) for the size budget.\n *\n * They live together because they answer one question (\"how do I want to read\n * this list?\") and were previously three separate toolbar dropdowns that the\n * operator had to know apart. Split into this file so the panel that frames\n * them, and each tab, stays inside the size budget.\n */\n\n/* ── Shared tile ─────────────────────────────────────────────────────────── */\n\n/** A picker tile: a glyph over its label, highlighted when it is the choice. */\nfunction Tile({\n active,\n label,\n onClick,\n testId,\n children,\n}: {\n active: boolean;\n label: string;\n onClick: () => void;\n testId: string;\n children: React.ReactNode;\n}): React.JSX.Element {\n return (\n <Box\n component=\"button\"\n type=\"button\"\n onClick={onClick}\n aria-pressed={active}\n data-testid={testId}\n sx={{\n flex: 1,\n minWidth: 0,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n gap: 0.75,\n p: 1.25,\n border: 1,\n borderStyle: \"solid\",\n borderColor: active ? \"primary.main\" : \"divider\",\n bgcolor: active ? \"action.selected\" : \"transparent\",\n borderRadius: 1,\n cursor: \"pointer\",\n font: \"inherit\",\n fontSize: \"0.75rem\",\n fontWeight: active ? 600 : 400,\n color: active ? \"primary.main\" : \"text.secondary\",\n \"&:hover\": { bgcolor: \"action.hover\" },\n }}\n >\n {children}\n {label}\n </Box>\n );\n}\n\n/* ── Ordenar ─────────────────────────────────────────────────────────────── */\n\n/**\n * Direction labels read in the COLUMN'S OWN TERMS. \"Crescente\" on a currency\n * column is a puzzle the operator has to solve every time; \"Menor → maior\" is\n * not, and \"Mais recente\" is what someone actually means about a date.\n */\nconst DIRECTION_LABELS: Record<string, [string, string]> = {\n number: [\"Menor → maior\", \"Maior → menor\"],\n currency: [\"Menor → maior\", \"Maior → menor\"],\n date: [\"Mais antigo\", \"Mais recente\"],\n text: [\"A → Z\", \"Z → A\"],\n};\n\n/** The direction wording for a sort field, falling back to alphabetical. */\nfunction directionLabels(kind: string | undefined): [string, string] {\n return DIRECTION_LABELS[kind ?? \"text\"] ?? DIRECTION_LABELS.text!;\n}\n\ninterface SortTabProps {\n fields: SortFieldDefinition[];\n activeField: string;\n activeOrder: \"asc\" | \"desc\";\n onChange: (field: string, order: \"asc\" | \"desc\") => void;\n /** Per-field value kind, so the direction can be phrased in its own terms. */\n sortKinds?: Record<string, string>;\n testIdPrefix: string;\n}\n\n/** Direction first (two tiles), then the field list — the order they are decided in. */\nexport function SortTab({\n fields,\n activeField,\n activeOrder,\n onChange,\n sortKinds,\n testIdPrefix,\n}: SortTabProps): React.JSX.Element {\n const copy = useDataViewsCopy();\n const [ascLabel, descLabel] = directionLabels(sortKinds?.[activeField]);\n return (\n <Box sx={{ p: 1 }}>\n <Text variant=\"caption\" as=\"p\">\n <Box component=\"span\" sx={{ px: 0.5, color: \"text.secondary\" }}>\n {copy.display.direction}\n </Box>\n </Text>\n <Box sx={{ display: \"flex\", gap: 0.75, mb: 1.5, mt: 0.5 }}>\n {([\"asc\", \"desc\"] as const).map((direction, index) => (\n <Tile\n key={direction}\n active={activeOrder === direction}\n label={index === 0 ? ascLabel : descLabel}\n onClick={() => onChange(activeField || fields[0]?.value || \"\", direction)}\n testId={`${testIdPrefix}-sort-dir-${direction}`}\n >\n {direction === \"asc\" ? (\n <ArrowUpwardRoundedIcon fontSize=\"small\" />\n ) : (\n <ArrowDownwardRoundedIcon fontSize=\"small\" />\n )}\n </Tile>\n ))}\n </Box>\n <Text variant=\"caption\" as=\"p\">\n <Box component=\"span\" sx={{ px: 0.5, color: \"text.secondary\" }}>\n {copy.display.fieldHeading}\n </Box>\n </Text>\n {fields.map((field) => (\n <SortFieldRow\n key={field.value}\n label={field.label}\n active={field.value === activeField}\n onClick={() => onChange(field.value, activeOrder)}\n testId={`${testIdPrefix}-sort-field-${field.value}`}\n />\n ))}\n </Box>\n );\n}\n\n/** One sort field: a dot and its label, highlighted when it is the active sort. */\nfunction SortFieldRow({\n label,\n active,\n onClick,\n testId,\n}: {\n label: string;\n active: boolean;\n onClick: () => void;\n testId: string;\n}): React.JSX.Element {\n return (\n <Box\n component=\"button\"\n type=\"button\"\n onClick={onClick}\n data-testid={testId}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1,\n width: \"100%\",\n px: 1,\n py: 0.75,\n border: 0,\n background: \"none\",\n borderRadius: 1,\n cursor: \"pointer\",\n font: \"inherit\",\n fontSize: \"0.8125rem\",\n textAlign: \"left\",\n fontWeight: active ? 600 : 400,\n color: active ? \"primary.main\" : \"text.primary\",\n \"&:hover\": { bgcolor: \"action.hover\" },\n }}\n >\n <Box\n component=\"span\"\n sx={{ height: 6, width: 6, borderRadius: \"50%\", bgcolor: active ? \"primary.main\" : \"action.disabled\" }}\n />\n <Box component=\"span\" sx={{ flex: 1, minWidth: 0 }}>\n {label}\n </Box>\n </Box>\n );\n}\n\n/* ── Exibição ────────────────────────────────────────────────────────────── */\n\n\n/**\n * What density MEANS in each layout — same three values, three different\n * questions. A table's is how tall its rows are, a card grid's is how many fit\n * on a line, and a board's is how wide its columns are. The heading and the\n * tile labels change with the layout because \"Alta\" over a board is meaningless\n * where \"Larga\" is not.\n */\n\n\n/** The density tiles, phrased for whichever layout is on screen. */\nfunction densityTiles(\n layout: DataViewsLayout,\n copy: DataViewsCopy,\n): { value: DataViewsDensity; label: string; gap: number; columns: number }[] {\n // A layout the pack does not key falls back to the table's words rather\n // than rendering three blank tiles — a host adding a layout should still see\n // a usable control while it writes the labels for it.\n const labels = copy.display.densityLabels[layout] ?? copy.display.densityLabels.table;\n return [\n { value: \"compact\", label: labels?.compact ?? \"compact\", gap: 2, columns: 4 },\n { value: \"cozy\", label: labels?.cozy ?? \"cozy\", gap: 5, columns: 3 },\n { value: \"comfortable\", label: labels?.comfortable ?? \"comfortable\", gap: 8, columns: 2 },\n ];\n}\n\n/** The preview for one density tile, in the terms that layout's density is in. */\nfunction densityGlyph(\n layout: DataViewsLayout,\n tile: { gap: number; columns: number },\n active: boolean,\n): React.JSX.Element {\n if (layout === \"cards\") return <GridGlyph n={tile.columns} active={active} />;\n // A wider column means FEWER of them across the same board, so the\n // comfortable end draws two fat columns and the compact end four thin ones.\n if (layout === \"board\") return <ColumnsGlyph n={tile.columns} active={active} />;\n return <RowsGlyph gap={tile.gap} active={active} />;\n}\n\n/** The glyph for a layout tile. */\nfunction layoutGlyph(layout: DataViewsLayout, active: boolean): React.JSX.Element {\n if (layout === \"table\") return <TableGlyph active={active} />;\n if (layout === \"list\") return <ListGlyph active={active} />;\n if (layout === \"cards\") return <GridGlyph active={active} />;\n return <BoardGlyph active={active} />;\n}\n\nconst LAYOUT_TILE_LABELS: Record<DataViewsLayout, string> = {\n table: \"Tabela\",\n list: \"Lista\",\n cards: \"Grade\",\n board: \"Quadro\",\n};\n\n/**\n * Format and density, both shown as PREVIEWS rather than words — see\n * `data-views-glyphs.tsx` for why. A layout this table cannot render is simply\n * not offered, and the panel says why rather than leaving a gap.\n */\n/**\n * The three density tiles — or, on a phone, a line saying why there are none:\n * the card grid is `1fr` there, so all three would draw one card per row. Says\n * so rather than vanishing, for the same reason as the board note below it.\n */\nfunction DensityTiles({ testIdPrefix }: { testIdPrefix: string }): React.JSX.Element {\n const copy = useDataViewsCopy();\n const { layout, density, setDensity } = useDataViewsLayout();\n // Matches the card grid's own `xs: \"1fr\"` track, so the control and the thing\n // it controls agree on where density stops meaning anything.\n const isOneColumn = useMediaQuery((t: Theme) => t.breakpoints.down(\"sm\"));\n if (layout === \"cards\" && isOneColumn) {\n return (\n <Text variant=\"caption\" as=\"p\">\n <Box component=\"span\" sx={{ px: 0.5, pt: 0.5, display: \"block\", color: \"text.disabled\" }}>\n {copy.display.densityUnavailableNarrow}\n </Box>\n </Text>\n );\n }\n return (\n <Box sx={{ display: \"grid\", gridTemplateColumns: \"repeat(3, 1fr)\", gap: 0.75, mt: 0.5 }}>\n {densityTiles(layout, copy).map((tile) => (\n <Tile\n key={tile.value}\n active={density === tile.value}\n label={tile.label}\n onClick={() => setDensity(tile.value)}\n testId={`${testIdPrefix}-density-${tile.value}`}\n >\n {densityGlyph(layout, tile, density === tile.value)}\n </Tile>\n ))}\n </Box>\n );\n}\n\nexport function DisplayTab({ testIdPrefix }: { testIdPrefix: string }): React.JSX.Element {\n const copy = useDataViewsCopy();\n const { layout, setLayout, canUseCards, canUseList, canUseBoard } = useDataViewsLayout();\n const available: DataViewsLayout[] = [\n \"table\",\n ...(canUseList ? ([\"list\"] as const) : []),\n ...(canUseCards ? ([\"cards\"] as const) : []),\n ...(canUseBoard ? ([\"board\"] as const) : []),\n ];\n return (\n <Box sx={{ p: 1 }}>\n <Text variant=\"caption\" as=\"p\">\n <Box component=\"span\" sx={{ px: 0.5, color: \"text.secondary\" }}>\n {copy.display.formatHeading}\n </Box>\n </Text>\n <Box\n sx={{\n display: \"grid\",\n gridTemplateColumns: available.length > 3 ? \"repeat(2, 1fr)\" : `repeat(${available.length}, 1fr)`,\n gap: 0.75,\n mt: 0.5,\n }}\n >\n {available.map((value) => (\n <Tile\n key={value}\n active={layout === value}\n label={LAYOUT_TILE_LABELS[value]}\n onClick={() => setLayout(value)}\n testId={`${testIdPrefix}-layout-${value}`}\n >\n {layoutGlyph(value, layout === value)}\n </Tile>\n ))}\n </Box>\n <Text variant=\"caption\" as=\"p\">\n <Box component=\"span\" sx={{ px: 0.5, py: 1, display: \"block\", color: \"text.disabled\" }}>\n {copy.display.layoutHints[layout]}\n </Box>\n </Text>\n {/* Every layout gets this, the board included. It used to be hidden on\n Quadro, which left the format tile switching to a view with no sizing\n control at all — and the section disappearing on select reads as a\n control that broke rather than one that does not apply. */}\n <Text variant=\"caption\" as=\"p\">\n <Box component=\"span\" sx={{ px: 0.5, color: \"text.secondary\" }}>\n {copy.display.densityHeadings[layout]}\n </Box>\n </Text>\n <DensityTiles testIdPrefix={testIdPrefix} />\n {!canUseBoard && (\n <Text variant=\"caption\" as=\"p\">\n <Box component=\"span\" sx={{ px: 0.5, pt: 1.25, display: \"block\", color: \"text.disabled\" }}>\n {copy.display.boardUnavailable}\n </Box>\n </Text>\n )}\n </Box>\n );\n}\n"],"mappings":"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","names":["default"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/Banner/Banner.styles.ts"],"sourcesContent":["import { alpha, keyframes } from '@mui/material/styles/index.js';\nimport type { CSSObject, PaletteColor, Theme } from '@mui/material/styles/index.js';\n\nimport type { BannerVariant } from './Banner.types';\nimport { ACTIVE, HOVER } from '../Alert/Alert.metrics';\nimport { modeInk } from '../../../tokens/ink';\n\n// Animations\nexport const fadeInSlide = keyframes`\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n`;\n\nconst pulseAnimation = keyframes`\n 0% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 0.7;\n }\n 70% {\n box-shadow: 0 0 0 8px currentColor;\n opacity: 0;\n }\n 100% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 0;\n }\n`;\n\nexport const getVariantColor = (theme: Theme, variant: BannerVariant) => {\n const colorMap = {\n info: theme.palette.info,\n success: theme.palette.success,\n warning: theme.palette.warning,\n critical: theme.palette.error,\n };\n return colorMap[variant];\n};\n\nexport const bannerPartStyles = (theme: Theme, colorPalette: PaletteColor): CSSObject => ({\n // Icon container\n '.banner-icon': {\n flexShrink: 0,\n marginTop: theme.spacing(0.25),\n color: colorPalette.main,\n fontSize: '1.25rem',\n display: 'flex',\n alignItems: 'center',\n position: 'relative',\n\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n inset: -4,\n borderRadius: '50%',\n background: alpha(colorPalette.main, 0.1),\n animation: `${pulseAnimation} 3s infinite`,\n },\n },\n\n // Content area\n '.banner-content': {\n flex: 1,\n minWidth: 0, // Prevents flex item overflow\n },\n\n // Title styles\n '.banner-title': {\n fontWeight: 600,\n fontSize: '1rem',\n lineHeight: 1.4,\n marginBottom: theme.spacing(0.5),\n color: colorPalette.dark || colorPalette.main,\n },\n\n // Description styles \n '.banner-description': {\n fontSize: '0.875rem',\n lineHeight: 1.5,\n opacity: 0.9,\n color: 'inherit',\n },\n\n // Actions area\n '.banner-actions': {\n display: 'flex',\n flexShrink: 0,\n gap: theme.spacing(1),\n alignItems: 'center',\n marginTop: theme.spacing(1),\n\n [theme.breakpoints.up('sm')]: {\n marginTop: 0,\n marginLeft: theme.spacing(2),\n },\n },\n\n // Dismiss button\n '.banner-dismiss': {\n color: 'inherit',\n opacity: 0.7,\n marginLeft: theme.spacing(1),\n flexShrink: 0,\n\n // Opacity and a wash only: the dismiss used to spin 90deg, which drew the\n // eye to the way out rather than to the message. Same fix as `Alert`'s\n // close button, which is the sibling surface (FUT-1458).\n '&:hover': {\n opacity: 1,\n backgroundColor: alpha(colorPalette.main, 0.1),\n },\n\n '&:focus-visible': {\n opacity: 1,\n outline: `2px solid ${colorPalette.main}`,\n outlineOffset: '2px',\n },\n },\n});\n\n/**\n * The pointer states, from `Alert`'s own table.\n *\n * Banner had NO hover at all — measured ΔE76 0.00 on every variant in both\n * modes — so moving between the two surfaces gave feedback on one and silence\n * on the other. They are the same kind of thing and now answer a pointer the\n * same way.\n *\n * Neither block may declare `transition`: `:active` under a mouse always\n * implies `:hover`, so a shorthand here would outrank the root's and reset the\n * opacity fade the press is built on.\n */\n/** The same flat inset tint `Alert` paints; see `ACTIVE` for why it is a layer. */\nconst tint = (theme: Theme, a: number): string =>\n `inset 0 0 0 100vmax ${alpha(modeInk(theme), a)}`;\n\nexport const bannerPointerStates = (theme: Theme): CSSObject => ({\n '&:hover': {\n boxShadow: tint(theme, HOVER.tintAlpha),\n },\n\n // The `:not(:has(…))` names CONTROLS, not any descendant: `:active` matches\n // an ancestor of whatever is pressed, so without it pressing the dismiss or\n // an action dimmed the message that owns it. Excluding `:has(:active)`\n // wholesale does not work — pressing the TEXT makes that text `:active` too,\n // so the guard matched on every press and the state never fired.\n '&:active:not(:has(button:active, a:active, [role=\"button\"]:active))': {\n boxShadow: tint(theme, ACTIVE.tintAlpha),\n transition: 'none',\n },\n});\n\n/** The seconds the tint takes easing back, shared with `Alert`. */\nexport const BANNER_TINT_S = ACTIVE.ms / 1000;\n"],"mappings":";;;;;;;;;AAAA,SAAS,OAAO,iBAAiB;AAQ1B,IAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAW3B,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAehB,IAAM,kBAAkB,CAAC,OAAc,YAA2B;AACvE,QAAM,WAAW;AAAA,IACf,MAAM,MAAM,QAAQ;AAAA,IACpB,SAAS,MAAM,QAAQ;AAAA,IACvB,SAAS,MAAM,QAAQ;AAAA,IACvB,UAAU,MAAM,QAAQ;AAAA,EAC1B;AACA,SAAO,SAAS,OAAO;AACzB;AAEO,IAAM,mBAAmB,CAAC,OAAc,kBAA2C;AAAA;AAAA,EAExF,gBAAgB;AAAA,IACd,YAAY;AAAA,IACZ,WAAW,MAAM,QAAQ,IAAI;AAAA,IAC7B,OAAO,aAAa;AAAA,IACpB,UAAU;AAAA,IACV,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,UAAU;AAAA,IAEV,aAAa;AAAA,MACX,SAAS;AAAA,MACT,UAAU;AAAA,MACV,OAAO;AAAA,MACP,cAAc;AAAA,MACd,YAAY,MAAM,aAAa,MAAM,GAAG;AAAA,MACxC,WAAW,GAAG,cAAc;AAAA,IAC9B;AAAA,EACF;AAAA;AAAA,EAGA,mBAAmB;AAAA,IACjB,MAAM;AAAA,IACN,UAAU;AAAA;AAAA,EACZ;AAAA;AAAA,EAGA,iBAAiB;AAAA,IACf,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,cAAc,MAAM,QAAQ,GAAG;AAAA,IAC/B,OAAO,aAAa,QAAQ,aAAa;AAAA,EAC3C;AAAA;AAAA,EAGA,uBAAuB;AAAA,IACrB,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,OAAO;AAAA,EACT;AAAA;AAAA,EAGA,mBAAmB;AAAA,IACjB,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK,MAAM,QAAQ,CAAC;AAAA,IACpB,YAAY;AAAA,IACZ,WAAW,MAAM,QAAQ,CAAC;AAAA,IAE1B,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG;AAAA,MAC5B,WAAW;AAAA,MACX,YAAY,MAAM,QAAQ,CAAC;AAAA,IAC7B;AAAA,EACF;AAAA;AAAA,EAGA,mBAAmB;AAAA,IACjB,OAAO;AAAA,IACP,SAAS;AAAA,IACT,YAAY,MAAM,QAAQ,CAAC;AAAA,IAC3B,YAAY;AAAA;AAAA;AAAA;AAAA,IAKZ,WAAW;AAAA,MACT,SAAS;AAAA,MACT,iBAAiB,MAAM,aAAa,MAAM,GAAG;AAAA,IAC/C;AAAA,IAEA,mBAAmB;AAAA,MACjB,SAAS;AAAA,MACT,SAAS,aAAa,aAAa,IAAI;AAAA,MACvC,eAAe;AAAA,IACjB;AAAA,EACF;AACF;AAeA,IAAM,OAAO,CAAC,OAAc,MAC1B,uBAAuB,MAAM,QAAQ,KAAK,GAAG,CAAC,CAAC;AAE1C,IAAM,sBAAsB,CAAC,WAA6B;AAAA,EAC/D,WAAW;AAAA,IACT,WAAW,KAAK,OAAO,MAAM,SAAS;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,uEAAuE;AAAA,IACrE,WAAW,KAAK,OAAO,OAAO,SAAS;AAAA,IACvC,YAAY;AAAA,EACd;AACF;AAGO,IAAM,gBAAgB,OAAO,KAAK;","names":[]}
|