@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/Dashboard/Dashboard.tsx"],"sourcesContent":["'use client';\n\nimport ExpandLessIcon from '@mui/icons-material/ExpandLess';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport FilterIcon from '@mui/icons-material/FilterListRounded';\nimport NavigateNextIcon from '@mui/icons-material/NavigateNext';\nimport Box from '@mui/material/Box/index.js';\nimport MuiBreadcrumbs from '@mui/material/Breadcrumbs/index.js';\nimport Button from '@mui/material/Button/index.js';\nimport Collapse from '@mui/material/Collapse/index.js';\nimport MuiLink from '@mui/material/Link/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { styled } from '@mui/material/styles/index.js';\nimport React, { useMemo, useState } from 'react';\n\nimport { DashboardContext, useDashboardContext } from './DashboardContext';\nimport {\n DashboardAction,\n DashboardActions,\n DashboardExport,\n DashboardFilterToggle,\n DashboardInfo,\n DashboardSettings,\n DashboardSpacer,\n} from './DashboardParts';\nimport type {\n DashboardBodyProps,\n DashboardBreadcrumbProps,\n DashboardFiltersProps,\n DashboardHeaderProps,\n DashboardMoreFiltersProps,\n DashboardProps,\n} from './Dashboard.types';\n\n/**\n * Ordered slot keys. The root reorders composed children into this sequence so\n * authoring order in JSX never matters — a `<Dashboard.Filters>` placed above\n * a `<Dashboard.Header>` still renders below it.\n */\nconst SLOT_ORDER = ['breadcrumb', 'header', 'filters', 'body'] as const;\n/** A slot a component can occupy in the canonical Dashboard order. */\nexport type DashboardSlot = (typeof SLOT_ORDER)[number];\n\n/** Marker attached to each sub-component so the root can rank it by slot. */\ntype SlottedComponent = { dashboardSlot?: DashboardSlot };\n\n/**\n * Tag a component with the Dashboard slot it occupies so the root ranks it in\n * canonical order. The root inspects only its DIRECT children's `type`, so a\n * page that wraps a `<Dashboard.Header>` (or any part) in its own component MUST\n * mark that wrapper — otherwise it counts as an unrecognised child and sinks\n * below the body. Returns the component for convenient inline use.\n *\n * @example\n * ```tsx\n * function ProductsHeader(props) {\n * return <Dashboard.Header title=\"Products\">{/* … *\\/}</Dashboard.Header>;\n * }\n * markDashboardSlot(ProductsHeader, 'header');\n * ```\n */\nexport function markDashboardSlot<T>(component: T, slot: DashboardSlot): T {\n (component as SlottedComponent).dashboardSlot = slot;\n return component;\n}\n\nconst Root = styled(Box)(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(2),\n width: '100%',\n}));\n\nfunction slotRank(node: React.ReactNode): number {\n if (React.isValidElement(node)) {\n const slot = (node.type as SlottedComponent).dashboardSlot;\n if (slot) {\n const rank = SLOT_ORDER.indexOf(slot);\n if (rank >= 0) {\n return rank;\n }\n }\n }\n // Unknown / arbitrary children keep their relative position after the\n // recognised slots.\n return SLOT_ORDER.length;\n}\n\n/**\n * Composable page shell. `<Dashboard>` provides shared state through context\n * and renders whichever sub-components you compose — nothing is implied. Drop\n * in only the parts you need; omit `<Dashboard.Filters>` and there is simply no\n * filter UI.\n *\n * @example\n * ```tsx\n * <Dashboard activeFilterCount={2}>\n * <Dashboard.Breadcrumb items={[{ label: 'Admin', href: '/admin' }, { label: 'Products' }]} />\n * <Dashboard.Header title=\"Products\">\n * <Dashboard.Info>What this page does…</Dashboard.Info>\n * <Dashboard.FilterToggle />\n * <Dashboard.Settings>In development</Dashboard.Settings>\n * <Dashboard.Spacer />\n * <Dashboard.Export onExport={handleExport} />\n * <Dashboard.Action><Button variant=\"contained\">New product</Button></Dashboard.Action>\n * </Dashboard.Header>\n * <Dashboard.Filters>{/* search + pills *\\/}</Dashboard.Filters>\n * <Dashboard.Body>{table}</Dashboard.Body>\n * </Dashboard>\n * ```\n */\nexport const Dashboard = ({\n children,\n defaultFiltersVisible = true,\n activeFilterCount = 0,\n testIdPrefix = 'dashboard',\n className,\n}: DashboardProps): React.JSX.Element => {\n const [filtersVisible, setFiltersVisible] = useState(defaultFiltersVisible);\n const [moreFiltersOpen, setMoreFiltersOpen] = useState(false);\n\n const value = useMemo(\n () => ({\n filtersVisible,\n toggleFilters: () => setFiltersVisible((v) => !v),\n moreFiltersOpen,\n toggleMoreFilters: () => setMoreFiltersOpen((v) => !v),\n activeFilterCount,\n testIdPrefix,\n }),\n [filtersVisible, moreFiltersOpen, activeFilterCount, testIdPrefix],\n );\n\n // Stable sort recognised slots into canonical order, preserving the original\n // order of anything unrecognised.\n const ordered = useMemo(() => {\n const arr = React.Children.toArray(children);\n return arr\n .map((node, index) => ({ node, index, rank: slotRank(node) }))\n .sort((a, b) => (a.rank === b.rank ? a.index - b.index : a.rank - b.rank))\n .map((entry) => entry.node);\n }, [children]);\n\n return (\n <DashboardContext.Provider value={value}>\n <Root className={className} data-testid={testIdPrefix}>\n {ordered}\n </Root>\n </DashboardContext.Provider>\n );\n};\n\nDashboard.displayName = 'Dashboard';\n\n/* -------------------------------------------------------------------------- */\n/* Breadcrumb */\n/* -------------------------------------------------------------------------- */\n\nconst DashboardBreadcrumb = ({\n items,\n renderLink,\n className,\n}: DashboardBreadcrumbProps): React.JSX.Element => {\n const { testIdPrefix } = useDashboardContext();\n return (\n <MuiBreadcrumbs\n separator={<NavigateNextIcon fontSize=\"small\" />}\n className={className}\n aria-label=\"breadcrumb\"\n data-testid={`${testIdPrefix}-breadcrumb`}\n sx={{ fontSize: '0.875rem', color: 'text.secondary' }}\n >\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n if (isLast || !item.href) {\n return (\n <Typography\n key={`${item.label}-${index}`}\n component=\"span\"\n sx={{ fontSize: '0.875rem', color: isLast ? 'text.primary' : 'text.secondary' }}\n aria-current={isLast ? 'page' : undefined}\n >\n {item.label}\n </Typography>\n );\n }\n const linkContent = item.label;\n if (renderLink) {\n return <React.Fragment key={`${item.label}-${index}`}>{renderLink(item, linkContent)}</React.Fragment>;\n }\n return (\n <MuiLink\n key={`${item.label}-${index}`}\n href={item.href}\n underline=\"hover\"\n color=\"inherit\"\n sx={{ fontSize: '0.875rem' }}\n >\n {linkContent}\n </MuiLink>\n );\n })}\n </MuiBreadcrumbs>\n );\n};\nDashboardBreadcrumb.displayName = 'Dashboard.Breadcrumb';\n(DashboardBreadcrumb as SlottedComponent).dashboardSlot = 'breadcrumb';\n\n/* -------------------------------------------------------------------------- */\n/* Header + action parts */\n/* -------------------------------------------------------------------------- */\n\nconst DashboardHeader = ({ title, children, className }: DashboardHeaderProps): React.JSX.Element => {\n const { testIdPrefix } = useDashboardContext();\n return (\n <Box\n className={className}\n data-testid={`${testIdPrefix}-header`}\n sx={{ display: 'flex', alignItems: 'center', gap: 1, flexWrap: 'wrap', minHeight: 40 }}\n >\n <Typography variant=\"h5\" component=\"h1\" sx={{ fontWeight: 600, mr: 0.5 }}>\n {title}\n </Typography>\n {children}\n </Box>\n );\n};\nDashboardHeader.displayName = 'Dashboard.Header';\n(DashboardHeader as SlottedComponent).dashboardSlot = 'header';\n\n/** Flexible spacer — everything composed after it is pushed to the right. */\n/* -------------------------------------------------------------------------- */\n/* Filters */\n/* -------------------------------------------------------------------------- */\n\nconst DashboardFilters = ({ children, className }: DashboardFiltersProps): React.JSX.Element => {\n const { filtersVisible, testIdPrefix } = useDashboardContext();\n return (\n <Collapse in={filtersVisible} unmountOnExit data-testid={`${testIdPrefix}-filters`}>\n <Box\n className={className}\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: 1.5,\n p: 2,\n borderRadius: 1,\n border: 1,\n borderColor: 'divider',\n bgcolor: 'action.hover',\n }}\n >\n {children}\n </Box>\n </Collapse>\n );\n};\nDashboardFilters.displayName = 'Dashboard.Filters';\n(DashboardFilters as SlottedComponent).dashboardSlot = 'filters';\n\nconst DashboardMoreFilters = ({ children, label = 'More filters' }: DashboardMoreFiltersProps): React.JSX.Element => {\n const { moreFiltersOpen, toggleMoreFilters, testIdPrefix } = useDashboardContext();\n return (\n <Box>\n <Button\n variant=\"text\"\n size=\"small\"\n startIcon={<FilterIcon fontSize=\"small\" />}\n endIcon={moreFiltersOpen ? <ExpandLessIcon fontSize=\"small\" /> : <ExpandMoreIcon fontSize=\"small\" />}\n onClick={toggleMoreFilters}\n aria-expanded={moreFiltersOpen}\n data-testid={`${testIdPrefix}-more-filters-toggle`}\n >\n {label}\n </Button>\n <Collapse in={moreFiltersOpen} unmountOnExit data-testid={`${testIdPrefix}-more-filters-panel`}>\n <Box sx={{ mt: 1.5, p: 2, borderRadius: 1, border: 1, borderColor: 'divider', bgcolor: 'background.paper' }}>\n {children}\n </Box>\n </Collapse>\n </Box>\n );\n};\nDashboardMoreFilters.displayName = 'Dashboard.MoreFilters';\n\n/* -------------------------------------------------------------------------- */\n/* Body */\n/* -------------------------------------------------------------------------- */\n\nconst DashboardBody = ({ children, className }: DashboardBodyProps): React.JSX.Element => {\n const { testIdPrefix } = useDashboardContext();\n return (\n <Box className={className} data-testid={`${testIdPrefix}-body`}>\n {children}\n </Box>\n );\n};\nDashboardBody.displayName = 'Dashboard.Body';\n(DashboardBody as SlottedComponent).dashboardSlot = 'body';\n\n/* -------------------------------------------------------------------------- */\n/* Attach sub-components as dot-notation parts */\n/* -------------------------------------------------------------------------- */\n\nDashboard.Breadcrumb = DashboardBreadcrumb;\nDashboard.Header = DashboardHeader;\nDashboard.Spacer = DashboardSpacer;\nDashboard.Info = DashboardInfo;\nDashboard.FilterToggle = DashboardFilterToggle;\nDashboard.Settings = DashboardSettings;\nDashboard.Export = DashboardExport;\nDashboard.Action = DashboardAction;\nDashboard.Actions = DashboardActions;\nDashboard.Filters = DashboardFilters;\nDashboard.MoreFilters = DashboardMoreFilters;\nDashboard.Body = DashboardBody;\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/Avatar/Avatar.view.tsx"],"sourcesContent":["import MuiAvatar from '@mui/material/Avatar/index.js';\nimport Badge from '@mui/material/Badge/index.js';\nimport Fade from '@mui/material/Fade/index.js';\nimport { alpha, useTheme, styled } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { pulseAnimation, rotateAnimation, scaleInAnimation, shimmerAnimation } from './Avatar.animations';\nimport {\n AVATAR_SIZES,\n AVATAR_TRANSITION_EASING,\n AVATAR_TRANSITION_MS,\n ACTIVE_SCALE,\n BORDER_HALO_ALPHA,\n BORDER_WIDTH,\n FADE_MS,\n FOCUS_RING,\n GLOW,\n HOVER,\n LOADING_OVERLAY,\n PULSE,\n ROUNDED_RADIUS_UNITS,\n SCALE_IN_MS,\n SHIMMER,\n SPINNER,\n STATUS_DOT,\n} from './Avatar.metrics';\nimport type { AvatarSize, AvatarStatus, ContentType } from './Avatar.types';\nimport { absoluteInk, controlNeutral, neutralTones } from '../../../tokens/ink';\nimport { px } from '../../../tokens/theme';\n\nexport type { ContentType };\n\n\ninterface PaletteLike {\n main: string;\n contrastText?: string;\n light?: string;\n dark?: string;\n}\n\nconst getColorFromTheme = (theme: Theme, color: string): PaletteLike => {\n const neutral = controlNeutral(theme);\n const colorMap: Record<string, PaletteLike> = {\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`, not `error`. This map was keyed on MUI's word while the prop\n // took the house one, so `danger` matched nothing and fell through to\n // primary — a red avatar rendering blue, silently.\n danger: theme.palette.error,\n neutral: { main: neutral.main, contrastText: neutral.contrastText },\n };\n\n return colorMap[color] || theme.palette.primary;\n};\n\ninterface SizeStyle {\n width: number;\n height: number;\n fontSize: string;\n}\n\n// Derived from the shared metrics, not restated: the native `Avatar` reads the\n// same table, so the two renderers cannot disagree on a box.\nconst sizeMap: Record<AvatarSize, SizeStyle> = Object.fromEntries(\n Object.entries(AVATAR_SIZES).map(([size, step]) => [\n size,\n { width: step.box, height: step.box, fontSize: px(step.fontSize) },\n ]),\n) as Record<AvatarSize, SizeStyle>;\n\nconst getSizeStyles = (size: AvatarSize): SizeStyle => sizeMap[size] || sizeMap.md;\n\nconst getStatusColor = (status: AvatarStatus, theme: Theme): string => {\n // The same four decisions the native half reads out of `Avatar.metrics`,\n // against MUI's `Theme` rather than the shared one.\n const statusColorMap: Record<AvatarStatus, string> = {\n online: theme.palette.success.main,\n offline: neutralTones(theme).muted,\n away: theme.palette.warning.main,\n busy: theme.palette.error.main,\n };\n\n return statusColorMap[status] || statusColorMap.offline;\n};\n\n/** Hover/active lift, only when the avatar is interactive. */\nconst interactiveStyles = (interactive: boolean | undefined, main: string): CSSObject =>\n interactive\n ? {\n '&:hover': {\n transform: `scale(${HOVER.scale}) translateY(-${HOVER.lift}px)`,\n boxShadow: `0 ${HOVER.shadowY}px ${HOVER.shadowBlur}px ${alpha(main, HOVER.shadowAlpha)}`,\n filter: `brightness(${HOVER.brightness})`,\n zIndex: 10,\n },\n '&:active': { transform: `scale(${ACTIVE_SCALE})` },\n }\n : {};\n\n/** Shimmer gradient while the image loads. */\nconst loadingStyles = (isLoading: boolean | undefined, main: string): CSSObject =>\n isLoading\n ? {\n background: `linear-gradient(\n 90deg,\n ${alpha(main, SHIMMER.fromAlpha)},\n ${alpha(main, SHIMMER.toAlpha)},\n ${alpha(main, SHIMMER.fromAlpha)}\n )`,\n backgroundSize: '200% 100%',\n animation: `${shimmerAnimation} ${SHIMMER.durationMs / 1000}s ease-in-out infinite`,\n }\n : {};\n\n/** Corner radius per shape variant (circle/status are round). */\nconst variantRadius = (variant: string | undefined, theme: Theme): CSSObject => {\n if (variant === 'square') return { borderRadius: 0 };\n if (variant === 'rounded') return { borderRadius: theme.spacing(ROUNDED_RADIUS_UNITS) };\n return { borderRadius: '50%' };\n};\n\n/** Paper ring when bordered (e.g. inside an AvatarGroup). */\nconst borderedStyles = (bordered: boolean | undefined, theme: Theme): CSSObject =>\n bordered\n ? {\n border: `${BORDER_WIDTH}px solid ${theme.palette.background.paper}`,\n boxShadow: `0 0 0 1px ${alpha(theme.palette.divider, BORDER_HALO_ALPHA)}`,\n }\n : {};\n\n/** Glow adds the halo; pulse adds the expanding ring — either or both. */\nconst glowPulseStyles = (\n glow: boolean | undefined,\n pulse: boolean | undefined,\n main: string,\n): CSSObject => {\n const styles: CSSObject = {};\n if (glow) {\n styles.boxShadow = `0 0 ${GLOW.blur}px ${GLOW.spread}px ${alpha(main, GLOW.alpha)} !important`;\n styles.filter = `brightness(${GLOW.brightness})`;\n }\n if (pulse) {\n styles.position = 'relative';\n styles['&::after'] = {\n content: '\"\"',\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: '100%',\n height: '100%',\n borderRadius: 'inherit',\n transform: 'translate(-50%, -50%)',\n backgroundColor: main,\n opacity: PULSE.alpha,\n animation: `${pulseAnimation} ${PULSE.durationMs / 1000}s infinite`,\n pointerEvents: 'none',\n zIndex: -1,\n };\n }\n return styles;\n};\n\ninterface StyledAvatarProps {\n customVariant?: string;\n customSize?: AvatarSize;\n customColor?: string;\n glow?: boolean;\n pulse?: boolean;\n bordered?: boolean;\n isLoading?: boolean;\n hasError?: boolean;\n interactive?: boolean;\n}\n\nconst STYLED_AVATAR_PROPS = [\n 'customVariant',\n 'customSize',\n 'customColor',\n 'glow',\n 'pulse',\n 'bordered',\n 'isLoading',\n 'hasError',\n 'interactive',\n];\n\nconst StyledAvatar = styled(MuiAvatar, {\n shouldForwardProp: (prop) => !STYLED_AVATAR_PROPS.includes(prop as string),\n})<StyledAvatarProps>(\n ({\n theme,\n customVariant,\n customSize = 'md',\n customColor = 'primary',\n glow,\n pulse,\n bordered,\n isLoading,\n hasError,\n interactive,\n }) => {\n const palette = getColorFromTheme(theme, customColor);\n return {\n ...getSizeStyles(customSize),\n transition: `all ${AVATAR_TRANSITION_MS / 1000}s ${AVATAR_TRANSITION_EASING}`,\n position: 'relative',\n overflow: 'visible',\n animation: `${scaleInAnimation} ${SCALE_IN_MS / 1000}s ease-out`,\n cursor: interactive ? 'pointer' : 'default',\n backgroundColor: hasError ? theme.palette.error.main : palette.main,\n color: hasError ? theme.palette.error.contrastText : (palette.contrastText ?? absoluteInk(theme).white),\n ...interactiveStyles(interactive, palette.main),\n ...loadingStyles(isLoading, palette.main),\n ...variantRadius(customVariant, theme),\n ...borderedStyles(bordered, theme),\n ...glowPulseStyles(glow, pulse, palette.main),\n '&:focus-visible': {\n outline: `${FOCUS_RING.width}px solid ${alpha(palette.main, FOCUS_RING.alpha)}`,\n outlineOffset: FOCUS_RING.offset,\n },\n };\n },\n);\n\nconst LoadingOverlay = styled('div')<{ size: AvatarSize }>(({ theme, size }) => {\n const sizeStyles = getSizeStyles(size);\n return {\n position: 'absolute',\n top: 0,\n left: 0,\n width: sizeStyles.width,\n height: sizeStyles.height,\n borderRadius: 'inherit',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: alpha(theme.palette.background.paper, LOADING_OVERLAY.paperAlpha),\n backdropFilter: `blur(${LOADING_OVERLAY.blur}px)`,\n '& .loading-spinner': {\n width: sizeStyles.width * SPINNER.scale,\n height: sizeStyles.height * SPINNER.scale,\n border: `${SPINNER.ringWidth}px solid ${alpha(theme.palette.primary.main, SPINNER.trackAlpha)}`,\n borderTopColor: theme.palette.primary.main,\n borderRadius: '50%',\n animation: `${rotateAnimation} ${SPINNER.durationMs / 1000}s linear infinite`,\n },\n };\n});\n\nconst StatusBadge = styled(Badge, {\n shouldForwardProp: (prop) => !['statusColor', 'avatarSize'].includes(prop as string),\n})<{\n statusColor?: string;\n avatarSize?: AvatarSize;\n}>(({ theme, statusColor, avatarSize = 'md' }) => {\n const sizeStyles = getSizeStyles(avatarSize);\n const badgeSize = Math.max(STATUS_DOT.min, sizeStyles.width * STATUS_DOT.scale);\n\n return {\n '& .MuiBadge-badge': {\n backgroundColor: statusColor || theme.palette.success.main,\n color: statusColor || theme.palette.success.main,\n width: badgeSize,\n height: badgeSize,\n borderRadius: '50%',\n border: `${STATUS_DOT.borderWidth}px solid ${theme.palette.background.paper}`,\n '&::after': {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n borderRadius: '50%',\n backgroundColor: 'currentColor',\n content: '\"\"',\n },\n },\n };\n});\n\nexport interface AvatarViewProps {\n mounted: boolean;\n variant: string;\n size: AvatarSize;\n color: string;\n glow: boolean;\n pulse: boolean;\n bordered: boolean;\n showSpinner: boolean;\n imageError: boolean;\n clickable: boolean;\n imgSrc?: string;\n alt?: string;\n ariaLabel: string;\n content: React.ReactNode;\n contentType: ContentType;\n className?: string;\n dataTestId?: string;\n status?: AvatarStatus;\n forwardedRef: React.Ref<HTMLDivElement>;\n onClick: (event: React.MouseEvent<HTMLDivElement>) => void;\n handleImageError: React.ReactEventHandler;\n handleImageLoad: () => void;\n rest: Record<string, unknown>;\n}\n\n/** The avatar box itself: the styled MUI avatar plus the loading overlay. */\nfunction AvatarSurface(props: AvatarViewProps): React.JSX.Element {\n const { showSpinner, dataTestId, clickable } = props;\n const testId = (suffix: string): string | undefined =>\n dataTestId ? `${dataTestId}-${suffix}` : undefined;\n\n return (\n <Fade in={props.mounted} timeout={FADE_MS}>\n <div style={{ position: 'relative', display: 'inline-block' }}>\n <StyledAvatar\n ref={props.forwardedRef}\n className={props.className}\n customVariant={props.variant}\n customSize={props.size}\n customColor={props.color}\n glow={props.glow}\n pulse={props.pulse}\n bordered={props.bordered}\n isLoading={showSpinner}\n hasError={props.imageError}\n interactive={clickable}\n src={props.imgSrc}\n alt={props.alt}\n onClick={props.onClick}\n tabIndex={clickable ? 0 : undefined}\n role={clickable ? 'button' : undefined}\n aria-label={props.ariaLabel}\n data-testid={dataTestId}\n {...props.rest}\n // Load/error fire on the inner <img>, not the root — and don't bubble.\n // Wiring them via the img slot lets `imageLoading` actually clear (else\n // the spinner overlays the avatar forever whenever `src` is set). Keep\n // after {...props.rest} so a consumer-supplied slotProps can't override\n // and detach these handlers.\n slotProps={{ img: { onError: props.handleImageError, onLoad: props.handleImageLoad } }}\n >\n {showSpinner ? null : (\n <span data-testid={testId(props.contentType)}>{props.content}</span>\n )}\n </StyledAvatar>\n {showSpinner && (\n <LoadingOverlay size={props.size} data-testid={testId('loading')}>\n <div className=\"loading-spinner\" data-testid={testId('loading-spinner')} />\n </LoadingOverlay>\n )}\n </div>\n </Fade>\n );\n}\n\n/** Presentational avatar: the surface, wrapped in a status dot badge when requested. */\nexport function AvatarView(props: AvatarViewProps): React.JSX.Element {\n const theme = useTheme();\n const surface = <AvatarSurface {...props} />;\n\n if (props.variant === 'status' && props.status) {\n return (\n <StatusBadge\n overlap=\"circular\"\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n variant=\"dot\"\n statusColor={getStatusColor(props.status, theme)}\n avatarSize={props.size}\n data-testid={props.dataTestId ? `${props.dataTestId}-badge` : undefined}\n >\n {surface}\n </StatusBadge>\n );\n }\n\n return surface;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/form/ToggleGroup/ToggleGroup.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport ToggleButton from '@mui/material/ToggleButton/index.js';\nimport ToggleButtonGroup from '@mui/material/ToggleButtonGroup/index.js';\nimport { alpha, useTheme, styled } from '@mui/material/styles/index.js';\nimport type { Theme } from '@mui/material/styles/index.js';\nimport React, { forwardRef } from 'react';\n\nimport type { ToggleGroupProps } from './ToggleGroup.types';\nimport { cssLengthToPx } from '../../../tokens/css-units';\nimport { asFieldSize, fieldHeight } from '../../../tokens/field-height';\nimport { fieldRadius } from '../../../tokens/field-radius';\nimport { controlNeutral } from '../../../tokens/ink';\n\nconst GLASS_PADDING = 4;\nconst GLASS_BORDER = 1;\n\nconst getColorFromTheme = (theme: Theme, color: string) => {\n if (color === 'neutral') {\n const neutral = controlNeutral(theme);\n return { ...neutral, contrastText: theme.palette.getContrastText(neutral.main) };\n }\n\n const colorMap = {\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 const palette = colorMap[color as keyof typeof colorMap] || theme.palette.primary;\n\n // Ensure palette has required properties\n return {\n main: palette.main,\n dark: palette.dark || palette.main,\n light: palette.light || palette.main,\n contrastText: palette.contrastText || theme.palette.getContrastText(palette.main),\n };\n};\n\nconst StyledToggleGroup = styled(ToggleButtonGroup, {\n shouldForwardProp: (prop) => !['customColor', 'customSize', 'glass'].includes(prop as string),\n})<{\n customColor?: string;\n customSize?: string;\n glass?: boolean;\n}>(({ theme, glass }) => {\n // Each button is the field, so it takes the field radius. The glass frame\n // around them is inset by its padding, the buttons' margin and its border,\n // and rounds by that much more so the two corners stay concentric.\n const radius = fieldRadius(theme);\n const inset = GLASS_PADDING + cssLengthToPx(theme.spacing(0.5), 4) + GLASS_BORDER;\n return {\n backgroundColor: glass ? alpha(theme.palette.background.paper, 0.1) : 'transparent',\n backdropFilter: glass ? 'blur(20px)' : 'none',\n borderRadius: glass ? radius + inset : radius,\n padding: glass ? GLASS_PADDING : 0,\n border: glass ? `${GLASS_BORDER}px solid ${alpha(theme.palette.divider, 0.2)}` : 'none',\n\n '& .MuiToggleButtonGroup-grouped': {\n margin: theme.spacing(0.5),\n border: 0,\n borderRadius: `${radius}px !important`,\n },\n };\n});\n\nexport const ToggleGroup = forwardRef<HTMLDivElement, ToggleGroupProps>(\n (\n {\n variant = 'single',\n color = 'primary',\n size = 'md',\n options,\n glass = false,\n gradient = false,\n value,\n onChange,\n dataTestId = 'toggle-group',\n ...props\n },\n ref,\n ) => {\n const theme = useTheme();\n const colorPalette = getColorFromTheme(theme, color);\n\n const sizeMap = {\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\n return (\n <StyledToggleGroup\n ref={ref}\n customColor={color}\n customSize={size}\n glass={glass}\n value={value}\n onChange={onChange}\n exclusive={variant === 'exclusive' || variant === 'single'}\n data-testid={dataTestId}\n {...props}\n >\n {options.map((option) => (\n <ToggleButton\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n data-testid={`${dataTestId}-item-${option.value}`}\n sx={{\n textTransform: 'none',\n fontWeight: 500,\n transition: 'all 0.3s ease',\n ...sizeMap[size as keyof typeof sizeMap],\n // The theme's field height for the size; the label centres in it.\n minHeight: (theme) => fieldHeight(theme, asFieldSize(size)),\n paddingTop: 0,\n paddingBottom: 0,\n\n '&.Mui-selected': {\n backgroundColor: colorPalette.main,\n color: colorPalette.contrastText,\n\n ...(gradient && {\n background: `linear-gradient(135deg, ${colorPalette.main}, ${colorPalette.dark})`,\n }),\n },\n }}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n {option.icon}\n {option.label}\n </Box>\n </ToggleButton>\n ))}\n </StyledToggleGroup>\n );\n },\n);\n\nToggleGroup.displayName = 'ToggleGroup';\n"],"mappings":"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","names":["theme"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/DataViews/data-views-more-filters.tsx"],"sourcesContent":["\"use client\";\n\nimport KeyboardArrowDownRoundedIcon from \"@mui/icons-material/KeyboardArrowDownRounded\";\n// A FUNNEL, not the tune sliders this used to share with \"Exibir\". The two\n// sit a few px apart on the same bar and do unrelated things — one narrows\n// WHICH rows you see, the other changes HOW they are shown — and with one\n// glyph between them the bar offered the operator no way to tell which was\n// which. On a phone, where both are icon-only, they were indistinguishable.\nimport FilterAltRoundedIcon from \"@mui/icons-material/FilterAltRounded\";\nimport Popover from \"@mui/material/Popover/index.js\";\nimport { useState } from \"react\";\n\nimport { useDataViewsCopy } from \"./data-views-copy-context\";\nimport { Button } from \"../../form/Button\";\nimport { Box } from \"../../../mui/Box\";\nimport { Text } from \"../../typography/Text\";\n\nimport { fieldClearing, MoreGroup, type MoreFieldProps } from \"./data-views-more-fields\";\nimport type { OverflowField } from \"./data-views-overflow\";\n\n/**\n * \"MAIS\" — the filter overflow: its trigger, its panel and its footer. What\n * goes INSIDE it is `data-views-more-fields`.\n *\n * It holds the fields that had no room on the toolbar. An applied filter is\n * ranked ahead of an idle one for the visible slots but is NOT exempt (see\n * `useFilterOverflow`), so an applied filter can be in here — on a phone, most\n * of them are. That is why the trigger changes tone and counts the applied\n * ones: a filter you cannot see is a filter you forget you set, and the badge\n * is what stops that.\n */\n\ninterface MoreFiltersProps<T extends Record<string, unknown>> extends MoreFieldProps {\n fields: OverflowField<T>[];\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 */\nfunction MoreTrigger({\n count,\n appliedCount,\n compact,\n onOpen,\n testIdPrefix,\n}: {\n count: number;\n appliedCount: number;\n /** Icon only — the same rung that strips Exibir/Exportar. */\n compact: boolean;\n onOpen: (anchor: HTMLElement) => void;\n testIdPrefix: string;\n}): React.JSX.Element {\n const copy = useDataViewsCopy();\n const applied = appliedCount > 0;\n return (\n <Button\n variant=\"outline\"\n size=\"sm\"\n color=\"neutral\"\n onClick={(event) => onOpen(event.currentTarget as HTMLElement)}\n dataTestId={`${testIdPrefix}-more-filters`}\n aria-label={\n applied\n ? copy.filters.moreFiltersApplied(count, appliedCount)\n : copy.filters.moreFilters(count)\n }\n >\n <Box\n component=\"span\"\n sx={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 0.5,\n color: applied ? \"primary.main\" : undefined,\n }}\n >\n <FilterAltRoundedIcon fontSize=\"small\" />\n {!compact && (\n <Box component=\"span\" sx={{ display: { xs: \"none\", sm: \"inline\" } }}>\n {copy.filters.moreTriggerLabel}\n </Box>\n )}\n <Box\n component=\"span\"\n data-testid={`${testIdPrefix}-more-badge`}\n sx={{\n px: 0.75,\n borderRadius: 5,\n bgcolor: applied ? \"primary.main\" : \"action.selected\",\n color: applied ? \"primary.contrastText\" : undefined,\n fontSize: \"0.6875rem\",\n fontWeight: applied ? 700 : undefined,\n }}\n >\n {applied ? appliedCount : count}\n </Box>\n {!compact && <KeyboardArrowDownRoundedIcon fontSize=\"small\" />}\n </Box>\n </Button>\n );\n}\n\n/** The panel's heading: what these are, and why they are in here. */\nfunction MoreHeading(): React.JSX.Element {\n const copy = useDataViewsCopy();\n return (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1,\n px: 1.5,\n py: 1,\n borderBottom: 1,\n borderColor: \"divider\",\n }}\n >\n <Text variant=\"caption\" as=\"span\">\n <Box component=\"span\" sx={{ textTransform: \"uppercase\", letterSpacing: 0.5, color: \"text.disabled\" }}>\n {copy.filters.moreHeading}\n </Box>\n </Text>\n <Text variant=\"caption\" as=\"span\">\n <Box component=\"span\" sx={{ ml: \"auto\", color: \"text.disabled\" }}>\n {copy.filters.overflowNote}\n </Box>\n </Text>\n </Box>\n );\n}\n\n/**\n * The panel's own way back to the unfiltered list.\n *\n * The bar's \"Limpar\" is the primary one, but it is a control like any other\n * and the ladder can take its label — and on the narrowest rungs this panel is\n * where most of the fields ended up anyway. Clearing everything from inside it\n * saves closing it to reach a button three pixels wide.\n */\nfunction MoreFooter({\n onClearAll,\n testIdPrefix,\n}: {\n onClearAll: () => void;\n testIdPrefix: string;\n}): React.JSX.Element {\n const copy = useDataViewsCopy();\n return (\n <Box sx={{ px: 1.5, py: 1, borderTop: 1, borderColor: \"divider\" }}>\n <Box\n component=\"button\"\n type=\"button\"\n onClick={onClearAll}\n data-testid={`${testIdPrefix}-more-clear-all`}\n sx={{\n width: \"100%\",\n border: 0,\n p: 0,\n bgcolor: \"transparent\",\n cursor: \"pointer\",\n font: \"inherit\",\n fontSize: \"0.8125rem\",\n textAlign: \"left\",\n color: \"primary.main\",\n \"&:hover\": { textDecoration: \"underline\" },\n }}\n >\n {copy.filters.clearAll}\n </Box>\n </Box>\n );\n}\n\n/** The overflow trigger + panel. Renders nothing when everything fits. */\nexport function MoreFilters<T extends Record<string, unknown>>({\n fields,\n onOpenChange,\n onClearAll,\n anyApplied,\n compact = false,\n ...rest\n}: MoreFiltersProps<T> & {\n /** Icon only — the same rung that strips Exibir/Exportar. */\n compact?: boolean;\n /** Clears every filter, not just the ones in here. */\n onClearAll: () => void;\n /** Whether anything is applied anywhere — the footer is pointless otherwise. */\n anyApplied: boolean;\n /**\n * So the shell can FREEZE the measured split while this panel is open.\n *\n * Applying a filter in here makes its field active, and an active field\n * takes an inline slot first — so the field being edited was promoted OUT of\n * this panel mid-keystroke, taking the focused input with it. Typing \"12\"\n * got as far as \"1\" and then had nowhere to go.\n */\n onOpenChange?: (open: boolean) => void;\n}): React.JSX.Element | null {\n const [anchor, setAnchor] = useState<HTMLElement | null>(null);\n if (fields.length === 0) return null;\n return (\n <>\n <MoreTrigger\n count={fields.length}\n appliedCount={\n fields.filter(\n (field) =>\n fieldClearing({\n field,\n pills: rest.pills,\n ranges: rest.ranges,\n onTogglePill: rest.onTogglePill,\n onChangeRange: rest.onChangeRange,\n }).applied,\n ).length\n }\n compact={compact}\n onOpen={(element) => {\n setAnchor(element);\n onOpenChange?.(true);\n }}\n testIdPrefix={rest.testIdPrefix}\n />\n <Popover\n open={Boolean(anchor)}\n anchorEl={anchor}\n onClose={() => {\n setAnchor(null);\n onOpenChange?.(false);\n }}\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"left\" }}\n slotProps={{ paper: { sx: { width: 300, maxWidth: \"calc(100vw - 32px)\" } } }}\n >\n <Box data-testid={`${rest.testIdPrefix}-more-panel`}>\n <MoreHeading />\n {/* overflowX hidden, not auto: this panel is a fixed 300px and its\n contents are told to shrink into it. A horizontal scrollbar here\n means something refused to, which is a bug to fix rather than a\n scrollbar to live with. */}\n <Box sx={{ maxHeight: 320, overflowY: \"auto\", overflowX: \"hidden\", p: 1.5, minWidth: 0 }}>\n {fields.map((field) => (\n <MoreGroup key={field.id} field={field} {...rest} />\n ))}\n </Box>\n {anyApplied && (\n <MoreFooter onClearAll={onClearAll} testIdPrefix={rest.testIdPrefix} />\n )}\n </Box>\n </Popover>\n </>\n );\n}\n"],"mappings":"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","names":["default"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/navigation/ContextMenu/ContextMenu.tsx"],"sourcesContent":["import 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,useState } from 'react';\n\nimport type { ContextMenuItem,ContextMenuProps } from './ContextMenu.types';\nimport { absoluteInk, neutralTones, shadowInk, sheen } from '../../../tokens/ink';\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: 160,\n borderRadius: theme.spacing(1),\n\n ...(customVariant === 'glass' && {\n backgroundColor: alpha(theme.palette.background.paper, 0.85),\n backdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.1)}`,\n boxShadow: `0 8px 32px ${shadowInk(theme, 0.12)}`,\n }),\n\n ...(customVariant === 'dark' && {\n backgroundColor: alpha(neutralTones(theme).inverseSurface, 0.95),\n color: absoluteInk(theme).white,\n '& .MuiMenuItem-root': {\n color: absoluteInk(theme).white,\n },\n '& .MuiListItemIcon-root': {\n color: absoluteInk(theme).white,\n },\n '& .MuiDivider-root': {\n borderColor: sheen(theme, 0.12),\n },\n }),\n\n ...(size === 'sm' && {\n '& .MuiMenuItem-root': {\n fontSize: '0.875rem',\n minHeight: 32,\n padding: theme.spacing(0.5, 1.5),\n },\n }),\n\n ...(size === 'lg' && {\n '& .MuiMenuItem-root': {\n fontSize: '1.125rem',\n minHeight: 48,\n padding: theme.spacing(1.5, 2),\n },\n }),\n },\n}));\n\n// `color` names a palette key (`success`, `warning`, …) that MUI's Theme type does\n// not index, so it is read structurally and falls back to primary.\nconst paletteColor = (theme: Theme, color: string): string =>\n (theme.palette as unknown as Record<string, { main?: string }>)[color]?.main ||\n theme.palette.primary.main;\n\nconst accentStyles = (theme: Theme, color: string): CSSObject => {\n const main = paletteColor(theme, color);\n\n return {\n color: main,\n '& .MuiListItemIcon-root': { color: main },\n '&:hover': { backgroundColor: alpha(main, 0.08) },\n };\n};\n\nconst StyledMenuItem = styled(MenuItem, {\n shouldForwardProp: (prop) => !['color', 'dangerous'].includes(prop as string),\n})<{ color?: string; dangerous?: boolean }>(({ theme, color, dangerous }) => ({\n borderRadius: theme.spacing(0.5),\n margin: theme.spacing(0.25, 0.5),\n transition: 'all 0.2s ease',\n\n '&:hover': {\n backgroundColor: alpha(dangerous ? theme.palette.error.main : theme.palette.primary.main, 0.08),\n },\n\n ...(dangerous && {\n color: theme.palette.error.main,\n '& .MuiListItemIcon-root': {\n color: theme.palette.error.main,\n },\n }),\n\n ...(color && color !== 'default' && !dangerous ? accentStyles(theme, color) : {}),\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: ContextMenuItem,\n handleItemClick: (item: ContextMenuItem) => void,\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 const hasIcon = !!item.icon;\n\n return (\n <StyledMenuItem\n key={item.id}\n disabled={item.disabled}\n onClick={() => handleItemClick(item)}\n color={item.color}\n dangerous={item.dangerous}\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 </StyledMenuItem>\n );\n};\n\ninterface TriggerOptions {\n disabled: boolean;\n triggerClassName?: string;\n triggerStyle?: React.CSSProperties;\n}\n\n// The trigger is whatever the caller passed as children. A single element is\n// cloned, so the handler and cursor land on the caller's own node; anything else\n// gets wrapped in a div that can carry them.\nconst buildTrigger = (\n children: React.ReactNode,\n onContextMenu: (event: React.MouseEvent) => void,\n { disabled, triggerClassName, triggerStyle }: TriggerOptions,\n) => {\n const cursor = disabled ? 'default' : 'context-menu';\n\n if (!isValidElement(children)) {\n return (\n <div\n onContextMenu={onContextMenu}\n className={triggerClassName}\n style={{ ...triggerStyle, cursor }}\n >\n {children}\n </div>\n );\n }\n\n const element = children as React.ReactElement<{\n onContextMenu?: (event: React.MouseEvent) => void;\n className?: string;\n style?: React.CSSProperties;\n }>;\n\n return cloneElement(element, {\n onContextMenu,\n className: [\n element.props.className,\n triggerClassName,\n !disabled ? 'context-menu-trigger' : '',\n ]\n .filter(Boolean)\n .join(' '),\n style: { ...element.props.style, ...triggerStyle, cursor },\n });\n};\n\nexport const ContextMenu = React.forwardRef<HTMLDivElement, ContextMenuProps>(\n (\n {\n variant = 'default',\n items,\n children,\n disabled = false,\n onOpen,\n onClose,\n size = 'md',\n triggerClassName,\n triggerStyle,\n ...menuProps\n },\n ref,\n ) => {\n const [contextMenu, setContextMenu] = useState<{\n mouseX: number;\n mouseY: number;\n } | null>(null);\n\n const handleContextMenu = (event: React.MouseEvent) => {\n if (disabled) return;\n\n event.preventDefault();\n setContextMenu(\n contextMenu === null\n ? {\n mouseX: event.clientX + 2,\n mouseY: event.clientY - 6,\n }\n : null,\n );\n onOpen?.(event);\n };\n\n const handleClose = () => {\n setContextMenu(null);\n onClose?.();\n };\n\n const handleItemClick = (item: ContextMenuItem) => {\n if (item.onClick) {\n item.onClick();\n }\n handleClose();\n };\n\n const triggerElement = buildTrigger(children, handleContextMenu, {\n disabled,\n triggerClassName,\n triggerStyle,\n });\n\n return (\n <>\n {triggerElement}\n <StyledMenu\n ref={ref}\n open={contextMenu !== null}\n onClose={handleClose}\n anchorReference=\"anchorPosition\"\n anchorPosition={\n contextMenu !== null ? { top: contextMenu.mouseY, left: contextMenu.mouseX } : undefined\n }\n customVariant={variant}\n size={size}\n {...menuProps}\n >\n {items.map((item) => renderMenuItem(item, handleItemClick, size))}\n </StyledMenu>\n </>\n );\n },\n);\n\nContextMenu.displayName = 'ContextMenu';\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/navigation/NavigationMenu/NavigationMenu.styles.ts"],"sourcesContent":["import { alpha, keyframes } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\n\nimport { EFFECT_GLOW } from '../../../tokens/ink.core';\n\nexport const slideIn = keyframes`\n from {\n opacity: 0;\n transform: translateX(-20px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n`;\n\nexport const pulseGlow = keyframes`\n 0% {\n box-shadow: 0 0 0 0 ${alpha(EFFECT_GLOW.muiBlue, 0.4)};\n }\n 70% {\n box-shadow: 0 0 0 10px ${alpha(EFFECT_GLOW.muiBlue, 0)};\n }\n 100% {\n box-shadow: 0 0 0 0 ${alpha(EFFECT_GLOW.muiBlue, 0)};\n }\n`;\n\nconst SIZE_STYLES: Record<string, (theme: Theme) => CSSObject> = {\n sm: (theme) => ({\n padding: theme.spacing(1, 1.5),\n fontSize: '0.875rem',\n '& .MuiListItemIcon-root': { transform: 'scale(0.85)' },\n }),\n lg: (theme) => ({\n padding: theme.spacing(2, 2.5),\n fontSize: '1.125rem',\n '& .MuiListItemIcon-root': { transform: 'scale(1.15)' },\n }),\n};\n\n// Each of these applies independently of the others, so they layer rather than\n// forming a lookup.\nconst horizontalStyles = (theme: Theme): CSSObject => ({\n borderRadius: theme.spacing(1.5),\n margin: theme.spacing(0, 0.5),\n background: alpha(theme.palette.background.paper, 0.6),\n backdropFilter: 'blur(8px)',\n border: `none`,\n // border: `1px solid ${alpha(theme.palette.divider, 0.1)}`,\n });\n\nconst collapsedStyles = (): CSSObject => ({\n justifyContent: 'center',\n minHeight: 56,\n '& .MuiListItemIcon-root': {\n margin: 0,\n },\n });\n\nconst activeStyles = (theme: Theme, _variant?: string): CSSObject => ({\n color: theme.palette.primary.main,\n cursor: 'default',\n\n '& .MuiListItemIcon-root': {\n color: theme.palette.primary.main,\n },\n\n '&::before': {\n opacity: 1,\n background: `linear-gradient(135deg, ${alpha(theme.palette.primary.main, 0.2)} 0%, ${alpha(theme.palette.primary.main, 0.05)} 100%)`,\n },\n\n '&:hover': {\n background: 'none',\n transform: 'none',\n boxShadow: 'none',\n\n '&::before': {\n opacity: 1,\n },\n\n '& .MuiListItemIcon-root': {\n transform: 'none',\n },\n\n '& .MuiListItemText-primary': {\n transform: 'none',\n },\n },\n });\n\n// Decorative sweep and glow layers behind the row.\nconst navDecorationStyles = (theme: Theme): CSSObject => ({\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n background: `linear-gradient(135deg, ${alpha(theme.palette.primary.main, 0)} 0%, ${alpha(theme.palette.primary.main, 0.08)} 100%)`,\n opacity: 0,\n transition: 'opacity 0.3s ease',\n },\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: '100%',\n height: '100%',\n background: `radial-gradient(circle, ${alpha(theme.palette.primary.main, 0.3)} 0%, transparent 70%)`,\n transform: 'translate(-50%, -50%) scale(0)',\n transition: 'transform 0.6s ease',\n borderRadius: '50%',\n },\n});\n\n// The minimal variant deliberately skips the lift-and-glow treatment.\nconst navInteractionStyles = (\n theme: Theme,\n minimal?: boolean,\n collapsed?: boolean,\n size?: string,\n): CSSObject => ({\n '&:hover': minimal\n ? {\n // Simple hover for minimal variant\n backgroundColor: alpha(theme.palette.action.hover, 0.08),\n color: theme.palette.primary.main,\n\n '& .MuiListItemIcon-root': {\n color: theme.palette.primary.main,\n },\n }\n : {\n // Fancy hover for non-minimal variant\n background: `linear-gradient(135deg, ${alpha(theme.palette.primary.main, 0.15)} 0%, ${alpha(theme.palette.primary.main, 0.08)} 100%)`,\n color: theme.palette.primary.main,\n boxShadow: `0 8px 24px ${alpha(theme.palette.primary.main, 0.15)}`,\n backgroundColor: alpha(theme.palette.primary.main, 0.04),\n\n '&::before': {\n opacity: 1,\n },\n\n '& .MuiListItemIcon-root': {\n color: theme.palette.primary.main,\n transform: collapsed\n ? 'scale(1.1)'\n : size === 'sm'\n ? 'scale(0.95) rotate(-5deg)'\n : size === 'lg'\n ? 'scale(1.25) rotate(-5deg)'\n : 'scale(1.1) rotate(-5deg)',\n transition: 'all 0.3s ease',\n },\n\n '& .MuiListItemText-primary': {\n transform: 'translateX(4px)',\n transition: 'transform 0.3s ease',\n },\n },\n '&:active': minimal\n ? {\n // Simple active state for minimal variant\n opacity: 0.7,\n }\n : {\n // Fancy active state for non-minimal variant\n transform: 'scale(0.98)',\n '&::after': {\n transform: 'translate(-50%, -50%) scale(2)',\n },\n },\n});\n\n// The nav row's own styling: base layout plus the variant, size, collapsed and\n// minimal treatments. Lifted out so the styled() callback is a single spread.\nexport const navItemButtonStyles = ({\n theme,\n variant,\n active,\n size,\n collapsed,\n minimal,\n}: {\n theme: Theme;\n variant?: string;\n active?: boolean;\n size?: string;\n collapsed?: boolean;\n minimal?: boolean;\n}): CSSObject => ({\n ...(size ? (SIZE_STYLES[size]?.(theme) ?? {}) : {}),\n ...(variant === 'horizontal' ? horizontalStyles(theme) : {}),\n ...(collapsed ? collapsedStyles() : {}),\n ...(active ? activeStyles(theme, variant) : {}),\n ...navDecorationStyles(theme),\n ...navInteractionStyles(theme, minimal, collapsed, size),\n borderRadius: theme.spacing(1.5),\n margin: theme.spacing(0.5),\n position: 'relative',\n overflow: 'hidden',\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n transformStyle: 'preserve-3d',\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n });\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/form/SearchPalette/SearchPalette.parts.tsx"],"sourcesContent":["import KeyboardReturnIcon from '@mui/icons-material/KeyboardReturn';\nimport SearchIcon from '@mui/icons-material/Search';\nimport Avatar from '@mui/material/Avatar/index.js';\nimport Box from '@mui/material/Box/index.js';\nimport Chip from '@mui/material/Chip/index.js';\nimport CircularProgress from '@mui/material/CircularProgress/index.js';\nimport InputBase from '@mui/material/InputBase/index.js';\nimport List from '@mui/material/List/index.js';\nimport ListItemButton from '@mui/material/ListItemButton/index.js';\nimport Paper from '@mui/material/Paper/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport React from 'react';\n\nimport type { SearchFilterChip, SearchResultLead } from './SearchPalette.types';\n\n/** Bold the first case-insensitive occurrence of `query` within `text`. */\nexport function highlight(text: string, query: string): React.ReactNode {\n const q = query.trim();\n const at = q ? text.toLowerCase().indexOf(q.toLowerCase()) : -1;\n if (at < 0) return text;\n return (\n <>\n {text.slice(0, at)}\n <Box component=\"span\" sx={{ fontWeight: 700 }}>\n {text.slice(at, at + q.length)}\n </Box>\n {text.slice(at + q.length)}\n </>\n );\n}\n\n/** The leading visual of a result row (image / avatar / icon). */\nexport function Lead({ lead }: { lead: SearchResultLead | undefined }): React.JSX.Element | null {\n if (!lead) return null;\n if (lead.kind === 'image') {\n return (\n <Box\n component=\"img\"\n src={lead.src}\n alt={lead.alt ?? ''}\n sx={{ width: 32, height: 32, borderRadius: 1, objectFit: 'cover', flexShrink: 0 }}\n />\n );\n }\n if (lead.kind === 'avatar') {\n return (\n <Avatar src={lead.src} alt={lead.alt ?? ''} sx={{ width: 32, height: 32, fontSize: '0.85rem' }}>\n {lead.fallback}\n </Avatar>\n );\n }\n return (\n <Box sx={{ display: 'flex', width: 32, justifyContent: 'center', flexShrink: 0, color: 'text.secondary' }}>\n {lead.node}\n </Box>\n );\n}\n\n/** Compute the ghost-completion remainder of the top result for `query`. */\nexport function ghostRemainder(topPrimary: string | undefined, query: string): string {\n if (!query || !topPrimary) return '';\n return topPrimary.toLowerCase().startsWith(query.toLowerCase()) && topPrimary.length > query.length\n ? topPrimary.slice(query.length)\n : '';\n}\n\n/** The search input row: leading icon, ghost overlay, the field, and a spinner. */\nexport function PaletteInput(props: {\n value: string;\n ghost: string;\n isLoading: boolean;\n autoFocus: boolean;\n placeholder: string;\n inputAriaLabel?: string;\n hasQuery: boolean;\n onChange: (v: string) => void;\n onKeyDown: (e: React.KeyboardEvent) => void;\n}): React.JSX.Element {\n return (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1.25, px: 2, py: 1.5 }}>\n <SearchIcon fontSize=\"small\" sx={{ color: 'text.secondary', flexShrink: 0 }} />\n <Box sx={{ position: 'relative', flex: 1, minWidth: 0 }}>\n {props.ghost && (\n <Box\n aria-hidden\n sx={{\n position: 'absolute',\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n pointerEvents: 'none',\n whiteSpace: 'pre',\n overflow: 'hidden',\n fontSize: '1rem',\n }}\n >\n <Box component=\"span\" sx={{ visibility: 'hidden' }}>\n {props.value}\n </Box>\n <Box component=\"span\" sx={{ color: 'text.secondary', opacity: 0.6 }}>\n {props.ghost}\n </Box>\n </Box>\n )}\n <InputBase\n fullWidth\n autoFocus={props.autoFocus}\n value={props.value}\n onChange={(e) => props.onChange(e.target.value)}\n onKeyDown={props.onKeyDown}\n placeholder={props.placeholder}\n inputProps={{\n role: 'combobox',\n 'aria-expanded': props.hasQuery,\n 'aria-label': props.inputAriaLabel,\n 'aria-autocomplete': 'list',\n }}\n sx={{ fontSize: '1rem' }}\n />\n </Box>\n {props.isLoading && <CircularProgress size={18} sx={{ flexShrink: 0 }} />}\n </Box>\n );\n}\n\n/** The toggleable filter-chip row. */\nexport function FilterChips(props: {\n filters: SearchFilterChip[];\n activeFilterIds: string[];\n onToggleFilter?: (id: string) => void;\n}): React.JSX.Element {\n return (\n <Box\n data-testid=\"search-palette-filters\"\n sx={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: 1,\n px: 2,\n pb: 1.5,\n borderBottom: (theme) => `1px solid ${theme.palette.divider}`,\n }}\n >\n {props.filters.map((chip) => {\n const active = props.activeFilterIds.includes(chip.id);\n return (\n <Chip\n key={chip.id}\n label={chip.label}\n icon={chip.icon as React.ReactElement | undefined}\n onClick={() => props.onToggleFilter?.(chip.id)}\n variant={active ? 'filled' : 'outlined'}\n color={active ? 'primary' : 'default'}\n size=\"small\"\n aria-pressed={active}\n data-testid={`search-palette-filter-${chip.id}`}\n sx={{ borderRadius: 2 }}\n />\n );\n })}\n </Box>\n );\n}\n\n/** One rich result row. */\nexport function ResultRow(props: {\n index: number;\n active: boolean;\n query: string;\n lead: SearchResultLead | undefined;\n primary: string;\n secondary: string | undefined;\n trailing: React.ReactNode | undefined;\n onSelect: () => void;\n onHover: () => void;\n}): React.JSX.Element {\n return (\n <ListItemButton\n role=\"option\"\n aria-selected={props.active}\n selected={props.active}\n onMouseEnter={props.onHover}\n onMouseDown={(e) => e.preventDefault()}\n onClick={props.onSelect}\n data-testid={`search-palette-result-${props.index}`}\n sx={{ gap: 1.25, px: 2, py: 1 }}\n >\n <Lead lead={props.lead} />\n <Box sx={{ minWidth: 0, flex: 1 }}>\n <Typography variant=\"body2\" noWrap sx={{ color: 'text.primary' }}>\n {highlight(props.primary, props.query)}\n </Typography>\n {props.secondary && (\n <Typography variant=\"caption\" noWrap sx={{ display: 'block', color: 'text.secondary' }}>\n {props.secondary}\n </Typography>\n )}\n </Box>\n {props.trailing != null && (\n <Box sx={{ flexShrink: 0, color: 'text.secondary', fontSize: '0.75rem' }}>{props.trailing}</Box>\n )}\n </ListItemButton>\n );\n}\n\n/** The \"see all results — Press ENTER\" footer row. */\nexport function SubmitAllFooter(props: {\n label: string;\n keyLabel: string;\n selected: boolean;\n onSelect: () => void;\n onHover: () => void;\n}): React.JSX.Element {\n return (\n <ListItemButton\n selected={props.selected}\n onMouseEnter={props.onHover}\n onMouseDown={(e) => e.preventDefault()}\n onClick={props.onSelect}\n data-testid=\"search-palette-submit-all\"\n sx={{ gap: 1.25, px: 2, py: 1, borderTop: (theme) => `1px solid ${theme.palette.divider}` }}\n >\n <SearchIcon fontSize=\"small\" sx={{ color: 'text.secondary', flexShrink: 0 }} />\n <Typography variant=\"body2\" sx={{ flex: 1, minWidth: 0 }} noWrap>\n {props.label}\n </Typography>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5, color: 'text.secondary' }}>\n <Typography variant=\"caption\">{props.keyLabel}</Typography>\n <KeyboardReturnIcon sx={{ fontSize: 14 }} />\n </Box>\n </ListItemButton>\n );\n}\n\n/** Resolved view state shared by the body renderer. */\nexport interface BodyView<T> {\n hasQuery: boolean;\n emptyQueryContent: React.ReactNode;\n visible: T[];\n isLoading: boolean;\n noResultsLabel: string;\n showFooter: boolean;\n footerIndex: number;\n activeIndex: number;\n trimmed: string;\n submitAllLabel: (q: string) => string;\n submitKeyLabel: string;\n getKey: (item: T) => string;\n getPrimary: (item: T) => string;\n getSecondary?: (item: T) => string | undefined;\n getLead?: (item: T) => SearchResultLead | undefined;\n getTrailing?: (item: T) => React.ReactNode | undefined;\n onSelect: (item: T) => void;\n onSubmitAll?: (query: string) => void;\n setActiveIndex: (i: number) => void;\n}\n\n/** The results list (or the empty-query slot / no-results message) + footer. */\nexport function PaletteBody<T>(view: BodyView<T>): React.JSX.Element | null {\n if (!view.hasQuery) {\n return view.emptyQueryContent ? (\n <Box data-testid=\"search-palette-empty-query\">{view.emptyQueryContent}</Box>\n ) : null;\n }\n const empty = view.visible.length === 0;\n return (\n <>\n {!empty && (\n <List dense disablePadding role=\"listbox\" data-testid=\"search-palette-results\">\n {view.visible.map((item, index) => (\n <ResultRow\n key={view.getKey(item)}\n index={index}\n active={index === view.activeIndex}\n query={view.trimmed}\n lead={view.getLead?.(item)}\n primary={view.getPrimary(item)}\n secondary={view.getSecondary?.(item)}\n trailing={view.getTrailing?.(item)}\n onSelect={() => view.onSelect(item)}\n onHover={() => view.setActiveIndex(index)}\n />\n ))}\n </List>\n )}\n {empty && !view.isLoading && (\n <Box sx={{ px: 2, py: 1.5 }} data-testid=\"search-palette-no-results\">\n <Typography variant=\"body2\" color=\"text.secondary\">\n {view.noResultsLabel}\n </Typography>\n </Box>\n )}\n {view.showFooter && (\n <SubmitAllFooter\n label={view.submitAllLabel(view.trimmed)}\n keyLabel={view.submitKeyLabel}\n selected={view.activeIndex === view.footerIndex}\n onSelect={() => view.onSubmitAll?.(view.trimmed)}\n onHover={() => view.setActiveIndex(view.footerIndex)}\n />\n )}\n </>\n );\n}\n\n/**\n * The palette card: a flex column capped at the height its container allows, so\n * the input and the filter chips stay pinned while only the results scroll and a\n * long result set can never push the palette past the bottom of the viewport.\n */\nexport const PALETTE_CARD_SX = {\n width: '100%',\n maxWidth: 640,\n maxHeight: '100%',\n borderRadius: 2,\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n} as const;\n\n/** The scrolling region of the card — the results, and nothing above them. */\nexport function PaletteScrollArea({ children }: { children: React.ReactNode }): React.JSX.Element {\n return (\n <Box sx={{ minHeight: 0, overflowY: 'auto', overscrollBehavior: 'contain' }}>{children}</Box>\n );\n}\n\nexport { Paper };\n\n/** Context for the keydown handler builder. */\nexport interface KeyCtx<T> {\n rowCount: number;\n activeIndex: number;\n footerIndex: number;\n visible: T[];\n hasQuery: boolean;\n ghost: string;\n top: T | undefined;\n trimmed: string;\n getPrimary: (item: T) => string;\n onChange: (v: string) => void;\n onSelect: (item: T) => void;\n onSubmitAll?: (query: string) => void;\n onClose?: () => void;\n setActiveIndex: React.Dispatch<React.SetStateAction<number>>;\n}\n\n/** Build the input's keydown handler (nav / select / ghost-accept / close). */\nexport function createKeyDownHandler<T>(ctx: KeyCtx<T>): (e: React.KeyboardEvent) => void {\n const move = (delta: number): void =>\n ctx.setActiveIndex((i) => Math.min(Math.max(i + delta, 0), Math.max(ctx.rowCount - 1, 0)));\n const commit = (): void => {\n if (!ctx.hasQuery) return;\n if (ctx.activeIndex === ctx.footerIndex) {\n ctx.onSubmitAll?.(ctx.trimmed);\n return;\n }\n const item = ctx.visible[ctx.activeIndex];\n if (item) ctx.onSelect(item);\n };\n // A lookup keeps the handler itself flat (low complexity). Tab/→ is special —\n // it must only swallow the event when there is a ghost to accept, otherwise\n // Tab keeps its native focus behavior.\n const actions: Record<string, (() => void) | undefined> = {\n ArrowDown: () => move(1),\n ArrowUp: () => move(-1),\n Enter: commit,\n Escape: () => ctx.onClose?.(),\n };\n return (e) => {\n if ((e.key === 'Tab' || e.key === 'ArrowRight') && ctx.ghost && ctx.top) {\n e.preventDefault();\n ctx.onChange(ctx.getPrimary(ctx.top));\n return;\n }\n const action = actions[e.key];\n if (!action) return;\n e.preventDefault();\n action();\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/SettingsLayout/SettingsPanel.tsx"],"sourcesContent":["\"use client\";\n\nimport ChevronLeftIcon from \"@mui/icons-material/ChevronLeft\";\nimport type { CSSObject, Theme } from \"@mui/material/styles/index.js\";\nimport Box from \"@mui/material/Box/index.js\";\nimport React from \"react\";\n\nimport {\n atLeastRail,\n displayAcrossRail,\n TOUCH_TARGET,\n} from \"./SettingsLayout.styles\";\nimport { SettingsSectionChips } from \"./SettingsSectionChips\";\nimport { SettingsSectionHeader } from \"./SettingsSectionHeader\";\nimport type {\n SettingsLayoutProps,\n SettingsNavItem,\n SettingsRailBreakpoint,\n} from \"./SettingsLayout.types\";\n\nexport interface SettingsPanelProps {\n /** True in `drilldown`, inside a section rather than at the index. */\n inSection: boolean;\n /** True in `drilldown`, at the area's index. */\n hideOnNarrow: boolean;\n breakpoint: SettingsRailBreakpoint;\n indexHref?: string;\n backLabel: string;\n /** The open section's own name — turns the back link into a compact header. */\n sectionTitle?: string;\n /** One line under that name. */\n sectionDescription?: string;\n ariaLabel: string;\n sectionChips?: SettingsNavItem[];\n activeItemId?: string;\n linkComponent?: SettingsLayoutProps[\"linkComponent\"];\n onSelectItem?: (id: string) => void;\n testIdPrefix: string;\n children: React.ReactNode;\n /** Scroll inside the panel rather than with the page. See `fillHeight`. */\n fillHeight?: boolean;\n}\n\n/** The way back to the area's index — narrow widths only. */\nfunction BackLink({\n href,\n label,\n breakpoint,\n linkComponent,\n testIdPrefix,\n}: {\n href: string;\n label: string;\n breakpoint: SettingsRailBreakpoint;\n linkComponent: NonNullable<SettingsLayoutProps[\"linkComponent\"]>;\n testIdPrefix: string;\n}): React.JSX.Element {\n return (\n <Box\n component={linkComponent}\n href={href}\n aria-label={label}\n data-testid={`${testIdPrefix}-back`}\n sx={(theme) => ({\n ...displayAcrossRail(theme, breakpoint, \"inline-flex\", \"none\"),\n alignItems: \"center\",\n gap: 0.5,\n minHeight: TOUCH_TARGET,\n pr: 1,\n textDecoration: \"none\",\n color: \"text.secondary\",\n font: \"inherit\",\n fontSize: \"0.875rem\",\n })}\n >\n <ChevronLeftIcon fontSize=\"small\" />\n {label}\n </Box>\n );\n}\n\n/**\n * Two shapes of the same control, chosen by whether the host named the section.\n *\n * With a `sectionTitle` the back folds into a compact header that also says\n * where you are; without one the original text link is kept, so no existing\n * consumer's header grows a title and pushes their first field down the page on\n * upgrade. Its own component so `SettingsPanel` keeps one branch rather than\n * three.\n */\nfunction PanelBack({\n href,\n backLabel,\n sectionTitle,\n sectionDescription,\n breakpoint,\n linkComponent,\n testIdPrefix,\n}: {\n href: string;\n backLabel: string;\n sectionTitle?: string;\n sectionDescription?: string;\n breakpoint: SettingsRailBreakpoint;\n linkComponent: NonNullable<SettingsLayoutProps['linkComponent']>;\n testIdPrefix: string;\n}): React.JSX.Element {\n if (sectionTitle === undefined) {\n return (\n <BackLink\n href={href}\n label={backLabel}\n breakpoint={breakpoint}\n linkComponent={linkComponent}\n testIdPrefix={testIdPrefix}\n />\n );\n }\n return (\n <SettingsSectionHeader\n href={href}\n backLabel={backLabel}\n title={sectionTitle}\n description={sectionDescription}\n breakpoint={breakpoint}\n linkComponent={linkComponent}\n testIdPrefix={testIdPrefix}\n />\n );\n}\n\n/**\n * The panel's own box, as ONE object per media query rather than two.\n *\n * Both the `display` rule and `fillHeight`'s belong at the same wide-shape\n * query, and spreading them as separate `{ [query]: … }` objects makes the\n * second REPLACE the first — so turning `fillHeight` on silently dropped the\n * `display: block` that `hideOnNarrow` puts there and left the panel\n * `display: none` at every width. That only shows at a drilldown INDEX, where\n * `hideOnNarrow` is true, which is why a section route looked fine.\n *\n * `overflowY` here is also what lets a `position: sticky` toolbar inside\n * `children` pin to the TOP OF THE PANEL — under the host's header — instead\n * of to a document that is not the scroller.\n */\nfunction panelSx(\n breakpoint: SettingsRailBreakpoint,\n hideOnNarrow: boolean,\n fillHeight: boolean,\n): (theme: Theme) => CSSObject {\n return (theme) => ({\n display: hideOnNarrow ? \"none\" : \"block\",\n flex: \"1 1 auto\",\n minWidth: 0,\n width: \"100%\",\n [atLeastRail(theme, breakpoint)]: {\n ...(hideOnNarrow ? { display: \"block\" } : {}),\n ...(fillHeight\n ? {\n height: \"100%\",\n minHeight: 0,\n overflowY: \"auto\",\n overscrollBehavior: \"contain\",\n }\n : {}),\n },\n });\n}\n\n/**\n * The central column: the open screen, and — in `drilldown`, inside a section —\n * the back link and sibling-section strip above it.\n *\n * At the index in `drilldown` this whole column is `display: none` below the\n * breakpoint and the rail becomes the page. Mounted either way: the panel and\n * the list are one tree with `display` between them, not two branches of a\n * render.\n */\nexport function SettingsPanel({\n inSection,\n hideOnNarrow,\n breakpoint,\n indexHref,\n backLabel,\n sectionTitle,\n sectionDescription,\n ariaLabel,\n sectionChips,\n activeItemId,\n linkComponent,\n onSelectItem,\n testIdPrefix,\n fillHeight = false,\n children,\n}: SettingsPanelProps): React.JSX.Element {\n const showBack =\n inSection && indexHref !== undefined && linkComponent !== undefined;\n const showChips =\n inSection && sectionChips !== undefined && sectionChips.length > 0;\n\n return (\n <Box\n data-testid={`${testIdPrefix}-panel`}\n sx={panelSx(breakpoint, hideOnNarrow, fillHeight)}\n >\n {showBack ? (\n <PanelBack\n href={indexHref}\n backLabel={backLabel}\n sectionTitle={sectionTitle}\n sectionDescription={sectionDescription}\n breakpoint={breakpoint}\n linkComponent={linkComponent}\n testIdPrefix={testIdPrefix}\n />\n ) : null}\n\n {showChips ? (\n <Box\n sx={(theme) => ({\n ...displayAcrossRail(theme, breakpoint, \"block\", \"none\"),\n mb: 1,\n minWidth: 0,\n })}\n >\n <SettingsSectionChips\n items={sectionChips}\n activeItemId={activeItemId}\n ariaLabel={ariaLabel}\n linkComponent={linkComponent}\n onSelectItem={onSelectItem}\n testIdPrefix={testIdPrefix}\n />\n </Box>\n ) : null}\n\n {children}\n </Box>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAEA,OAAO,qBAAqB;AAE5B,OAAO,SAAS;AAsDZ,SAiBE,KAjBF;AAdJ,SAAS,SAAS;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMsB;AACpB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,MACX;AAAA,MACA,cAAY;AAAA,MACZ,eAAa,GAAG,YAAY;AAAA,MAC5B,IAAI,CAAC,WAAW;AAAA,QACd,GAAG,kBAAkB,OAAO,YAAY,eAAe,MAAM;AAAA,QAC7D,YAAY;AAAA,QACZ,KAAK;AAAA,QACL,WAAW;AAAA,QACX,IAAI;AAAA,QACJ,gBAAgB;AAAA,QAChB,OAAO;AAAA,QACP,MAAM;AAAA,QACN,UAAU;AAAA,MACZ;AAAA,MAEA;AAAA,4BAAC,mBAAgB,UAAS,SAAQ;AAAA,QACjC;AAAA;AAAA;AAAA,EACH;AAEJ;AAWA,SAAS,UAAU;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAQsB;AACpB,MAAI,iBAAiB,QAAW;AAC9B,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF;AAAA,EAEJ;AACA,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP,aAAa;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA;AAAA,EACF;AAEJ;AAgBA,SAAS,QACP,YACA,cACA,YAC6B;AAC7B,SAAO,CAAC,WAAW;AAAA,IACjB,SAAS,eAAe,SAAS;AAAA,IACjC,MAAM;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,IACP,CAAC,YAAY,OAAO,UAAU,CAAC,GAAG;AAAA,MAChC,GAAI,eAAe,EAAE,SAAS,QAAQ,IAAI,CAAC;AAAA,MAC3C,GAAI,aACA;AAAA,QACE,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,WAAW;AAAA,QACX,oBAAoB;AAAA,MACtB,IACA,CAAC;AAAA,IACP;AAAA,EACF;AACF;AAWO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AACF,GAA0C;AACxC,QAAM,WACJ,aAAa,cAAc,UAAa,kBAAkB;AAC5D,QAAM,YACJ,aAAa,iBAAiB,UAAa,aAAa,SAAS;AAEnE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAa,GAAG,YAAY;AAAA,MAC5B,IAAI,QAAQ,YAAY,cAAc,UAAU;AAAA,MAE/C;AAAA,mBACC;AAAA,UAAC;AAAA;AAAA,YACC,MAAM;AAAA,YACN;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA;AAAA,QACF,IACE;AAAA,QAEH,YACC;AAAA,UAAC;AAAA;AAAA,YACC,IAAI,CAAC,WAAW;AAAA,cACd,GAAG,kBAAkB,OAAO,YAAY,SAAS,MAAM;AAAA,cACvD,IAAI;AAAA,cACJ,UAAU;AAAA,YACZ;AAAA,YAEA;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO;AAAA,gBACP;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA;AAAA,YACF;AAAA;AAAA,QACF,IACE;AAAA,QAEH;AAAA;AAAA;AAAA,EACH;AAEJ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/form/CategorySelect/CategoryPanelFoot.tsx"],"sourcesContent":["'use client';\n\nimport Box from '@mui/material/Box/index.js';\nimport Button from '@mui/material/Button/index.js';\n\nimport type { CategorySelectCopy } from '../../../copy';\nimport { footerSx, METRICS } from './CategorySelect.styles';\nimport { fieldRadiusPx } from '../../../tokens/field-radius';\n\nconst buttonSx = (sheet: boolean) =>\n ({\n height: sheet ? METRICS.sheetFooterButton : METRICS.footerButton,\n padding: '0 13px',\n borderRadius: fieldRadiusPx,\n fontSize: 12.5,\n fontWeight: 600,\n textTransform: 'none',\n minWidth: 0,\n }) as const;\n\ninterface MultiFootProps {\n count: number;\n /** False once the draft matches what is already applied — Apply becomes Close. */\n changed: boolean;\n sheet: boolean;\n onClear: () => void;\n onApply: () => void;\n dataTestId: string;\n copy: CategorySelectCopy;\n}\n\n/**\n * Multi-select footer: the running count, Clear, and the Apply that publishes\n * the draft. The primary button reads \"Fechar\" when nothing changed, so it never\n * promises an update it would not make.\n */\nexport function CategoryMultiFoot({\n count,\n changed,\n sheet,\n onClear,\n onApply,\n dataTestId,\n copy,\n}: MultiFootProps): React.JSX.Element {\n return (\n <Box sx={footerSx} data-testid={`${dataTestId}-footer`}>\n <Box component=\"span\" sx={{ fontSize: 12, color: 'text.secondary' }}>\n {copy.footer.selectedCount(count)}\n </Box>\n <Box sx={{ display: 'flex', gap: '6px' }}>\n <Button\n variant=\"outlined\"\n disabled={count === 0}\n sx={buttonSx(sheet)}\n onClick={onClear}\n data-testid={`${dataTestId}-clear`}\n >\n {copy.footer.clear}\n </Button>\n <Button\n variant=\"contained\"\n sx={buttonSx(sheet)}\n onClick={onApply}\n data-testid={`${dataTestId}-apply`}\n >\n {changed ? copy.footer.apply : copy.footer.close}\n </Button>\n </Box>\n </Box>\n );\n}\n\n/** Single-select footer: a hint and a way out. Picking a row commits directly. */\nexport function CategorySingleFoot({\n sheet,\n onCancel,\n dataTestId,\n copy,\n}: {\n sheet: boolean;\n onCancel: () => void;\n dataTestId: string;\n copy: CategorySelectCopy;\n}): React.JSX.Element {\n return (\n <Box sx={footerSx} data-testid={`${dataTestId}-footer`}>\n <Box component=\"span\" sx={{ fontSize: 12, color: 'text.secondary' }}>\n {copy.footer.singleHint}\n </Box>\n <Button\n variant=\"outlined\"\n sx={buttonSx(sheet)}\n onClick={onCancel}\n data-testid={`${dataTestId}-cancel`}\n >\n {copy.footer.cancel}\n </Button>\n </Box>\n );\n}\n"],"mappings":";;;;;;;;;AAEA,OAAO,SAAS;AAChB,OAAO,YAAY;AA4Cb,cAGA,YAHA;AAtCN,IAAM,WAAW,CAAC,WACf;AAAA,EACC,QAAQ,QAAQ,QAAQ,oBAAoB,QAAQ;AAAA,EACpD,SAAS;AAAA,EACT,cAAc;AAAA,EACd,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,UAAU;AACZ;AAkBK,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAsC;AACpC,SACE,qBAAC,OAAI,IAAI,UAAU,eAAa,GAAG,UAAU,WAC3C;AAAA,wBAAC,OAAI,WAAU,QAAO,IAAI,EAAE,UAAU,IAAI,OAAO,iBAAiB,GAC/D,eAAK,OAAO,cAAc,KAAK,GAClC;AAAA,IACA,qBAAC,OAAI,IAAI,EAAE,SAAS,QAAQ,KAAK,MAAM,GACrC;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,UAAU,UAAU;AAAA,UACpB,IAAI,SAAS,KAAK;AAAA,UAClB,SAAS;AAAA,UACT,eAAa,GAAG,UAAU;AAAA,UAEzB,eAAK,OAAO;AAAA;AAAA,MACf;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,IAAI,SAAS,KAAK;AAAA,UAClB,SAAS;AAAA,UACT,eAAa,GAAG,UAAU;AAAA,UAEzB,oBAAU,KAAK,OAAO,QAAQ,KAAK,OAAO;AAAA;AAAA,MAC7C;AAAA,OACF;AAAA,KACF;AAEJ;AAGO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKsB;AACpB,SACE,qBAAC,OAAI,IAAI,UAAU,eAAa,GAAG,UAAU,WAC3C;AAAA,wBAAC,OAAI,WAAU,QAAO,IAAI,EAAE,UAAU,IAAI,OAAO,iBAAiB,GAC/D,eAAK,OAAO,YACf;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,SAAQ;AAAA,QACR,IAAI,SAAS,KAAK;AAAA,QAClB,SAAS;AAAA,QACT,eAAa,GAAG,UAAU;AAAA,QAEzB,eAAK,OAAO;AAAA;AAAA,IACf;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/form/Button/Button.styles.ts"],"sourcesContent":["import { alpha, darken, keyframes, lighten } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\n\nimport { BUTTON_SIZES, ICON_ONLY_PADDING as ICON_ONLY_PADDING_PX } from './Button.metrics';\nimport { asFieldSize, fieldBorder, fieldHeight } from '../../../tokens/field-height';\nimport { absoluteInk, controlNeutral } from '../../../tokens/ink';\nimport { inkOver, px } from '../../../tokens/theme';\n\n// Define pulse animation globally\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 15px currentColor;\n opacity: 0;\n }\n 100% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 0;\n }\n`;\n\ninterface ColorPalette {\n main: string;\n dark: string;\n light: string;\n contrastText: string;\n}\n\nconst shade = (\n palette: ColorPalette | undefined,\n key: 'dark' | 'light',\n fallback: ColorPalette,\n): string => palette?.[key] || palette?.main || fallback[key];\n\n/** `neutral` has no MUI palette entry, so its four shades come from grey. */\nconst neutralPalette = (theme: Theme): ColorPalette => controlNeutral(theme);\n\nexport const getColorFromTheme = (theme: Theme, color: string): ColorPalette => {\n if (color === 'neutral') return neutralPalette(theme);\n\n const colorMap: Record<string, ColorPalette> = {\n primary: theme.palette.primary as ColorPalette,\n secondary: theme.palette.secondary as ColorPalette,\n success: theme.palette.success as ColorPalette,\n warning: theme.palette.warning as ColorPalette,\n info: theme.palette.info as ColorPalette,\n danger: theme.palette.error as ColorPalette,\n };\n\n const fallback = theme.palette.primary as ColorPalette;\n const palette = colorMap[color] || fallback;\n\n // Ensure palette has required properties\n return {\n main: palette?.main || fallback.main,\n dark: shade(palette, 'dark', fallback),\n light: shade(palette, 'light', fallback),\n contrastText: palette?.contrastText || absoluteInk(theme).white,\n };\n};\n\n// Derived from `Button.metrics.ts`, which the native `Button` reads too — one\n// table, so a size cannot differ between the renderers.\nconst SIZE_MAP: Record<string, CSSObject> = Object.fromEntries(\n Object.entries(BUTTON_SIZES).map(([size, m]) => [\n size,\n { padding: `${m.paddingVertical}px ${m.paddingHorizontal}px`, fontSize: px(m.fontSize) },\n ]),\n);\n\n/** What an unrecognised size falls back to, named so indexing can never be undefined. */\nconst DEFAULT_SIZE: CSSObject = SIZE_MAP.md as CSSObject;\n\n/**\n * A BUTTON THAT IS ONLY AN ICON IS SQUARE.\n *\n * MUI puts a 64px `min-width` on every button, which is right for a label and\n * wrong for a glyph: three dots in a 64px slab reads as a button that failed to\n * load its text, and at the end of a dense row it claims space the row needs.\n * The horizontal padding goes too — a square of padding round a square glyph —\n * and so does the gap MUI reserves beside a start/end icon, since there is\n * nothing on the other side of it.\n *\n * Derived, not declared: a button with an `icon` and no children can only be an\n * icon button, so no consumer has to opt in and none can forget to.\n */\nconst ICON_ONLY_PADDING: Record<string, string> = Object.fromEntries(\n Object.entries(ICON_ONLY_PADDING_PX).map(([size, padding]) => [size, `${padding}px`]),\n);\n\nconst iconOnlySize = (size: string): CSSObject => ({\n minWidth: 0,\n padding: ICON_ONLY_PADDING[size] ?? ICON_ONLY_PADDING.md,\n fontSize: SIZE_MAP[size]?.fontSize ?? DEFAULT_SIZE.fontSize,\n '& .MuiButton-startIcon, & .MuiButton-endIcon': { margin: 0 },\n});\n\n/**\n * The size styles for a button, square when it carries nothing but an icon.\n *\n * The HEIGHT is the theme's field height for the size (`tokens/field-height`),\n * so a button stands level with the field beside it: the vertical padding goes\n * and the label is centred in a box at least that tall — a label that wraps\n * still grows it. An icon-only button is that height on every side.\n */\nexport const buttonSize =\n (size: string, iconOnly: boolean) =>\n (theme: Theme): CSSObject => {\n const height = fieldHeight(theme, asFieldSize(size));\n if (iconOnly) return { ...iconOnlySize(size), padding: 0, minWidth: height, minHeight: height };\n return { ...(SIZE_MAP[size] ?? DEFAULT_SIZE), minHeight: height, paddingTop: 0, paddingBottom: 0 };\n };\n\n/**\n * MUI centres icons with a negative margin that fights our own padding, so the\n * flex alignment is restated here rather than fought with `!important`.\n */\nexport const iconAlignmentStyles = (theme: Theme): CSSObject => ({\n '& .MuiButton-startIcon, & .MuiButton-endIcon': {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n margin: 0,\n verticalAlign: 'middle',\n '& > *': {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n lineHeight: 0,\n },\n },\n '& .MuiButton-startIcon': {\n marginRight: theme.spacing(0.5),\n },\n '& .MuiButton-endIcon': {\n marginLeft: theme.spacing(0.5),\n },\n});\n\n// Gradients run between two related hues; the named colours pick a specific pair,\n// anything else runs from its own main to its own dark.\nconst GRADIENT_PAIRS: Record<string, (theme: Theme) => [string, string]> = {\n primary: (theme) => [theme.palette.primary.main, theme.palette.secondary.main],\n secondary: (theme) => [theme.palette.secondary.main, theme.palette.primary.main],\n success: (theme) => [theme.palette.success.light, theme.palette.success.dark],\n warning: (theme) => [theme.palette.warning.light, theme.palette.warning.dark],\n danger: (theme) => [theme.palette.error.light, theme.palette.error.dark],\n};\n\nconst gradientStops = (theme: Theme, color: string, palette: ColorPalette): [string, string] =>\n GRADIENT_PAIRS[color]?.(theme) ?? [palette.main, palette.dark];\n\nconst gradientFor = (theme: Theme, color: string, palette: ColorPalette): string => {\n const [from, to] = gradientStops(theme, color, palette);\n return `linear-gradient(135deg, ${from} 0%, ${to} 100%)`;\n};\n\n/**\n * The label colour for `gradient`, which used to be `#fff` outright (FUT-1924).\n *\n * Every other filled variant reads `palette.contrastText`, derived from `main`\n * — so a white-labelled host handing the library a pale brand got dark ink on\n * its solid buttons and white ink on its gradient one. That store had exactly\n * one button in the library whose label it could not read, in LIGHT mode,\n * before dark mode existed anywhere.\n *\n * `contrastText` is still not the right thing to read, and that is why this\n * goes through {@link inkOver}: a gradient is TWO fills, the named pairs run\n * light-to-dark, and an ink chosen against `main` says nothing about the end\n * the gradient actually reaches. Both stops go in, and the ink has to survive\n * the worse of them.\n */\nconst gradientInk = (theme: Theme, color: string, palette: ColorPalette): string =>\n inkOver(gradientStops(theme, color, palette), palette.contrastText || absoluteInk(theme).white);\n\n/**\n * The label colour for the two variants that paint no background of their own.\n *\n * `ghost` and `text` used `palette.main` directly, which is the same mistake\n * the Alert made with its body text: a palette's `main` is chosen to sit UNDER\n * white — it is the fill of a solid button — and it is not chosen to be read AS\n * text. `#6366F1`, the default primary, is 3.6:1 on white and worse on any\n * tinted surface, so a \"Cancelar\" or an \"Agora não\" placed on a coloured panel\n * turned into a smudge. That is precisely where these two variants belong: they\n * exist to be the quiet option NEXT to a solid one, so they are the buttons\n * most likely to be sitting on something other than plain paper.\n *\n * One step darker (lighter, on a dark theme) keeps the hue the caller asked for\n * and buys the contrast back. `main` still drives the hover wash and every\n * bordered variant, so nothing that was already legible moves.\n */\nconst quietInk = (theme: Theme, palette: ColorPalette): string =>\n theme.palette.mode === 'dark' ? lighten(palette.main, 0.35) : darken(palette.main, 0.3);\n\nconst VARIANT_STYLES: Record<\n string,\n (theme: Theme, palette: ColorPalette, color: string) => CSSObject\n> = {\n solid: (theme, palette) => ({\n backgroundColor: palette.main,\n color: palette.contrastText || absoluteInk(theme).white,\n '&:hover': {\n backgroundColor: palette.dark,\n transform: 'translateY(-2px)',\n boxShadow: theme.shadows[8],\n },\n }),\n // A NEUTRAL outline is a field-row control (\"Mais\", \"Exibir\"), so it rests on\n // the one field border; a coloured outline keeps its colour, which is the\n // point of asking for one.\n outline: (theme, palette, color) => ({\n backgroundColor: 'transparent',\n color: palette.main,\n border: color === 'neutral' ? fieldBorder(theme) : `1px solid ${palette.main}`,\n '&:hover': {\n backgroundColor: alpha(palette.main, 0.1),\n borderColor: palette.dark,\n },\n }),\n ghost: (theme, palette) => ({\n backgroundColor: 'transparent',\n color: quietInk(theme, palette),\n '&:hover': {\n backgroundColor: alpha(palette.main, 0.1),\n },\n }),\n text: (theme, palette) => ({\n backgroundColor: 'transparent',\n color: quietInk(theme, palette),\n border: `none`,\n '&:hover': {\n backgroundColor: alpha(palette.main, 0.1),\n },\n '&.active': {\n backgroundColor: alpha(palette.main, 0.1),\n color: quietInk(theme, palette),\n },\n }),\n glass: (theme, palette) => ({\n backgroundColor: alpha(theme.palette.background.paper, 0.1),\n backdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n color: palette.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.background.paper, 0.2),\n transform: 'translateY(-2px)',\n },\n }),\n gradient: (theme, palette, color) => ({\n background: gradientFor(theme, color, palette),\n color: gradientInk(theme, color, palette),\n '&:hover': {\n filter: 'brightness(1.1)',\n transform: 'translateY(-2px)',\n boxShadow: theme.shadows[12],\n },\n }),\n};\n\nexport const buttonVariantStyles = (\n theme: Theme,\n variant: string | undefined,\n palette: ColorPalette,\n color: string,\n): CSSObject => VARIANT_STYLES[variant ?? '']?.(theme, palette, color) ?? {};\n\n// Glow effect - applied with !important to override variant shadows\nconst glowStyles = (palette: ColorPalette): CSSObject => ({\n boxShadow: `0 0 20px 5px ${alpha(palette.main, 0.6)}, 0 0 40px 10px ${alpha(palette.main, 0.3)} !important`,\n filter: 'brightness(1.05)',\n '&:hover': {\n boxShadow: `0 0 25px 8px ${alpha(palette.main, 0.7)}, 0 0 50px 15px ${alpha(palette.main, 0.4)} !important`,\n filter: 'brightness(1.1)',\n transform: 'translateY(-2px) scale(1.02)',\n },\n});\n\n// Pulse animation using pseudo-element\nconst pulseStyles = (palette: ColorPalette): CSSObject => ({\n position: 'relative',\n overflow: 'visible',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: '100%',\n height: '100%',\n borderRadius: 'inherit',\n transform: 'translate(-50%, -50%)',\n backgroundColor: palette.main,\n opacity: 0.3,\n animation: `${pulseAnimation} 2s infinite`,\n pointerEvents: 'none',\n zIndex: -1,\n },\n});\n\n/**\n * glow and pulse are independent flags. The three combinations used to be spelled\n * out one by one, but each is just the union of whichever flags are set.\n */\nexport const buttonEmphasisStyles = (\n palette: ColorPalette,\n glow?: boolean,\n pulse?: boolean,\n): CSSObject => ({\n ...(glow ? glowStyles(palette) : {}),\n ...(pulse ? pulseStyles(palette) : {}),\n});\n"],"mappings":"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","names":["ICON_ONLY_PADDING"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/ContentToolbar/ViewSelector.tsx"],"sourcesContent":["'use client';\n\nimport CheckIcon from '@mui/icons-material/Check';\nimport ChevronDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport GridIcon from '@mui/icons-material/GridViewOutlined';\nimport ListIcon from '@mui/icons-material/FormatListBulletedRounded';\nimport Box from '@mui/material/Box/index.js';\nimport Button from '@mui/material/Button/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 Slider from '@mui/material/Slider/index.js';\n// `SvgIconComponent` is declared inline in @mui/icons-material's barrel and has\n// no module of its own, so the deep-import equivalent is its own definition:\n// `type SvgIconComponent = typeof SvgIcon`.\nimport type SvgIcon from '@mui/material/SvgIcon/index.js';\nimport React, { useState } from 'react';\n\nimport type { ViewMode, ViewSelectorProps } from './ContentToolbar.types';\nimport { fieldRadiusPx } from '../../../tokens/field-radius';\nimport { fieldHeight } from '../../../tokens/field-height';\n\nconst VIEW_OPTIONS: { value: ViewMode; label: string; icon: typeof SvgIcon }[] = [\n { value: 'grid', label: 'Grid View', icon: GridIcon },\n { value: 'list', label: 'List View', icon: ListIcon },\n];\n\n/**\n * View selector: a grid/list dropdown plus a card-size zoom slider (grid mode\n * only). Faithful MUI port of the reference toolbar's view control.\n */\nexport function ViewSelector({\n viewMode,\n onViewModeChange,\n zoom,\n onZoomChange,\n cardSizeLabel,\n}: ViewSelectorProps): React.JSX.Element {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const open = Boolean(anchorEl);\n const activeOption = VIEW_OPTIONS.find((option) => option.value === viewMode) ?? VIEW_OPTIONS[0]!;\n const ActiveIcon = activeOption.icon;\n\n return (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1.5 }}>\n {viewMode === 'grid' && (\n <Box sx={{ width: 96, display: 'flex', alignItems: 'center' }}>\n <Slider\n data-testid=\"resize-card-slider\"\n aria-label={cardSizeLabel}\n value={zoom[0] ?? 0}\n onChange={(_, value) => onZoomChange([value as number])}\n min={0}\n max={100}\n step={1}\n size=\"small\"\n />\n </Box>\n )}\n\n <Button\n data-testid=\"view-mode-btn\"\n variant=\"text\"\n size=\"small\"\n color=\"inherit\"\n aria-label={activeOption.label}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n onClick={(event) => setAnchorEl(event.currentTarget)}\n sx={{ minWidth: 0, height: fieldHeight, px: 1, gap: 1, borderRadius: fieldRadiusPx, color: 'text.secondary' }}\n >\n <ActiveIcon sx={{ fontSize: 16 }} />\n <ChevronDownIcon sx={{ fontSize: 14 }} />\n </Button>\n <Menu\n anchorEl={anchorEl}\n open={open}\n onClose={() => setAnchorEl(null)}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n slotProps={{ paper: { sx: { minWidth: 180 } } }}\n >\n {VIEW_OPTIONS.map((option) => {\n const OptionIcon = option.icon;\n const selected = viewMode === option.value;\n return (\n <MenuItem\n key={option.value}\n data-testid={`view-mode-${option.value}`}\n onClick={() => {\n onViewModeChange(option.value);\n setAnchorEl(null);\n }}\n sx={{ gap: 1.5 }}\n >\n <ListItemText>{option.label}</ListItemText>\n <OptionIcon sx={{ fontSize: 16, color: 'text.secondary' }} />\n <ListItemIcon sx={{ minWidth: 'auto !important' }}>\n <CheckIcon sx={{ fontSize: 16, color: selected ? 'text.primary' : 'transparent' }} />\n </ListItemIcon>\n </MenuItem>\n );\n })}\n </Menu>\n </Box>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/navigation/CommandPalette/CommandPalette.tsx"],"sourcesContent":["import CloseIcon from '@mui/icons-material/Close';\nimport EnterIcon from '@mui/icons-material/KeyboardReturn';\nimport SearchIcon from '@mui/icons-material/Search';\nimport Box from '@mui/material/Box/index.js';\nimport Dialog from '@mui/material/Dialog/index.js';\nimport DialogContent from '@mui/material/DialogContent/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport InputBase from '@mui/material/InputBase/index.js';\nimport Paper from '@mui/material/Paper/index.js';\nimport Slide from '@mui/material/Slide/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, styled, useTheme } from '@mui/material/styles/index.js';\nimport type { TransitionProps } from '@mui/material/transitions/index.js';\nimport type { FC} from 'react';\nimport React, { } from 'react';\n\nimport { useCommandPalette } from './CommandPalette.hooks';\nimport { PaletteResults } from './CommandPaletteResults';\nimport { ShortcutChip } from './ShortcutChip';\nimport type { CommandPaletteProps } from './CommandPalette.types';\nimport type { CommandPaletteCopy } from '../../../copy';\nimport { scrim } from '../../../tokens/ink';\n\n// Styled components\nconst StyledDialog = styled(Dialog)(({ theme }) => ({\n '& .MuiBackdrop-root': {\n backgroundColor: scrim(theme, 0.6),\n backdropFilter: 'blur(4px)' },\n '& .MuiDialog-paper': {\n position: 'fixed',\n top: '20%',\n margin: 0,\n maxHeight: 'none',\n background: 'transparent',\n boxShadow: 'none',\n overflow: 'visible' } }));\n\nconst PaletteContainer = styled(Paper)(({ theme }) => ({\n width: '100%',\n maxWidth: 640,\n background: `linear-gradient(135deg, ${alpha(theme.palette.background.paper, 0.98)} 0%, ${alpha(theme.palette.background.paper, 0.95)} 100%)`,\n backdropFilter: 'blur(20px)',\n WebkitBackdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.18)}`,\n borderRadius: theme.shape.borderRadius * 2,\n overflow: 'hidden',\n boxShadow: theme.shadows[24] }));\n\nconst SearchContainer = styled(Box)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(2),\n borderBottom: `1px solid ${alpha(theme.palette.divider, 0.12)}`,\n background: alpha(theme.palette.background.default, 0.4) }));\n\nconst SearchInput = styled(InputBase)(({ theme }) => ({\n flex: 1,\n fontSize: '1.125rem',\n fontWeight: 400,\n '& input': {\n padding: theme.spacing(0, 1),\n '&::placeholder': {\n color: theme.palette.text.secondary,\n opacity: 0.8 } } }));\n\nconst Transition = React.forwardRef<unknown, TransitionProps & { children: React.ReactElement }>(\n function Transition(props, ref) {\n return <Slide direction=\"down\" ref={ref} {...props} />;\n },\n);\n\n// Main component\nconst PaletteSearch: React.FC<{\n inputRef: React.Ref<HTMLInputElement>;\n placeholder?: string;\n value: string;\n dataTestId?: string;\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n onClose: () => void;\n}> = ({ inputRef, placeholder, value, dataTestId, onChange, onClose }) => (\n <SearchContainer>\n <SearchIcon sx={{ color: 'text.secondary', mr: 1 }} />\n <SearchInput\n ref={inputRef}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck=\"false\"\n inputProps={{ 'data-testid': `${dataTestId}-input` }}\n />\n <IconButton size=\"small\" onClick={onClose} sx={{ ml: 1 }}>\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n </SearchContainer>\n);\n\nconst PaletteFooter: React.FC<{ commandCount: number; copy: CommandPaletteCopy }> = ({\n commandCount,\n copy,\n}) => {\n const theme = useTheme();\n\n return (\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: 1,\n borderTop: `1px solid ${alpha(theme.palette.divider, 0.12)}`,\n background: alpha(theme.palette.background.default, 0.4) }}\n >\n <Box sx={{ display: 'flex', gap: 1 }}>\n <ShortcutChip\n icon={<EnterIcon sx={{ fontSize: 12 }} />}\n label={copy.execute}\n size=\"small\"\n />\n <ShortcutChip label={copy.navigate} size=\"small\" />\n <ShortcutChip label={copy.close} size=\"small\" />\n </Box>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {commandCount} commands\n </Typography>\n </Box>\n );\n};\n\nexport const CommandPalette: FC<CommandPaletteProps> = ({\n copy,\n open,\n onClose,\n commands,\n placeholder = 'Type a command or search...',\n width = '640px',\n maxHeight = '400px',\n showRecent = true,\n recentCommands = [],\n onCommandExecute,\n dataTestId = 'command-palette' }) => {\n const {\n searchQuery,\n setSearchQuery,\n selectedIndex,\n setSelectedIndex,\n searchInputRef,\n listRef,\n filteredCommands,\n groupedCommands,\n executeCommand,\n recentCommandIds } = useCommandPalette({\n open,\n commands,\n showRecent,\n recentCommands,\n onCommandExecute,\n onClose });\n\n const handleSearchChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setSearchQuery(event.target.value);\n };\n\n return (\n <StyledDialog\n open={open}\n onClose={onClose}\n TransitionComponent={Transition}\n maxWidth={false}\n fullWidth\n data-testid={dataTestId}\n >\n <DialogContent sx={{ overflow: 'visible', p: 0 }}>\n <PaletteContainer elevation={24} sx={{ width, maxHeight }}>\n <PaletteSearch\n inputRef={searchInputRef}\n placeholder={placeholder}\n value={searchQuery}\n dataTestId={dataTestId}\n onChange={handleSearchChange}\n onClose={onClose}\n />\n\n <PaletteResults\n copy={copy}\n listRef={listRef}\n dataTestId={dataTestId}\n searchQuery={searchQuery}\n showRecent={showRecent}\n commands={commands}\n recentCommandIds={recentCommandIds}\n filteredCommands={filteredCommands}\n groupedCommands={groupedCommands}\n selectedIndex={selectedIndex}\n onSelect={setSelectedIndex}\n onExecute={executeCommand}\n />\n\n <PaletteFooter copy={copy} commandCount={filteredCommands.length} />\n </PaletteContainer>\n </DialogContent>\n </StyledDialog>\n );\n};\n\n// Export default\nexport default CommandPalette;\n"],"mappings":"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","names":["Transition"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/Carousel/Carousel.styles.ts"],"sourcesContent":["import { alpha } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\n\nimport type { CarouselProps } from './Carousel.types';\nimport { accentFor } from '../../../tokens/scales';\n\ntype Variant = NonNullable<CarouselProps['variant']>;\ntype Size = NonNullable<CarouselProps['size']>;\ntype Color = NonNullable<CarouselProps['color']>;\n\nconst SIZES: Record<Size, { height: number; fontSize: string }> = {\n xs: { height: 200, fontSize: '0.75rem' },\n sm: { height: 300, fontSize: '0.875rem' },\n md: { height: 400, fontSize: '1rem' },\n lg: { height: 500, fontSize: '1.125rem' },\n xl: { height: 600, fontSize: '1.25rem' },\n};\n\nconst sizeStyles = (size: Size) => SIZES[size] ?? SIZES.md;\n\ninterface ContainerStyleInput {\n theme: Theme;\n variant: Variant;\n size: Size;\n color: Color;\n height: number | string;\n width: number | string;\n glow: boolean;\n pulse: boolean;\n glass: boolean;\n gradient: boolean;\n}\n\n/**\n * Each variant's own additions to the shared frame. The old switch re-spread the\n * same base, glow and pulse objects in all six arms before adding these; only\n * these differ, so the shared prefix is applied once by `containerStyles`.\n */\nconst SURFACES: Record<Variant, (input: ContainerStyleInput) => CSSObject> = {\n glass: ({ theme, color, glass }) => ({\n backgroundColor: alpha(theme.palette.background.paper, glass ? 0.1 : 0.9),\n backdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(accentFor(theme, color).main, 0.2)}`,\n }),\n\n gradient: ({ theme, color, gradient }) => ({\n background: gradient\n ? `linear-gradient(135deg, ${alpha(accentFor(theme, color).light, 0.1)}, ${alpha(accentFor(theme, color).dark, 0.1)})`\n : 'transparent',\n }),\n\n elevated: ({ theme }) => ({ boxShadow: theme.shadows[8] }),\n\n minimal: () => ({ border: 'none', boxShadow: 'none' }),\n\n cards: ({ theme }) => ({ padding: theme.spacing(2) }),\n\n default: () => ({}),\n};\n\nexport const containerStyles = (input: ContainerStyleInput): CSSObject => {\n const { theme, variant, size, color, height, width, glow, pulse } = input;\n const accent = accentFor(theme, color).main;\n\n return {\n position: 'relative' as const,\n width,\n // A numeric height is taken literally; anything else falls back to the size\n // preset, since a percentage cannot resolve against an unsized parent here.\n height: typeof height === 'number' ? height : sizeStyles(size).height,\n overflow: 'hidden',\n borderRadius: theme.spacing(1),\n transition: theme.transitions.create(['all'], {\n duration: theme.transitions.duration.standard,\n }),\n ...(glow && { boxShadow: `0 0 30px ${alpha(accent, 0.4)}` }),\n ...(pulse && {\n animation: 'pulse 2s infinite',\n '@keyframes pulse': {\n '0%': { boxShadow: `0 0 0 0 ${alpha(accent, 0.4)}` },\n '70%': { boxShadow: `0 0 0 20px ${alpha(accent, 0)}` },\n '100%': { boxShadow: `0 0 0 0 ${alpha(accent, 0)}` },\n },\n }),\n ...(SURFACES[variant] ?? SURFACES.default)(input),\n };\n};\n"],"mappings":";;;;;AAAA,SAAS,aAAa;AAUtB,IAAM,QAA4D;AAAA,EAChE,IAAI,EAAE,QAAQ,KAAK,UAAU,UAAU;AAAA,EACvC,IAAI,EAAE,QAAQ,KAAK,UAAU,WAAW;AAAA,EACxC,IAAI,EAAE,QAAQ,KAAK,UAAU,OAAO;AAAA,EACpC,IAAI,EAAE,QAAQ,KAAK,UAAU,WAAW;AAAA,EACxC,IAAI,EAAE,QAAQ,KAAK,UAAU,UAAU;AACzC;AAEA,IAAM,aAAa,CAAC,SAAe,MAAM,IAAI,KAAK,MAAM;AAoBxD,IAAM,WAAuE;AAAA,EAC3E,OAAO,CAAC,EAAE,OAAO,OAAO,MAAM,OAAO;AAAA,IACnC,iBAAiB,MAAM,MAAM,QAAQ,WAAW,OAAO,QAAQ,MAAM,GAAG;AAAA,IACxE,gBAAgB;AAAA,IAChB,QAAQ,aAAa,MAAM,UAAU,OAAO,KAAK,EAAE,MAAM,GAAG,CAAC;AAAA,EAC/D;AAAA,EAEA,UAAU,CAAC,EAAE,OAAO,OAAO,SAAS,OAAO;AAAA,IACzC,YAAY,WACR,2BAA2B,MAAM,UAAU,OAAO,KAAK,EAAE,OAAO,GAAG,CAAC,KAAK,MAAM,UAAU,OAAO,KAAK,EAAE,MAAM,GAAG,CAAC,MACjH;AAAA,EACN;AAAA,EAEA,UAAU,CAAC,EAAE,MAAM,OAAO,EAAE,WAAW,MAAM,QAAQ,CAAC,EAAE;AAAA,EAExD,SAAS,OAAO,EAAE,QAAQ,QAAQ,WAAW,OAAO;AAAA,EAEpD,OAAO,CAAC,EAAE,MAAM,OAAO,EAAE,SAAS,MAAM,QAAQ,CAAC,EAAE;AAAA,EAEnD,SAAS,OAAO,CAAC;AACnB;AAEO,IAAM,kBAAkB,CAAC,UAA0C;AACxE,QAAM,EAAE,OAAO,SAAS,MAAM,OAAO,QAAQ,OAAO,MAAM,MAAM,IAAI;AACpE,QAAM,SAAS,UAAU,OAAO,KAAK,EAAE;AAEvC,SAAO;AAAA,IACL,UAAU;AAAA,IACV;AAAA;AAAA;AAAA,IAGA,QAAQ,OAAO,WAAW,WAAW,SAAS,WAAW,IAAI,EAAE;AAAA,IAC/D,UAAU;AAAA,IACV,cAAc,MAAM,QAAQ,CAAC;AAAA,IAC7B,YAAY,MAAM,YAAY,OAAO,CAAC,KAAK,GAAG;AAAA,MAC5C,UAAU,MAAM,YAAY,SAAS;AAAA,IACvC,CAAC;AAAA,IACD,GAAI,QAAQ,EAAE,WAAW,YAAY,MAAM,QAAQ,GAAG,CAAC,GAAG;AAAA,IAC1D,GAAI,SAAS;AAAA,MACX,WAAW;AAAA,MACX,oBAAoB;AAAA,QAClB,MAAM,EAAE,WAAW,WAAW,MAAM,QAAQ,GAAG,CAAC,GAAG;AAAA,QACnD,OAAO,EAAE,WAAW,cAAc,MAAM,QAAQ,CAAC,CAAC,GAAG;AAAA,QACrD,QAAQ,EAAE,WAAW,WAAW,MAAM,QAAQ,CAAC,CAAC,GAAG;AAAA,MACrD;AAAA,IACF;AAAA,IACA,IAAI,SAAS,OAAO,KAAK,SAAS,SAAS,KAAK;AAAA,EAClD;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/navigation/Pagination/Pagination.styles.ts"],"sourcesContent":["import { alpha } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\n\nconst ITEM_SIZE_STYLES: Record<string, (theme: Theme) => CSSObject> = {\n sm: (theme) => ({\n fontSize: '0.875rem',\n minWidth: 28,\n height: 28,\n padding: theme.spacing(0.25, 0.5) }),\n lg: (theme) => ({\n fontSize: '1.125rem',\n minWidth: 44,\n height: 44,\n padding: theme.spacing(1, 1.5) }) };\n\n// One variant applies at a time, so a lookup replaces the mutually exclusive\n// spreads.\nconst ITEM_VARIANTS: Record<string, (theme: Theme, customSize?: string) => CSSObject> = {\n default: (theme, _customSize) => ({\n borderRadius: theme.spacing(1),\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.08),\n transform: 'translateY(-1px)',\n boxShadow: `0 2px 8px ${alpha(theme.palette.primary.main, 0.15)}` },\n '&.Mui-selected': {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.primary.contrastText,\n boxShadow: `0 4px 12px ${alpha(theme.palette.primary.main, 0.3)}`,\n '&:hover': {\n backgroundColor: theme.palette.primary.dark,\n transform: 'translateY(-2px)' } } }),\n rounded: (theme, customSize) => ({\n borderRadius: '50%',\n minWidth: customSize === 'sm' ? 28 : customSize === 'lg' ? 44 : 36,\n width: customSize === 'sm' ? 28 : customSize === 'lg' ? 44 : 36,\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.08),\n transform: 'scale(1.1)',\n boxShadow: `0 4px 16px ${alpha(theme.palette.primary.main, 0.2)}` },\n '&.Mui-selected': {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.primary.contrastText,\n transform: 'scale(1.05)',\n boxShadow: `0 6px 20px ${alpha(theme.palette.primary.main, 0.3)}`,\n '&:hover': {\n backgroundColor: theme.palette.primary.dark,\n transform: 'scale(1.15)' } } }),\n dots: (theme, customSize) => ({\n borderRadius: '50%',\n minWidth: customSize === 'sm' ? 8 : customSize === 'lg' ? 12 : 10,\n width: customSize === 'sm' ? 8 : customSize === 'lg' ? 12 : 10,\n height: customSize === 'sm' ? 8 : customSize === 'lg' ? 12 : 10,\n fontSize: 0,\n backgroundColor: alpha(theme.palette.text.secondary, 0.3),\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.5),\n transform: 'scale(1.3)' },\n '&.Mui-selected': {\n backgroundColor: theme.palette.primary.main,\n transform: 'scale(1.2)',\n '&:hover': {\n backgroundColor: theme.palette.primary.dark,\n transform: 'scale(1.4)' } },\n '&.MuiPaginationItem-previousNext, &.MuiPaginationItem-firstLast': {\n display: 'none' } }),\n minimal: (theme, _customSize) => ({\n borderRadius: theme.spacing(0.5),\n backgroundColor: 'transparent',\n color: theme.palette.text.secondary,\n padding: theme.spacing(0.5, 1),\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.04),\n color: theme.palette.primary.main },\n '&.Mui-selected': {\n backgroundColor: 'transparent',\n color: theme.palette.primary.main,\n fontWeight: 600,\n position: 'relative',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n bottom: 0,\n left: '50%',\n transform: 'translateX(-50%)',\n width: '60%',\n height: 2,\n backgroundColor: theme.palette.primary.main,\n borderRadius: 1 } } }) };\n\nconst itemSizeStyles = (theme: Theme, customSize?: string): CSSObject =>\n customSize ? (ITEM_SIZE_STYLES[customSize]?.(theme) ?? {}) : {};\n\nconst itemVariantStyles = (theme: Theme, customVariant?: string, customSize?: string): CSSObject =>\n customVariant ? (ITEM_VARIANTS[customVariant]?.(theme, customSize) ?? {}) : {};\n\n// The pagination list's own styling, lifted out so the styled() callback is a\n// single spread.\nexport const paginationStyles = ({\n theme,\n customVariant,\n customSize }: {\n theme: Theme;\n customVariant?: string;\n customSize?: string;\n}): CSSObject => ({\n '& .MuiPagination-ul': {\n gap: customVariant === 'minimal' ? theme.spacing(0.5) : theme.spacing(1) },\n\n '& .MuiPaginationItem-root': {\n ...itemSizeStyles(theme, customSize),\n ...itemVariantStyles(theme, customVariant, customSize),\n transition: 'all 0.2s ease',\n fontWeight: 500,\n\n\n\n\n\n // Default variant (flat design)\n\n\n // Rounded variant\n\n\n // Dots variant (minimal circular dots)\n\n\n // Minimal variant (text-only)\n\n },\n\n // Hide ellipsis for dots variant\n ...(customVariant === 'dots' && {\n '& .MuiPaginationItem-ellipsis': {\n display: 'none' } }) });\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/navigation/AppHeader/AppHeader.tsx"],"sourcesContent":["'use client';\n\nimport Box from '@mui/material/Box/index.js';\nimport React from 'react';\n\nimport { withDefaults } from '../../../utils/withDefaults';\n\nimport type { AppHeaderProps } from './AppHeader.types';\n\n/** Bar height, before the optional `below` row. */\nconst BAR_MIN_HEIGHT = { regular: 64, dense: 52 } as const;\n\n/** The props {@link HEADER_DEFAULTS} guarantees a value for. */\ntype Defaulted =\n | 'position'\n | 'offsetTop'\n | 'maxWidth'\n | 'divider'\n | 'elevateOnScroll'\n | 'dense'\n | 'disableSpacer'\n | 'dataTestId';\n\n/** `AppHeaderProps` as the body sees them: nothing defaulted is still optional. */\ntype ResolvedHeaderProps = AppHeaderProps & Required<Pick<AppHeaderProps, Defaulted>>;\n\nconst HEADER_DEFAULTS: Pick<ResolvedHeaderProps, Defaulted> = {\n position: 'sticky',\n offsetTop: 0,\n maxWidth: 1200,\n divider: true,\n elevateOnScroll: false,\n dense: false,\n disableSpacer: false,\n dataTestId: 'app-header',\n};\n\n/**\n * Watch the document scroll so a lifted bar can cast a shadow only once there\n * is something under it. Inert (and never attaches a listener) when off.\n */\nfunction useScrolled(enabled: boolean): boolean {\n const [scrolled, setScrolled] = React.useState(false);\n React.useEffect(() => {\n if (!enabled) return undefined;\n const onScroll = (): void => setScrolled(window.scrollY > 0);\n onScroll();\n window.addEventListener('scroll', onScroll, { passive: true });\n return () => window.removeEventListener('scroll', onScroll);\n }, [enabled]);\n return enabled && scrolled;\n}\n\n/**\n * The bar's own height, republished whenever it changes.\n *\n * A `fixed` bar is out of flow, so something has to reserve its space — and a\n * constant cannot, because this bar's height is whatever the caller's slots add\n * up to. A search field in `below`, a status line, a wrapped title: each moves\n * it, and a hard-coded spacer would leave the page's first element under the\n * bar or floating below a gap.\n */\nfunction useMeasuredHeight(enabled: boolean): [React.RefObject<HTMLElement | null>, number] {\n const ref = React.useRef<HTMLElement | null>(null);\n const [height, setHeight] = React.useState(0);\n React.useEffect(() => {\n const node = ref.current;\n if (!enabled || !node) return undefined;\n const measure = (): void => setHeight(node.getBoundingClientRect().height);\n measure();\n // Measured once unconditionally, observed only where the API exists. jsdom\n // has no ResizeObserver, so constructing it unguarded takes down every\n // consumer's test that happens to render a fixed bar — a crash in THEIR\n // suite, thrown from a component they only laid out.\n if (typeof ResizeObserver === 'undefined') return undefined;\n const observer = new ResizeObserver(measure);\n observer.observe(node);\n return () => observer.disconnect();\n }, [enabled]);\n return [ref, height];\n}\n\n/**\n * The bar's own surface. Lifted out of the component both to keep it inside the\n * complexity bar and because the positioning rules are the fiddly part: a\n * `static` bar must claim neither a stacking context nor an offset, and only a\n * `fixed` one needs pinning to the viewport's edges.\n */\nfunction surfaceSx({\n position,\n offsetTop,\n divider,\n scrolled,\n}: Required<Pick<AppHeaderProps, 'position' | 'offsetTop' | 'divider'>> & {\n scrolled: boolean;\n}): Record<string, unknown> {\n return {\n position,\n ...(position === 'static' ? {} : { top: offsetTop, zIndex: 'appBar' }),\n ...(position === 'fixed' ? { left: 0, right: 0 } : {}),\n backgroundColor: 'background.paper',\n borderBottom: divider ? 1 : 0,\n borderColor: 'divider',\n boxShadow: scrolled ? 2 : 0,\n transition: 'box-shadow 150ms ease',\n };\n}\n\n/** The trailing column: the muted note, and the actions under it. */\nconst HeaderTrailing: React.FC<Pick<AppHeaderProps, 'meta' | 'actions'>> = ({ meta, actions }) => {\n if (!meta && !actions) return null;\n return (\n <Box\n sx={{\n flex: '0 0 auto',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-end',\n gap: 0.5,\n }}\n >\n {meta && (\n <Box\n data-testid=\"app-header-meta\"\n sx={{\n fontSize: 11,\n fontWeight: 700,\n letterSpacing: '0.08em',\n textTransform: 'uppercase',\n color: 'text.disabled',\n lineHeight: 1,\n }}\n >\n {meta}\n </Box>\n )}\n {actions && (\n <Box\n component=\"nav\"\n data-testid=\"app-header-actions\"\n sx={{ display: 'flex', alignItems: 'center', gap: 1 }}\n >\n {actions}\n </Box>\n )}\n </Box>\n );\n};\n\n/**\n * The application bar: a row of slots on one surface, plus an optional second\n * row that belongs to it.\n *\n * It knows nothing about routers, sessions, carts or stores — every slot is a\n * `ReactNode` and every behaviour is a callback, which is what lets one bar\n * serve a storefront, a back office and a platform console without any of them\n * leaking into the others. Compose it with {@link AppHeaderIdentity},\n * {@link AppHeaderStatus} and {@link AppHeaderDetails}, or put your own nodes in\n * the slots.\n *\n * The SURFACE always spans the viewport while the CONTENT stops at `maxWidth`\n * and centres, so the same bar reads as a phone header and as a desktop one\n * without a second component or a breakpoint at the call site.\n */\nexport const AppHeader: React.FC<AppHeaderProps> = (props) => {\n // A table of defaults rather than one per destructured prop: each `= default`\n // is a branch, and nine of them put this component over the complexity bar\n // before it rendered anything.\n const {\n leading,\n children,\n actions,\n meta,\n below,\n position,\n offsetTop,\n maxWidth,\n divider,\n elevateOnScroll,\n dense,\n disableSpacer,\n className,\n dataTestId,\n // True by construction — `withDefaults` fills exactly these keys — but not\n // something TS can follow through a `Partial<T>` table.\n } = withDefaults(props, HEADER_DEFAULTS) as ResolvedHeaderProps;\n\n const scrolled = useScrolled(elevateOnScroll);\n const needsSpacer = position === 'fixed' && !disableSpacer;\n const [ref, height] = useMeasuredHeight(needsSpacer);\n\n return (\n <>\n <Box\n ref={ref}\n component=\"header\"\n className={className}\n data-testid={dataTestId}\n sx={surfaceSx({ position, offsetTop, divider, scrolled })}\n >\n <Box sx={{ maxWidth, mx: 'auto', px: { xs: 2, md: 3 } }}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n gap: { xs: 1, md: 2 },\n minHeight: dense ? BAR_MIN_HEIGHT.dense : BAR_MIN_HEIGHT.regular,\n py: 1,\n }}\n >\n {leading}\n {/* The identity takes the slack and is the only part allowed to\n shrink — the actions are targets and the meta note is already\n the smallest thing in the bar. */}\n <Box sx={{ flex: '1 1 auto', minWidth: 0 }}>{children}</Box>\n <HeaderTrailing meta={meta} actions={actions} />\n </Box>\n {below && (\n <Box data-testid={`${dataTestId}-below`} sx={{ pb: 1.5 }}>\n {below}\n </Box>\n )}\n </Box>\n </Box>\n {needsSpacer && <Box aria-hidden data-testid={`${dataTestId}-spacer`} sx={{ height }} />}\n </>\n );\n};\n\nAppHeader.displayName = 'AppHeader';\n\nexport default AppHeader;\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/form/Command/Command.styles.ts"],"sourcesContent":["import { alpha } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\n\nimport type { CommandProps } from './Command.types';\nimport { accentFor } from '../../../tokens/scales';\n\ntype CommandVariant = NonNullable<CommandProps['variant']>;\ntype CommandColor = NonNullable<CommandProps['color']>;\ntype CommandSize = NonNullable<CommandProps['size']>;\n\nconst SIZE_MAP: Record<CommandSize, { width: number; fontSize: string }> = {\n xs: { width: 400, fontSize: '0.75rem' },\n sm: { width: 450, fontSize: '0.875rem' },\n md: { width: 500, fontSize: '1rem' },\n lg: { width: 550, fontSize: '1.125rem' },\n xl: { width: 600, fontSize: '1.25rem' },\n};\n\nexport const commandSizeStyles = (size: CommandSize) => SIZE_MAP[size] || SIZE_MAP.md;\n\nconst emphasisStyles = (\n theme: Theme,\n color: CommandColor,\n glow: boolean,\n pulse: boolean,\n): CSSObject => ({\n ...(glow && {\n boxShadow: `0 0 20px ${alpha(accentFor(theme, color).main, 0.4)}`,\n }),\n ...(pulse && {\n animation: 'pulse 2s infinite',\n '@keyframes pulse': {\n '0%': { boxShadow: `0 0 0 0 ${alpha(accentFor(theme, color).main, 0.4)}` },\n '70%': { boxShadow: `0 0 0 10px ${alpha(accentFor(theme, color).main, 0)}` },\n '100%': { boxShadow: `0 0 0 0 ${alpha(accentFor(theme, color).main, 0)}` },\n },\n }),\n});\n\nconst surfaceStyles = (\n theme: Theme,\n variant: CommandVariant,\n color: CommandColor,\n): CSSObject => {\n switch (variant) {\n case 'glass':\n return {\n backgroundColor: alpha(theme.palette.background.paper, 0.1),\n backdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(accentFor(theme, color).main, 0.2)}`,\n };\n case 'gradient':\n return {\n background: `linear-gradient(135deg, ${accentFor(theme, color).main}, ${accentFor(theme, color).dark})`,\n color: accentFor(theme, color).contrastText,\n };\n case 'elevated':\n return { boxShadow: theme.shadows[8] };\n case 'minimal':\n return { border: 'none', boxShadow: 'none' };\n default:\n return {};\n }\n};\n\n/**\n * Every variant shares the same transition and the same optional glow/pulse; only\n * the surface — background, border, shadow — differs.\n */\nexport const commandPaperStyles = (\n theme: Theme,\n { variant, color, glow, pulse }: {\n variant: CommandVariant;\n color: CommandColor;\n glow: boolean;\n pulse: boolean;\n },\n): CSSObject => ({\n transition: theme.transitions.create(['all'], {\n duration: theme.transitions.duration.standard,\n }),\n ...emphasisStyles(theme, color, glow, pulse),\n ...surfaceStyles(theme, variant, color),\n});\n"],"mappings":";;;;;AAAA,SAAS,aAAa;AAUtB,IAAM,WAAqE;AAAA,EACzE,IAAI,EAAE,OAAO,KAAK,UAAU,UAAU;AAAA,EACtC,IAAI,EAAE,OAAO,KAAK,UAAU,WAAW;AAAA,EACvC,IAAI,EAAE,OAAO,KAAK,UAAU,OAAO;AAAA,EACnC,IAAI,EAAE,OAAO,KAAK,UAAU,WAAW;AAAA,EACvC,IAAI,EAAE,OAAO,KAAK,UAAU,UAAU;AACxC;AAEO,IAAM,oBAAoB,CAAC,SAAsB,SAAS,IAAI,KAAK,SAAS;AAEnF,IAAM,iBAAiB,CACrB,OACA,OACA,MACA,WACe;AAAA,EACf,GAAI,QAAQ;AAAA,IACV,WAAW,YAAY,MAAM,UAAU,OAAO,KAAK,EAAE,MAAM,GAAG,CAAC;AAAA,EACjE;AAAA,EACA,GAAI,SAAS;AAAA,IACX,WAAW;AAAA,IACX,oBAAoB;AAAA,MAClB,MAAM,EAAE,WAAW,WAAW,MAAM,UAAU,OAAO,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG;AAAA,MACzE,OAAO,EAAE,WAAW,cAAc,MAAM,UAAU,OAAO,KAAK,EAAE,MAAM,CAAC,CAAC,GAAG;AAAA,MAC3E,QAAQ,EAAE,WAAW,WAAW,MAAM,UAAU,OAAO,KAAK,EAAE,MAAM,CAAC,CAAC,GAAG;AAAA,IAC3E;AAAA,EACF;AACF;AAEA,IAAM,gBAAgB,CACpB,OACA,SACA,UACc;AACd,UAAQ,SAAS;AAAA,IACf,KAAK;AACH,aAAO;AAAA,QACL,iBAAiB,MAAM,MAAM,QAAQ,WAAW,OAAO,GAAG;AAAA,QAC1D,gBAAgB;AAAA,QAChB,QAAQ,aAAa,MAAM,UAAU,OAAO,KAAK,EAAE,MAAM,GAAG,CAAC;AAAA,MAC/D;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,YAAY,2BAA2B,UAAU,OAAO,KAAK,EAAE,IAAI,KAAK,UAAU,OAAO,KAAK,EAAE,IAAI;AAAA,QACpG,OAAO,UAAU,OAAO,KAAK,EAAE;AAAA,MACjC;AAAA,IACF,KAAK;AACH,aAAO,EAAE,WAAW,MAAM,QAAQ,CAAC,EAAE;AAAA,IACvC,KAAK;AACH,aAAO,EAAE,QAAQ,QAAQ,WAAW,OAAO;AAAA,IAC7C;AACE,aAAO,CAAC;AAAA,EACZ;AACF;AAMO,IAAM,qBAAqB,CAChC,OACA,EAAE,SAAS,OAAO,MAAM,MAAM,OAMf;AAAA,EACf,YAAY,MAAM,YAAY,OAAO,CAAC,KAAK,GAAG;AAAA,IAC5C,UAAU,MAAM,YAAY,SAAS;AAAA,EACvC,CAAC;AAAA,EACD,GAAG,eAAe,OAAO,OAAO,MAAM,KAAK;AAAA,EAC3C,GAAG,cAAc,OAAO,SAAS,KAAK;AACxC;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/CardKit/list-card-parts.tsx"],"sourcesContent":["'use client';\n\nimport type { JSX, ReactNode } from 'react';\n\nimport { Box } from '../../../mui/Box';\n\nimport type { CardFactProps, CardLedgerLine } from './CardKit.types';\n\n/**\n * THE SHARED FURNITURE OF AN EXPANDED LIST-CARD BODY.\n *\n * `BaseListCard` says nothing about what goes inside a row's expanded area — it\n * spans the rails and stops, because the design belongs to the consumer. Right\n * for the card; wrong as the place where every entity in an admin app invents\n * its own two-column layout, its own label/value pair and its own ledger.\n *\n * So the four shapes that actually repeat live here, once. Nothing here knows a\n * domain: they take `ReactNode` and lay it out.\n */\n\n/** The expanded body's two-column split: detail on the left, a ledger right. */\nexport function DetailColumns({ left, right }: { left: ReactNode; right: ReactNode }): JSX.Element {\n return (\n <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 3 }}>\n <Box sx={{ minWidth: 0 }}>{left}</Box>\n <Box sx={{ minWidth: 0 }}>{right}</Box>\n </Box>\n );\n}\n\n/**\n * One labelled fact inside an expanded body.\n *\n * Horizontal, not stacked: the body is already a wide area with room for a\n * label beside its value, and stacking them there would ape the summary rails\n * above without their alignment.\n */\nexport function Fact({ label, value }: CardFactProps): JSX.Element {\n return (\n <Box sx={{ display: 'flex', justifyContent: 'space-between', gap: 2, fontSize: 13, py: 0.25 }}>\n <Box component=\"span\" sx={{ color: 'text.secondary', flexShrink: 0 }}>\n {label}\n </Box>\n <Box component=\"span\" sx={{ minWidth: 0, textAlign: 'right', overflowWrap: 'anywhere' }}>\n {value}\n </Box>\n </Box>\n );\n}\n\n/**\n * A money ledger: rows of label/amount, then a ruled total.\n *\n * The total is separated by a RULE rather than by weight alone, because a\n * subtotal and a total in one column with only bold between them is the classic\n * misread — the eye lands on whichever number is larger.\n *\n * The figures arrive pre-formatted. This is a layout, and a component that\n * formatted money would be choosing a locale on the consumer's behalf.\n */\nexport function Ledger({\n lines,\n total,\n}: {\n lines: CardLedgerLine[];\n total: { label: string; value: ReactNode };\n}): JSX.Element {\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.25 }}>\n {lines.map((line) => (\n <Box\n key={line.label}\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n fontSize: 13,\n color: line.tone === 'info' ? 'info.main' : 'text.secondary',\n }}\n >\n <Box component=\"span\">{line.label}</Box>\n <Box component=\"span\" sx={{ fontVariantNumeric: 'tabular-nums' }}>\n {line.value}\n </Box>\n </Box>\n ))}\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n fontWeight: 700,\n borderTop: 1,\n borderColor: 'divider',\n pt: 0.5,\n mt: 0.5,\n }}\n >\n <Box component=\"span\">{total.label}</Box>\n <Box component=\"span\" sx={{ fontVariantNumeric: 'tabular-nums' }}>\n {total.value}\n </Box>\n </Box>\n </Box>\n );\n}\n\n/** A heading inside the expanded body, for a section that needs naming. */\nexport function BodyHeading({ children }: { children: ReactNode }): JSX.Element {\n return (\n <Box\n sx={{\n fontSize: 11,\n fontWeight: 700,\n letterSpacing: 0.4,\n textTransform: 'uppercase',\n color: 'text.disabled',\n mb: 0.5,\n }}\n >\n {children}\n </Box>\n );\n}\n\n/**\n * A wrapping run of small items — permission names, role names, target ids.\n *\n * The whole reason several entities earn a list card at all: a `string[]` has no\n * honest table cell. Truncated to \"3 items\" it says nothing; printed in full it\n * destroys the column. Here it simply wraps.\n */\nexport function TagList({\n items,\n empty,\n}: {\n items: readonly string[];\n /** What to show for an empty run — the consumer's sentence, no default. */\n empty: string;\n}): JSX.Element {\n if (items.length === 0) {\n return <Box sx={{ fontSize: 13, color: 'text.disabled' }}>{empty}</Box>;\n }\n return (\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 0.5 }}>\n {items.map((item) => (\n <Box\n key={item}\n component=\"span\"\n sx={{\n fontSize: 12,\n px: 0.75,\n py: 0.25,\n borderRadius: 1,\n bgcolor: 'action.hover',\n color: 'text.secondary',\n fontFamily: 'monospace',\n }}\n >\n {item}\n </Box>\n ))}\n </Box>\n );\n}\n"],"mappings":"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","names":["default"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/Alert/Alert.styles.tsx"],"sourcesContent":["import Error from '@mui/icons-material/Error';\nimport Info from '@mui/icons-material/Info';\nimport CheckCircle from '@mui/icons-material/CheckCircle';\nimport Warning from '@mui/icons-material/Warning';\nimport { alpha, darken, keyframes, lighten } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { sheen, softNeutral } from '../../../tokens/ink';\n\nimport type { AlertVariant } from './Alert.base';\nimport { VARIANT_ICON } from './Alert.helpers';\nimport {\n ACTION_SLOT,\n ALERT_EASING,\n ALERT_PADDING_UNITS,\n ALERT_TRANSITION_MS,\n type AlertPalette,\n FADE_IN,\n GLASS,\n GLOW,\n GRADIENT,\n ICON_SLOT,\n ICON_SPIN,\n MESSAGE_BUTTON,\n MESSAGE_FONT_SIZE,\n MESSAGE_GAP_UNITS,\n MESSAGE_LINE_HEIGHT,\n PULSE,\n seconds,\n SEMANTIC_SURFACE,\n SEMANTIC_VARIANTS,\n} from './Alert.metrics';\nimport type { IconName } from '../../../icons/Icon.types';\nimport { px } from '../../../tokens/theme';\n\nexport type { AlertPalette } from './Alert.metrics';\n\nexport const pulseAnimation = keyframes`\n 0% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 1;\n }\n 70% {\n box-shadow: 0 0 0 ${PULSE.spread}px currentColor;\n opacity: 0;\n }\n 100% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 0;\n }\n`;\n\n// Additional animations can be enabled as needed\n// const slideInAnimation = keyframes`\n// from {\n// transform: translateX(-100%);\n// opacity: 0;\n// }\n// to {\n// transform: translateX(0);\n// opacity: 1;\n// }\n// `;\n\n// const bounceIn = keyframes`\n// 0% {\n// transform: scale(0.3);\n// opacity: 0;\n// }\n// 50% {\n// transform: scale(1.05);\n// }\n// 70% {\n// transform: scale(0.9);\n// }\n// 100% {\n// transform: scale(1);\n// opacity: 1;\n// }\n// `;\n\n// Removed unused slideInAnimation - can be re-added if needed for future features\n\nexport const shimmerAnimation = keyframes`\n 0% {\n background-position: -${GRADIENT.shimmerTravel}px 0;\n }\n 100% {\n background-position: ${GRADIENT.shimmerTravel}px 0;\n }\n`;\n\nexport const fadeInScale = keyframes`\n from {\n opacity: 0;\n transform: scale(${FADE_IN.scale}) translateY(-${FADE_IN.lift}px);\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n`;\n\nexport const iconRotate = keyframes`\n 0% {\n transform: rotate(0deg) scale(${ICON_SPIN.from});\n }\n 50% {\n transform: rotate(180deg) scale(${ICON_SPIN.mid});\n }\n 100% {\n transform: rotate(360deg) scale(1);\n }\n`;\n\n// The MUI-themed twin of `alertPalette` in `Alert.metrics.ts`: same names,\n// same three greys for `neutral`, same fallback to `info`.\nexport const getColorFromTheme = (theme: Theme, variant: string): AlertPalette => {\n const soft = softNeutral(theme);\n const colorMap: Record<string, AlertPalette> = {\n info: theme.palette.info,\n success: theme.palette.success,\n warning: theme.palette.warning,\n danger: theme.palette.error,\n primary: theme.palette.primary,\n secondary: theme.palette.secondary,\n neutral: { main: soft.main, light: soft.light, dark: soft.dark },\n };\n\n return colorMap[variant] || theme.palette.info;\n};\n\n/** The shared glyph names drawn with MUI's icons; the native side draws the same names from the icon set. */\nconst VARIANT_ICONS: Partial<Record<IconName, React.ReactNode>> = {\n Info: <Info />,\n CheckCircle: <CheckCircle />,\n Warning: <Warning />,\n Error: <Error />,\n};\n\nexport const getVariantIcon = (variant: string): React.ReactNode => {\n const name = VARIANT_ICON[variant as AlertVariant];\n return name ? VARIANT_ICONS[name] : undefined;\n};\n\n/**\n * The room the message is given — padding, the stack's rhythm, and where the\n * icon and the close button sit relative to it.\n *\n * Extracted for the same reason {@link alertVariantStyles} and\n * {@link alertEmphasisStyles} were: `styled()`'s callback is one function, and\n * every block written inline is counted against its length by the complexity\n * gate. Keeping the layout here means the callback assembles four named pieces\n * instead of carrying all of them.\n */\nexport const alertLayoutStyles = (\n theme: Theme,\n colorPalette: AlertPalette,\n animate: boolean | undefined,\n): CSSObject => ({\n // ROOM TO READ.\n //\n // MUI's `6px 16px` is sized for one line of text and nothing else. This Alert\n // routinely carries three things stacked — a sentence, a smaller explanation,\n // then a control — and at 6px they touched top and bottom and ran together\n // vertically, so the whole card read as one dense block instead of as a\n // message with parts. The generosity is what makes the structure legible; it\n // is not decoration.\n //\n // Padding stays overridable by an `sx` (a full-bleed strip legitimately wants\n // it tight), because this is a default rather than a rule.\n padding: theme.spacing(ALERT_PADDING_UNITS.vertical, ALERT_PADDING_UNITS.horizontal),\n\n '.MuiAlert-message': {\n display: 'flex',\n flexDirection: 'column',\n // 0.5 put a title, its explanation and a button 4px apart, which reads as a\n // spacing bug rather than as a group. 1 separates the lines; the extra\n // margin below goes to whatever CONTROL sits at the end, because the gap\n // between prose and a thing you press has to be bigger than the gap between\n // two lines of prose or the button looks like part of the text.\n gap: theme.spacing(MESSAGE_GAP_UNITS),\n fontSize: px(MESSAGE_FONT_SIZE),\n lineHeight: MESSAGE_LINE_HEIGHT,\n // No padding of its own — the root's is now doing that job, and MUI's\n // default `8px 0` on top of it would double the vertical space.\n padding: 0,\n // A CONTROL ON A TINTED PANEL NEEDS AN EDGE.\n //\n // `ghost` and `text` paint no background and no border — bare labels, which\n // works on white where the surrounding page is obviously not clickable.\n // Inside a coloured Alert it stops working: the label is one more coloured\n // phrase among several, and a \"Cancelar\" beside two lines of prose reads as\n // part of the prose.\n //\n // Only the BORDER is set, never the background or the colour, and that is\n // what makes it safe to apply to every button rather than just the bare\n // ones: a `solid` keeps its fill and its light label and gains a hairline\n // in the same hue, while a `ghost` gains the whole affordance.\n '.MuiButton-root': {\n marginTop: theme.spacing(MESSAGE_BUTTON.marginTopUnits),\n border: `1px solid ${alpha(colorPalette.main, MESSAGE_BUTTON.borderAlpha)}`,\n },\n },\n\n '.MuiAlert-icon': {\n transition: `transform ${seconds(ALERT_TRANSITION_MS)} ${ALERT_EASING}`,\n alignItems: 'center',\n // Clear of the words rather than nearly touching them, and aligned to the\n // FIRST line instead of centred on the whole block — an icon floating\n // halfway down a three-line message points at nothing.\n alignSelf: 'flex-start',\n marginRight: theme.spacing(ICON_SLOT.marginRightUnits),\n paddingTop: theme.spacing(ICON_SLOT.paddingTopUnits),\n animation: animate ? `${iconRotate} ${seconds(ICON_SPIN.ms)} ease-out` : 'none',\n },\n\n // The close button, kept off the text it sits beside.\n '.MuiAlert-action': {\n alignItems: 'flex-start',\n paddingLeft: theme.spacing(ACTION_SLOT.paddingLeftUnits),\n },\n});\n\n/**\n * A semantic Alert's surface and ink.\n *\n * ## Why this is not `alpha(main, 0.1)`\n *\n * It used to be, four times over, with `color: main` for the text. Both halves\n * were wrong, and independently so.\n *\n * The fill was TRANSLUCENT. A 10% wash only reads as a banner when something\n * opaque is behind it, so the component silently depended on where a consumer\n * put it. Placed over content — a floating notice, an invite anchored above a\n * catalogue — the page came straight through and the sentence interleaved with\n * whatever it was over. That is not a faint banner; it is an unreadable one,\n * and nothing in the component said so.\n *\n * The ink was the SEVERITY HUE at body size. `#0288d1`, this library's info\n * blue, is 3.03:1 on white — under the 4.5:1 WCAG AA floor before any wash is\n * involved. So the text failed on a plain white page too, where the fill was\n * behaving exactly as intended.\n *\n * ## Why `lighten`/`darken` rather than a hand-picked pair\n *\n * These are the same transforms MUI's own `standard` Alert uses, at the same\n * ratios — the recipe this component overrode. Reusing it means an OPAQUE tint\n * with a dark ink of the same hue, contrast that holds on any surface because\n * it no longer depends on one, and a pairing already proven across MUI's\n * palette rather than eyeballed here. Both modes are handled: on a dark theme\n * the tint darkens and the ink lightens, which an alpha wash could never do\n * because it carries the seed's own lightness through unchanged.\n *\n * The border keeps an alpha — it is a hairline over the tint it belongs to, so\n * translucency there costs nothing and lets the edge follow the fill.\n *\n * The ratios live in `Alert.metrics.ts` (`SEMANTIC_SURFACE`), where the\n * native renderer reads the same three through the same colour arithmetic.\n */\nconst semanticSurface = (theme: Theme, colorPalette: AlertPalette): CSSObject => {\n const dark = theme.palette.mode === 'dark';\n return {\n backgroundColor: dark\n ? darken(colorPalette.main, SEMANTIC_SURFACE.tint.dark)\n : lighten(colorPalette.main, SEMANTIC_SURFACE.tint.light),\n color: dark\n ? lighten(colorPalette.main, SEMANTIC_SURFACE.ink)\n : darken(colorPalette.main, SEMANTIC_SURFACE.ink),\n border: `1px solid ${alpha(colorPalette.main, SEMANTIC_SURFACE.borderAlpha)}`,\n '.MuiAlert-icon': {\n color: colorPalette.main,\n },\n };\n};\n\n// The six visual variants. Each block is spread in only when it matches, which\n// is how the original inline version read; keeping that shape here means the\n// styled() callback carries one branch instead of six. The four semantics were\n// four IDENTICAL copies of the same block — they now share one, so the next\n// change to a banner's surface cannot land on three of them.\nexport const alertVariantStyles = (\n theme: Theme,\n customVariant: string | undefined,\n colorPalette: AlertPalette,\n): CSSObject => ({\n ...(customVariant !== undefined &&\n SEMANTIC_VARIANTS.has(customVariant as AlertVariant) &&\n semanticSurface(theme, colorPalette)),\n\n ...(customVariant === 'glass' && {\n // 85%, not 10%. This is the variant that is MEANT to be see-through, and it\n // was the same mistake in a costume: at 0.1 the blur had almost nothing to\n // sit on, so `glass` was not frosted, it was a window. A frosted pane has to\n // be mostly pane — the backdrop should be legible AS texture behind the\n // text, never as competition with it.\n backgroundColor: alpha(theme.palette.background.paper, GLASS.backgroundAlpha),\n backdropFilter: `blur(${GLASS.blur}px) saturate(${GLASS.saturatePercent}%)`,\n WebkitBackdropFilter: `blur(${GLASS.blur}px) saturate(${GLASS.saturatePercent}%)`,\n border: `1px solid ${alpha(theme.palette.divider, GLASS.borderAlpha)}`,\n color: theme.palette.text.primary,\n '.MuiAlert-icon': {\n color: theme.palette.primary.main,\n },\n // Safari before 18 and Firefox with the filter disabled paint the declared\n // alpha with nothing blurred behind it — the see-through banner this is\n // fixing. There is no degraded frost to fall back to, so it falls back to an\n // opaque pane: less pretty, still readable.\n '@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px)))': {\n backgroundColor: theme.palette.background.paper,\n },\n }),\n\n ...(customVariant === 'gradient' && {\n background: `linear-gradient(${GRADIENT.angleDeg}deg, ${alpha(colorPalette.light || colorPalette.main, GRADIENT.stopAlpha)}, ${alpha(colorPalette.dark || colorPalette.main, GRADIENT.stopAlpha)})`,\n color: theme.palette.getContrastText(colorPalette.main),\n border: 'none',\n position: 'relative',\n overflow: 'hidden',\n '.MuiAlert-icon': {\n color: theme.palette.getContrastText(colorPalette.main),\n },\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: `-${GRADIENT.shimmerTravel}px`,\n width: '100%',\n height: '100%',\n background: `linear-gradient(90deg, transparent, ${sheen(theme, GRADIENT.shimmerAlpha)}, transparent)`,\n animation: `${shimmerAnimation} ${seconds(GRADIENT.shimmerMs)} infinite`,\n },\n }),\n});\n\n/** The web's glow: a soft shadow of the hue and a touch of brightness. */\nconst glowStyles = (colorPalette: AlertPalette): CSSObject => ({\n // No `!important`: the pointer states paint their tint as an INSET shadow on\n // the same property, and compose this one alongside it rather than fighting\n // it. `glowShadow` in `Alert.tsx` is the other half of that pair.\n boxShadow: `0 0 ${GLOW.blur}px ${GLOW.spread}px ${alpha(colorPalette.main, GLOW.alpha)}`,\n filter: `brightness(${GLOW.brightness})`,\n});\n\n/** The web's pulse: a wash of the hue over the whole card, fading out every two seconds. */\nconst pulseAfter = (colorPalette: AlertPalette): CSSObject => ({\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n borderRadius: 'inherit',\n backgroundColor: colorPalette.main,\n opacity: PULSE.alpha,\n animation: `${pulseAnimation} ${seconds(PULSE.ms)} infinite`,\n pointerEvents: 'none',\n zIndex: -1,\n});\n\n// glow and pulse combine into three distinct looks, so the combinations are\n// spelled out rather than layered — layering them would let the glow-only shadow\n// leak into the glow+pulse case. Declaration ORDER is kept as it has always\n// been, because emotion hashes the serialised block into the class name.\nexport const alertEmphasisStyles = (\n colorPalette: AlertPalette,\n glow: boolean,\n pulse: boolean,\n): CSSObject => ({\n ...(glow && !pulse && glowStyles(colorPalette)),\n\n // Pulse animation\n ...(pulse &&\n !glow && {\n position: 'relative',\n '&::after': pulseAfter(colorPalette),\n }),\n\n // Both glow and pulse\n ...(glow &&\n pulse && {\n position: 'relative',\n ...glowStyles(colorPalette),\n '&::after': pulseAfter(colorPalette),\n }),\n});\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/MapPreview/MapMarkers.tsx"],"sourcesContent":["import LocationIcon from '@mui/icons-material/LocationOn';\nimport Box from '@mui/material/Box/index.js';\nimport Tooltip from '@mui/material/Tooltip/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, styled, useTheme } from '@mui/material/styles/index.js';\nimport type { FC } from 'react';\nimport React from 'react';\n\nimport { MARKER_PIXELS_PER_DEGREE } from './MapPreview.constants';\nimport type { LatLng, MapMarker } from './MapPreview.types';\nimport { BOUNCE_KEYFRAMES } from './mapSurface';\nimport { shadowInk } from '../../../tokens/ink';\n\n// Kept module-local: styled() components cannot be exported across a module\n// boundary here without tripping TS2742.\nconst CoordinatesDisplay = styled(Box)(({ theme }) => ({\n position: 'absolute',\n bottom: theme.spacing(2),\n left: theme.spacing(2),\n padding: theme.spacing(1, 1.5),\n background: alpha(theme.palette.background.paper, 0.95),\n backdropFilter: 'blur(10px)',\n WebkitBackdropFilter: 'blur(10px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n borderRadius: theme.shape.borderRadius,\n zIndex: 1,\n}));\n\nexport interface MapMarkersProps {\n markers: MapMarker[];\n centre: LatLng;\n animated: boolean;\n}\n\n// Markers are placed relative to the current centre, so panning moves them with\n// the surface.\nexport const MapMarkers: FC<MapMarkersProps> = ({ markers, centre, animated }) => {\n const theme = useTheme();\n\n return (\n <>\n {markers.map((markerItem, index) => (\n <Box\n key={`${markerItem.position.lat}-${markerItem.position.lng}-${index}`}\n data-testid={`map-marker-${index}`}\n sx={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: `translate(\n ${(markerItem.position.lng - centre.lng) * MARKER_PIXELS_PER_DEGREE}px,\n ${-(markerItem.position.lat - centre.lat) * MARKER_PIXELS_PER_DEGREE}px\n )`,\n zIndex: 3,\n cursor: markerItem.onClick ? 'pointer' : 'default',\n }}\n onClick={markerItem.onClick}\n title={markerItem.title}\n >\n <Tooltip title={markerItem.description || markerItem.title || ''}>\n <LocationIcon\n sx={{\n fontSize: 32,\n color: theme.palette.error.main,\n filter: `drop-shadow(0 2px 4px ${shadowInk(theme, 0.3)})`,\n animation: animated ? 'bounce 2s infinite' : 'none',\n '@keyframes bounce': BOUNCE_KEYFRAMES,\n }}\n />\n </Tooltip>\n </Box>\n ))}\n </>\n );\n};\n\nexport const MapCoordinates: FC<{ position: LatLng; zoom: number }> = ({ position, zoom }) => (\n <CoordinatesDisplay data-testid=\"coordinates-display\">\n <Typography variant=\"caption\" sx={{ fontFamily: 'monospace' }}>\n Lat: {position.lat.toFixed(6)}, Lng: {position.lng.toFixed(6)}\n </Typography>\n {zoom > 0 && (\n <Typography variant=\"caption\" sx={{ fontFamily: 'monospace', display: 'block' }}>\n Zoom: {zoom}\n </Typography>\n )}\n </CoordinatesDisplay>\n);\n"],"mappings":";;;;;;;;;;;AAAA,OAAO,kBAAkB;AACzB,OAAO,SAAS;AAChB,OAAO,aAAa;AACpB,OAAO,gBAAgB;AACvB,SAAS,OAAO,QAAQ,gBAAgB;AAoCpC,mBAoBQ,KAkBR,YAtCA;AAzBJ,IAAM,qBAAqB,OAAO,GAAG,EAAE,CAAC,EAAE,MAAM,OAAO;AAAA,EACrD,UAAU;AAAA,EACV,QAAQ,MAAM,QAAQ,CAAC;AAAA,EACvB,MAAM,MAAM,QAAQ,CAAC;AAAA,EACrB,SAAS,MAAM,QAAQ,GAAG,GAAG;AAAA,EAC7B,YAAY,MAAM,MAAM,QAAQ,WAAW,OAAO,IAAI;AAAA,EACtD,gBAAgB;AAAA,EAChB,sBAAsB;AAAA,EACtB,QAAQ,aAAa,MAAM,MAAM,QAAQ,SAAS,GAAG,CAAC;AAAA,EACtD,cAAc,MAAM,MAAM;AAAA,EAC1B,QAAQ;AACV,EAAE;AAUK,IAAM,aAAkC,CAAC,EAAE,SAAS,QAAQ,SAAS,MAAM;AAChF,QAAM,QAAQ,SAAS;AAEvB,SACE,gCACG,kBAAQ,IAAI,CAAC,YAAY,UACxB;AAAA,IAAC;AAAA;AAAA,MAEC,eAAa,cAAc,KAAK;AAAA,MAChC,IAAI;AAAA,QACF,UAAU;AAAA,QACV,KAAK;AAAA,QACL,MAAM;AAAA,QACN,WAAW;AAAA,iBACN,WAAW,SAAS,MAAM,OAAO,OAAO,wBAAwB;AAAA,gBACjE,EAAE,WAAW,SAAS,MAAM,OAAO,OAAO,wBAAwB;AAAA;AAAA,QAEtE,QAAQ;AAAA,QACR,QAAQ,WAAW,UAAU,YAAY;AAAA,MAC3C;AAAA,MACA,SAAS,WAAW;AAAA,MACpB,OAAO,WAAW;AAAA,MAElB,8BAAC,WAAQ,OAAO,WAAW,eAAe,WAAW,SAAS,IAC5D;AAAA,QAAC;AAAA;AAAA,UACC,IAAI;AAAA,YACF,UAAU;AAAA,YACV,OAAO,MAAM,QAAQ,MAAM;AAAA,YAC3B,QAAQ,yBAAyB,UAAU,OAAO,GAAG,CAAC;AAAA,YACtD,WAAW,WAAW,uBAAuB;AAAA,YAC7C,qBAAqB;AAAA,UACvB;AAAA;AAAA,MACF,GACF;AAAA;AAAA,IA1BK,GAAG,WAAW,SAAS,GAAG,IAAI,WAAW,SAAS,GAAG,IAAI,KAAK;AAAA,EA2BrE,CACD,GACH;AAEJ;AAEO,IAAM,iBAAyD,CAAC,EAAE,UAAU,KAAK,MACtF,qBAAC,sBAAmB,eAAY,uBAC9B;AAAA,uBAAC,cAAW,SAAQ,WAAU,IAAI,EAAE,YAAY,YAAY,GAAG;AAAA;AAAA,IACvD,SAAS,IAAI,QAAQ,CAAC;AAAA,IAAE;AAAA,IAAQ,SAAS,IAAI,QAAQ,CAAC;AAAA,KAC9D;AAAA,EACC,OAAO,KACN,qBAAC,cAAW,SAAQ,WAAU,IAAI,EAAE,YAAY,aAAa,SAAS,QAAQ,GAAG;AAAA;AAAA,IACxE;AAAA,KACT;AAAA,GAEJ;","names":[]}
|