@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/form/PhoneInput/PhoneInput.tsx"],"sourcesContent":["import ArrowDropDown from '@mui/icons-material/ArrowDropDown';\nimport PhoneIcon from '@mui/icons-material/Phone';\nimport Box from '@mui/material/Box/index.js';\nimport InputAdornment from '@mui/material/InputAdornment/index.js';\nimport ListItemIcon from '@mui/material/ListItemIcon/index.js';\nimport ListItemText from '@mui/material/ListItemText/index.js';\nimport Menu from '@mui/material/Menu/index.js';\nimport MenuItem from '@mui/material/MenuItem/index.js';\nimport TextField from '@mui/material/TextField/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, styled, useTheme } from '@mui/material/styles/index.js';\nimport type { FC} from 'react';\nimport React, { } from 'react';\n\nimport { countries } from './countries';\nimport { usePhoneInput } from './PhoneInput.hooks';\nimport type { CountryData,PhoneInputProps } from './PhoneInput.types';\nimport type { PhoneInputCopy } from '../../../copy';\n\nimport { fieldEdge } from '../../../tokens/field-edge';\nimport { fieldRadius } from '../../../tokens/field-radius';\nimport { fieldControlStyles, fieldTextFieldStyles } from '../../../tokens/field-height';\n\n// Country data with expanded support\n\n// Styled components\n/** The plain variant: MUI's own field, on the theme's field radius. */\nconst FieldTextField = styled(TextField)(({ theme }) => fieldTextFieldStyles(theme));\n\nconst GlassTextField = styled(TextField)(({ theme }) => ({\n ...fieldControlStyles(theme),\n '& .MuiOutlinedInput-root': {\n borderRadius: fieldRadius(theme),\n background: `linear-gradient(135deg, ${alpha(theme.palette.background.paper, 0.8)} 0%, ${alpha(theme.palette.background.paper, 0.6)} 100%)`,\n backdropFilter: 'blur(10px)',\n WebkitBackdropFilter: 'blur(10px)',\n border: `1px solid ${fieldEdge(theme)}`,\n transition: theme.transitions.create(['border-color', 'box-shadow', 'background']),\n '&:hover': {\n background: `linear-gradient(135deg, ${alpha(theme.palette.background.paper, 0.9)} 0%, ${alpha(theme.palette.background.paper, 0.7)} 100%)`,\n borderColor: theme.palette.primary.main },\n '&.Mui-focused': {\n background: theme.palette.background.paper,\n boxShadow: `0 0 0 2px ${alpha(theme.palette.primary.main, 0.25)}` },\n '& fieldset': {\n border: 'none' } },\n '& .MuiInputLabel-root': {\n '&.Mui-focused': {\n color: theme.palette.primary.main } } }));\n\nconst CountrySelector = styled(Box)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(0.5, 1),\n borderRadius: theme.shape.borderRadius,\n cursor: 'pointer',\n transition: theme.transitions.create(['background-color']),\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.08) } }));\n\nconst CountryMenu = styled(Menu)(({ theme }) => ({\n '& .MuiPaper-root': {\n background: `linear-gradient(135deg, ${alpha(theme.palette.background.paper, 0.98)} 0%, ${alpha(theme.palette.background.paper, 0.95)} 100%)`,\n backdropFilter: 'blur(20px)',\n WebkitBackdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.18)}`,\n maxHeight: 400 } }));\n\n// Helper functions with enhanced validation\n// The text field itself with its two adornments. Split out so PhoneInput is\n// prop defaults, the hook call and composition.\nconst PhoneField: React.FC<{\n TextFieldComponent: React.ElementType;\n variant: PhoneInputProps['variant'];\n label?: React.ReactNode;\n placeholder?: string;\n value: string;\n validation: { hasError: boolean; helperText?: React.ReactNode };\n disabled: boolean;\n required: boolean;\n fullWidth: boolean;\n icon?: React.ReactNode;\n isValid: boolean;\n selectedCountry?: CountryData;\n anchorEl: HTMLElement | null;\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n onFocus: () => void;\n onBlur: () => void;\n onCountryOpen: (event: React.MouseEvent<HTMLElement>) => void;\n onCountryOpenViaKeyboard: (element: HTMLElement) => void;\n copy: PhoneInputCopy;\n}> = ({\n TextFieldComponent,\n copy,\n variant,\n label,\n placeholder,\n value,\n validation,\n disabled,\n required,\n fullWidth,\n icon,\n isValid,\n selectedCountry,\n anchorEl,\n onChange,\n onFocus,\n onBlur,\n onCountryOpen,\n onCountryOpenViaKeyboard }) => (\n <TextFieldComponent\n variant={variant === 'glass' ? 'outlined' : variant}\n label={label}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n onFocus={onFocus}\n onBlur={onBlur}\n error={validation.hasError}\n helperText={validation.helperText}\n disabled={disabled}\n required={required}\n fullWidth={fullWidth}\n type=\"tel\"\n data-testid=\"phone-input-field\"\n InputProps={{\n startAdornment: (\n <CountryAdornment\n selectCountryLabel={copy.selectCountry}\n country={selectedCountry}\n menuOpen={Boolean(anchorEl)}\n onOpen={onCountryOpen}\n onOpenViaKeyboard={onCountryOpenViaKeyboard}\n />\n ),\n endAdornment: <ValidityAdornment icon={icon} isValid={isValid} /> }}\n sx={{\n '& input': {\n letterSpacing: '0.5px' } }}\n />\n);\n\nconst PHONE_INPUT_DEFAULTS = {\n variant: 'outlined',\n label: 'Phone Number',\n placeholder: 'Enter phone number',\n icon: <PhoneIcon />,\n defaultValue: '',\n countryCode: 'US',\n floating: false,\n error: false,\n disabled: false,\n required: false,\n fullWidth: true } satisfies Partial<PhoneInputProps>;\n\n// Drops explicitly-undefined props before the merge, so `prop={undefined}` falls\n// back to the default exactly as a destructuring default would. Eleven separate\n// destructuring defaults were most of this component's branch count.\nconst definedProps = (props: PhoneInputProps): Partial<PhoneInputProps> =>\n Object.fromEntries(\n Object.entries(props).filter(([, value]) => value !== undefined),\n ) as Partial<PhoneInputProps>;\n\nconst CountryAdornment: React.FC<{\n country?: CountryData;\n menuOpen: boolean;\n onOpen: (event: React.MouseEvent<HTMLElement>) => void;\n onOpenViaKeyboard: (element: HTMLElement) => void;\n selectCountryLabel: string;\n}> = ({ country, menuOpen, onOpen, onOpenViaKeyboard, selectCountryLabel }) => (\n <InputAdornment position=\"start\" data-testid=\"phone-input-start-adornment\">\n <CountrySelector\n onClick={onOpen}\n role=\"button\"\n aria-label={selectCountryLabel}\n aria-expanded={menuOpen}\n tabIndex={0}\n data-testid=\"country-selector\"\n onKeyDown={(e) => {\n if (e.key !== 'Enter' && e.key !== ' ') return;\n e.preventDefault();\n onOpenViaKeyboard(e.currentTarget as HTMLElement);\n }}\n >\n <Typography variant=\"h6\" component=\"span\" sx={{ mr: 0.5 }} data-testid=\"country-flag\">\n {country?.flag}\n </Typography>\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n sx={{ mr: 0.5 }}\n data-testid=\"country-dial-code\"\n >\n {country?.dial}\n </Typography>\n <ArrowDropDown fontSize=\"small\" data-testid=\"country-dropdown-icon\" />\n </CountrySelector>\n </InputAdornment>\n);\n\n// The trailing icon turns green once the number validates.\nconst ValidityAdornment: React.FC<{ icon?: React.ReactNode; isValid: boolean }> = ({\n icon,\n isValid }) => {\n const theme = useTheme();\n\n if (!icon) return null;\n\n return (\n <InputAdornment position=\"end\" data-testid=\"phone-input-end-adornment\">\n <Box\n sx={{\n color: isValid ? theme.palette.success.main : theme.palette.text.secondary,\n transition: 'color 0.3s ease' }}\n data-testid=\"phone-input-icon\"\n >\n {icon}\n </Box>\n </InputAdornment>\n );\n};\n\nconst CountryPicker: React.FC<{\n anchorEl: HTMLElement | null;\n selectedCode?: CountryData['code'];\n onClose: () => void;\n onSelect: (country: CountryData) => void;\n}> = ({ anchorEl, selectedCode, onClose, onSelect }) => {\n const theme = useTheme();\n\n return (\n <CountryMenu\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={onClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left' }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left' }}\n data-testid=\"country-menu\"\n >\n {countries.map((country) => (\n <MenuItem\n key={country.code}\n onClick={() => onSelect(country)}\n selected={country.code === selectedCode}\n data-testid={`country-option-${country.code}`}\n sx={{\n '&:hover': {\n background: `linear-gradient(135deg, ${alpha(theme.palette.primary.main, 0.1)} 0%, ${alpha(theme.palette.primary.main, 0.05)} 100%)` } }}\n >\n <ListItemIcon sx={{ minWidth: 36 }}>\n <Typography variant=\"h5\" component=\"span\">\n {country.flag}\n </Typography>\n </ListItemIcon>\n <ListItemText\n primary={country.name}\n secondary={country.dial}\n primaryTypographyProps={{ fontSize: '0.9rem' }}\n secondaryTypographyProps={{ fontSize: '0.8rem' }}\n />\n </MenuItem>\n ))}\n </CountryMenu>\n );\n};\n\n// The field shows an error either because the caller says so, or because what\n// has been typed does not validate and the user has moved on.\nconst resolveValidation = ({\n error,\n errorMessage,\n isValid,\n value,\n isFocused,\n helper,\n countryName,\n copy }: {\n error: boolean;\n errorMessage?: string;\n isValid: boolean;\n value: string;\n isFocused: boolean;\n helper?: React.ReactNode;\n countryName?: string;\n copy: PhoneInputCopy;\n}) => {\n const looksInvalid = !isValid && value !== '' && !isFocused;\n\n return {\n hasError: error || looksInvalid,\n helperText:\n errorMessage ||\n (looksInvalid ? copy.invalidNumber(countryName || copy.unknownCountry) : helper) };\n};\n\nexport const PhoneInput: FC<PhoneInputProps> = (props) => {\n const { copy } = props;\n const {\n variant,\n label,\n placeholder,\n icon,\n defaultValue,\n countryCode: initialCountryCode,\n floating,\n onChange,\n helper,\n error,\n errorMessage,\n disabled,\n required,\n fullWidth } = { ...PHONE_INPUT_DEFAULTS, ...definedProps(props) };\n const {\n value,\n selectedCountry,\n anchorEl,\n isValid,\n isFocused,\n setIsFocused,\n setAnchorEl,\n handleCountryClick,\n handleCountryClose,\n handleCountrySelect,\n handleChange,\n handleBlur } = usePhoneInput({ defaultValue, initialCountryCode, onChange });\n\n const validation = resolveValidation({\n error,\n errorMessage,\n isValid,\n value,\n isFocused,\n helper,\n countryName: selectedCountry?.name,\n copy });\n\n const TextFieldComponent = variant === 'glass' ? GlassTextField : FieldTextField;\n\n return (\n <Box data-testid=\"phone-input-container\">\n <PhoneField\n copy={copy}\n TextFieldComponent={TextFieldComponent}\n variant={variant}\n label={floating ? undefined : label}\n placeholder={placeholder}\n value={value}\n validation={validation}\n disabled={disabled}\n required={required}\n fullWidth={fullWidth}\n icon={icon}\n isValid={isValid}\n selectedCountry={selectedCountry}\n anchorEl={anchorEl}\n onChange={handleChange}\n onFocus={() => setIsFocused(true)}\n onBlur={handleBlur}\n onCountryOpen={handleCountryClick}\n onCountryOpenViaKeyboard={setAnchorEl}\n />\n\n <CountryPicker\n anchorEl={anchorEl}\n selectedCode={selectedCountry?.code}\n onClose={handleCountryClose}\n onSelect={handleCountrySelect}\n />\n </Box>\n );\n};\n\n// Export default\nexport default PhoneInput;\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/Badge/Badge.variants.ts"],"sourcesContent":["import type { CSSObject, Theme } from '@mui/material/styles/index.js';\nimport { alpha } from '@mui/material/styles/index.js';\n\nimport {\n BADGE_DESTRUCTIVE_FONT_WEIGHT,\n GLASS_BACKGROUND_ALPHA,\n GLASS_BLUR_PX,\n GLASS_BORDER_ALPHA,\n GLASS_INSET_HIGHLIGHT_ALPHA,\n GLASS_SATURATE,\n OUTLINE_BORDER_WIDTH,\n SECONDARY_BACKGROUND_ALPHA,\n SECONDARY_BORDER_ALPHA,\n} from './Badge.metrics';\nimport type { BadgePalette, BadgeSizeStyles } from './Badge.styles';\nimport { absoluteInk, onMedia, sheen } from '../../../tokens/ink';\n\nconst BADGE_VARIANTS: Record<\n string,\n (theme: Theme, colorPalette: BadgePalette, sizeStyles: BadgeSizeStyles) => CSSObject\n> = {\n default: (theme, colorPalette, sizeStyles) => ({\n backgroundColor: colorPalette.main,\n color:\n colorPalette.contrastText || theme.palette.getContrastText?.(colorPalette.main) || absoluteInk(theme).white,\n minWidth: sizeStyles.minWidth,\n height: sizeStyles.height,\n fontSize: sizeStyles.fontSize,\n padding: sizeStyles.padding,\n borderRadius: sizeStyles.height / 2 }),\n dot: (theme, colorPalette, sizeStyles) => ({\n backgroundColor: colorPalette.main,\n width: sizeStyles.dotSize,\n height: sizeStyles.dotSize,\n minWidth: sizeStyles.dotSize,\n borderRadius: '50%',\n padding: 0 }),\n count: (theme, colorPalette, sizeStyles) => ({\n backgroundColor: colorPalette.main,\n color:\n colorPalette.contrastText || theme.palette.getContrastText?.(colorPalette.main) || absoluteInk(theme).white,\n minWidth: sizeStyles.minWidth,\n height: sizeStyles.height,\n fontSize: sizeStyles.fontSize,\n padding: sizeStyles.padding,\n borderRadius: '50%' }),\n gradient: (theme, colorPalette, sizeStyles) => ({\n background: `linear-gradient(135deg, ${colorPalette.main} 0%, ${colorPalette.dark || colorPalette.main} 100%)`,\n color: onMedia(theme),\n minWidth: sizeStyles.minWidth,\n height: sizeStyles.height,\n fontSize: sizeStyles.fontSize,\n padding: sizeStyles.padding,\n borderRadius: sizeStyles.height / 2 }),\n glass: (theme, colorPalette, sizeStyles) => ({\n backgroundColor: alpha(colorPalette.main, GLASS_BACKGROUND_ALPHA),\n backdropFilter: `blur(${GLASS_BLUR_PX}px) saturate(${GLASS_SATURATE * 100}%)`,\n WebkitBackdropFilter: `blur(${GLASS_BLUR_PX}px) saturate(${GLASS_SATURATE * 100}%)`,\n border: `1px solid ${alpha(colorPalette.main, GLASS_BORDER_ALPHA)}`,\n color: colorPalette.main,\n minWidth: sizeStyles.minWidth,\n height: sizeStyles.height,\n fontSize: sizeStyles.fontSize,\n padding: sizeStyles.padding,\n borderRadius: sizeStyles.height / 2,\n boxShadow: `inset 0 1px 1px ${sheen(theme, GLASS_INSET_HIGHLIGHT_ALPHA)}` }),\n outline: (theme, colorPalette, sizeStyles) => ({\n backgroundColor: 'transparent',\n border: `${OUTLINE_BORDER_WIDTH}px solid ${colorPalette.main}`,\n color: colorPalette.main,\n minWidth: sizeStyles.minWidth,\n height: sizeStyles.height,\n fontSize: sizeStyles.fontSize,\n padding: sizeStyles.padding,\n borderRadius: sizeStyles.height / 2 }),\n secondary: (theme, colorPalette, sizeStyles) => ({\n backgroundColor: alpha(colorPalette.main, SECONDARY_BACKGROUND_ALPHA),\n color: colorPalette.main,\n border: `1px solid ${alpha(colorPalette.main, SECONDARY_BORDER_ALPHA)}`,\n minWidth: sizeStyles.minWidth,\n height: sizeStyles.height,\n fontSize: sizeStyles.fontSize,\n padding: sizeStyles.padding,\n borderRadius: sizeStyles.height / 2 }),\n destructive: (theme, colorPalette, sizeStyles) => ({\n backgroundColor: theme.palette.error.main,\n color: theme.palette.error.contrastText,\n minWidth: sizeStyles.minWidth,\n height: sizeStyles.height,\n fontSize: sizeStyles.fontSize,\n padding: sizeStyles.padding,\n borderRadius: sizeStyles.height / 2,\n fontWeight: BADGE_DESTRUCTIVE_FONT_WEIGHT }),\n success: (theme, colorPalette, sizeStyles) => ({\n backgroundColor: theme.palette.success.main,\n color: theme.palette.success.contrastText,\n minWidth: sizeStyles.minWidth,\n height: sizeStyles.height,\n fontSize: sizeStyles.fontSize,\n padding: sizeStyles.padding,\n borderRadius: sizeStyles.height / 2 }),\n warning: (theme, colorPalette, sizeStyles) => ({\n backgroundColor: theme.palette.warning.main,\n color: theme.palette.warning.contrastText,\n minWidth: sizeStyles.minWidth,\n height: sizeStyles.height,\n fontSize: sizeStyles.fontSize,\n padding: sizeStyles.padding,\n borderRadius: sizeStyles.height / 2 }) };\n\nexport const badgeVariantStyles = (\n theme: Theme,\n colorPalette: BadgePalette,\n sizeStyles: BadgeSizeStyles,\n customVariant?: string,\n): CSSObject =>\n customVariant ? (BADGE_VARIANTS[customVariant]?.(theme, colorPalette, sizeStyles) ?? {}) : {};\n\n"],"mappings":";;;;;;;;;;;;;;;;;;AACA,SAAS,aAAa;AAgBtB,IAAM,iBAGF;AAAA,EACF,SAAS,CAAC,OAAO,cAAc,gBAAgB;AAAA,IACzC,iBAAiB,aAAa;AAAA,IAC9B,OACE,aAAa,gBAAgB,MAAM,QAAQ,kBAAkB,aAAa,IAAI,KAAK,YAAY,KAAK,EAAE;AAAA,IACxG,UAAU,WAAW;AAAA,IACrB,QAAQ,WAAW;AAAA,IACnB,UAAU,WAAW;AAAA,IACrB,SAAS,WAAW;AAAA,IACpB,cAAc,WAAW,SAAS;AAAA,EAAE;AAAA,EAC1C,KAAK,CAAC,OAAO,cAAc,gBAAgB;AAAA,IACrC,iBAAiB,aAAa;AAAA,IAC9B,OAAO,WAAW;AAAA,IAClB,QAAQ,WAAW;AAAA,IACnB,UAAU,WAAW;AAAA,IACrB,cAAc;AAAA,IACd,SAAS;AAAA,EAAE;AAAA,EACjB,OAAO,CAAC,OAAO,cAAc,gBAAgB;AAAA,IACvC,iBAAiB,aAAa;AAAA,IAC9B,OACE,aAAa,gBAAgB,MAAM,QAAQ,kBAAkB,aAAa,IAAI,KAAK,YAAY,KAAK,EAAE;AAAA,IACxG,UAAU,WAAW;AAAA,IACrB,QAAQ,WAAW;AAAA,IACnB,UAAU,WAAW;AAAA,IACrB,SAAS,WAAW;AAAA,IACpB,cAAc;AAAA,EAAM;AAAA,EAC1B,UAAU,CAAC,OAAO,cAAc,gBAAgB;AAAA,IAC1C,YAAY,2BAA2B,aAAa,IAAI,QAAQ,aAAa,QAAQ,aAAa,IAAI;AAAA,IACtG,OAAO,QAAQ,KAAK;AAAA,IACpB,UAAU,WAAW;AAAA,IACrB,QAAQ,WAAW;AAAA,IACnB,UAAU,WAAW;AAAA,IACrB,SAAS,WAAW;AAAA,IACpB,cAAc,WAAW,SAAS;AAAA,EAAE;AAAA,EAC1C,OAAO,CAAC,OAAO,cAAc,gBAAgB;AAAA,IACvC,iBAAiB,MAAM,aAAa,MAAM,sBAAsB;AAAA,IAChE,gBAAgB,QAAQ,aAAa,gBAAgB,iBAAiB,GAAG;AAAA,IACzE,sBAAsB,QAAQ,aAAa,gBAAgB,iBAAiB,GAAG;AAAA,IAC/E,QAAQ,aAAa,MAAM,aAAa,MAAM,kBAAkB,CAAC;AAAA,IACjE,OAAO,aAAa;AAAA,IACpB,UAAU,WAAW;AAAA,IACrB,QAAQ,WAAW;AAAA,IACnB,UAAU,WAAW;AAAA,IACrB,SAAS,WAAW;AAAA,IACpB,cAAc,WAAW,SAAS;AAAA,IAClC,WAAW,mBAAmB,MAAM,OAAO,2BAA2B,CAAC;AAAA,EAAG;AAAA,EAChF,SAAS,CAAC,OAAO,cAAc,gBAAgB;AAAA,IACzC,iBAAiB;AAAA,IACjB,QAAQ,GAAG,oBAAoB,YAAY,aAAa,IAAI;AAAA,IAC5D,OAAO,aAAa;AAAA,IACpB,UAAU,WAAW;AAAA,IACrB,QAAQ,WAAW;AAAA,IACnB,UAAU,WAAW;AAAA,IACrB,SAAS,WAAW;AAAA,IACpB,cAAc,WAAW,SAAS;AAAA,EAAE;AAAA,EAC1C,WAAW,CAAC,OAAO,cAAc,gBAAgB;AAAA,IAC3C,iBAAiB,MAAM,aAAa,MAAM,0BAA0B;AAAA,IACpE,OAAO,aAAa;AAAA,IACpB,QAAQ,aAAa,MAAM,aAAa,MAAM,sBAAsB,CAAC;AAAA,IACrE,UAAU,WAAW;AAAA,IACrB,QAAQ,WAAW;AAAA,IACnB,UAAU,WAAW;AAAA,IACrB,SAAS,WAAW;AAAA,IACpB,cAAc,WAAW,SAAS;AAAA,EAAE;AAAA,EAC1C,aAAa,CAAC,OAAO,cAAc,gBAAgB;AAAA,IAC7C,iBAAiB,MAAM,QAAQ,MAAM;AAAA,IACrC,OAAO,MAAM,QAAQ,MAAM;AAAA,IAC3B,UAAU,WAAW;AAAA,IACrB,QAAQ,WAAW;AAAA,IACnB,UAAU,WAAW;AAAA,IACrB,SAAS,WAAW;AAAA,IACpB,cAAc,WAAW,SAAS;AAAA,IAClC,YAAY;AAAA,EAA8B;AAAA,EAChD,SAAS,CAAC,OAAO,cAAc,gBAAgB;AAAA,IACzC,iBAAiB,MAAM,QAAQ,QAAQ;AAAA,IACvC,OAAO,MAAM,QAAQ,QAAQ;AAAA,IAC7B,UAAU,WAAW;AAAA,IACrB,QAAQ,WAAW;AAAA,IACnB,UAAU,WAAW;AAAA,IACrB,SAAS,WAAW;AAAA,IACpB,cAAc,WAAW,SAAS;AAAA,EAAE;AAAA,EAC1C,SAAS,CAAC,OAAO,cAAc,gBAAgB;AAAA,IACzC,iBAAiB,MAAM,QAAQ,QAAQ;AAAA,IACvC,OAAO,MAAM,QAAQ,QAAQ;AAAA,IAC7B,UAAU,WAAW;AAAA,IACrB,QAAQ,WAAW;AAAA,IACnB,UAAU,WAAW;AAAA,IACrB,SAAS,WAAW;AAAA,IACpB,cAAc,WAAW,SAAS;AAAA,EAAE;AAAG;AAExC,IAAM,qBAAqB,CAChC,OACA,cACA,YACA,kBAEA,gBAAiB,eAAe,aAAa,IAAI,OAAO,cAAc,UAAU,KAAK,CAAC,IAAK,CAAC;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/Lightbox/LightboxThumbnails.tsx"],"sourcesContent":["import PlayIcon from '@mui/icons-material/PlayArrow';\nimport Box from '@mui/material/Box/index.js';\nimport type { Theme } from '@mui/material/styles/index.js';\nimport type { FC } from 'react';\nimport React from 'react';\n\nimport { thumbnailStripSx } from './Lightbox.constants';\nimport type { LightboxItem } from './Lightbox.types';\nimport { onMedia, sheen } from '../../../tokens/ink';\n\nconst THUMB_WIDTH = 60;\nconst THUMB_HEIGHT = 40;\n\nconst VideoThumbnail: FC = () => (\n <Box\n sx={{\n width: '100%',\n height: '100%',\n background: (theme: Theme) => sheen(theme, 0.1),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <PlayIcon sx={{ color: onMedia, fontSize: 16 }} />\n </Box>\n);\n\nexport interface LightboxThumbnailsProps {\n items: LightboxItem[];\n currentIndex: number;\n testId: (suffix: string) => string;\n onSelect: (index: number) => void;\n}\n\nexport const LightboxThumbnails: FC<LightboxThumbnailsProps> = ({\n items,\n currentIndex,\n testId,\n onSelect,\n}) => (\n <Box\n sx={{\n ...thumbnailStripSx,\n position: 'absolute',\n bottom: 16,\n left: '50%',\n transform: 'translateX(-50%)',\n display: 'flex',\n gap: 1,\n maxWidth: '90vw',\n overflowX: 'auto',\n padding: 1,\n }}\n data-testid={testId('thumbnails')}\n >\n {items.map((item, index) => (\n <Box\n key={`${item.src}-${index}`}\n onClick={() => onSelect(index)}\n sx={{\n width: THUMB_WIDTH,\n height: THUMB_HEIGHT,\n cursor: 'pointer',\n border: currentIndex === index ? (theme: Theme) => `2px solid ${onMedia(theme)}` : '2px solid transparent',\n borderRadius: 0.5,\n overflow: 'hidden',\n flexShrink: 0,\n '&:hover': { border: (theme: Theme) => `2px solid ${sheen(theme, 0.7)}` },\n }}\n data-testid={testId(`thumbnail-${index}`)}\n >\n {item.type === 'video' ? (\n <VideoThumbnail />\n ) : (\n <img\n src={item.src}\n alt={item.alt || `Thumbnail ${index + 1}`}\n style={{ width: '100%', height: '100%', objectFit: 'cover' }}\n />\n )}\n </Box>\n ))}\n </Box>\n);\n"],"mappings":";;;;;;;;;AAAA,OAAO,cAAc;AACrB,OAAO,SAAS;AAuBZ;AAdJ,IAAM,cAAc;AACpB,IAAM,eAAe;AAErB,IAAM,iBAAqB,MACzB;AAAA,EAAC;AAAA;AAAA,IACC,IAAI;AAAA,MACF,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,YAAY,CAAC,UAAiB,MAAM,OAAO,GAAG;AAAA,MAC9C,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,IAClB;AAAA,IAEA,8BAAC,YAAS,IAAI,EAAE,OAAO,SAAS,UAAU,GAAG,GAAG;AAAA;AAClD;AAUK,IAAM,qBAAkD,CAAC;AAAA,EAC9D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MACE;AAAA,EAAC;AAAA;AAAA,IACC,IAAI;AAAA,MACF,GAAG;AAAA,MACH,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,WAAW;AAAA,MACX,SAAS;AAAA,MACT,KAAK;AAAA,MACL,UAAU;AAAA,MACV,WAAW;AAAA,MACX,SAAS;AAAA,IACX;AAAA,IACA,eAAa,OAAO,YAAY;AAAA,IAE/B,gBAAM,IAAI,CAAC,MAAM,UAChB;AAAA,MAAC;AAAA;AAAA,QAEC,SAAS,MAAM,SAAS,KAAK;AAAA,QAC7B,IAAI;AAAA,UACF,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,QAAQ,iBAAiB,QAAQ,CAAC,UAAiB,aAAa,QAAQ,KAAK,CAAC,KAAK;AAAA,UACnF,cAAc;AAAA,UACd,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,WAAW,EAAE,QAAQ,CAAC,UAAiB,aAAa,MAAM,OAAO,GAAG,CAAC,GAAG;AAAA,QAC1E;AAAA,QACA,eAAa,OAAO,aAAa,KAAK,EAAE;AAAA,QAEvC,eAAK,SAAS,UACb,oBAAC,kBAAe,IAEhB;AAAA,UAAC;AAAA;AAAA,YACC,KAAK,KAAK;AAAA,YACV,KAAK,KAAK,OAAO,aAAa,QAAQ,CAAC;AAAA,YACvC,OAAO,EAAE,OAAO,QAAQ,QAAQ,QAAQ,WAAW,QAAQ;AAAA;AAAA,QAC7D;AAAA;AAAA,MArBG,GAAG,KAAK,GAAG,IAAI,KAAK;AAAA,IAuB3B,CACD;AAAA;AACH;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/DataViews/data-views-export.tsx"],"sourcesContent":["\"use client\";\n\nimport DownloadRoundedIcon from \"@mui/icons-material/DownloadRounded\";\nimport KeyboardArrowDownRoundedIcon from \"@mui/icons-material/KeyboardArrowDownRounded\";\nimport CircularProgress from \"@mui/material/CircularProgress/index.js\";\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 type { DataViewQuery } from \"./data-views-types\";\n\n/**\n * EXPORT — the current QUERY, never the rendered page.\n *\n * Exporting what happens to be on screen is the single most common bug in an\n * admin table: the operator filtered 214 records, sees 25, exports, and gets\n * 25 — with nothing anywhere saying so. So this control does not touch the\n * loaded rows at all. It hands the host the same `DataViewQuery` the grid is\n * showing, unpaginated, and the HOST re-queries the backend — the same\n * division as everywhere else here: the component emits, the host fetches.\n *\n * The menu states the number it is about to export before the click, so the\n * two possible answers (the selection, or the whole filtered set) are never a\n * guess.\n */\n\n/** What a host can be asked to produce. */\nexport type DataViewExportFormat = \"xlsx\" | \"csv\" | \"json\";\n\n/** The request handed to the host when the operator picks a format. */\nexport interface DataViewExportRequest {\n format: DataViewExportFormat;\n /**\n * The live query with `page: 1` and `pageSize` set to the whole matched\n * total — i.e. \"everything this filter selects\", not this page.\n */\n query: DataViewQuery;\n /**\n * The selected row ids, when the operator has a selection. The host filters\n * the re-queried rows to these; absent means the whole filtered set.\n */\n selectedIds?: Array<string | number>;\n /** The visible columns, in the operator's current order. */\n columns: { id: string; label: string }[];\n}\n\n/** Injected export. Absent ⇒ no Exportar control, exactly like `renderCard`. */\nexport interface DataViewExport {\n /** Runs the export. Awaited, so the trigger can show it is working. */\n onExport: (request: DataViewExportRequest) => Promise<void> | void;\n /** Formats to offer, in menu order. Defaults to all three. */\n formats?: DataViewExportFormat[];\n}\n\n/** One line per format: what it is, and when to reach for it. */\n\nconst ALL_FORMATS: DataViewExportFormat[] = [\"xlsx\", \"csv\", \"json\"];\n\ninterface ExportMenuProps {\n config: DataViewExport;\n /** The live query — copied and unpaginated before it reaches the host. */\n query: DataViewQuery;\n /** The unpaginated total, so the label can state what \"tudo\" means. */\n totalCount: number;\n selectedIds: Array<string | number>;\n columns: { id: string; label: string }[];\n testIdPrefix: string;\n /** Render icon-only (measured upstream). */\n compact?: boolean;\n}\n\n/** \"Exportando 214 itens filtrados\" / \"3 itens selecionados\" — never a guess. */\nfunction scopeLabel(selected: number, total: number): string {\n if (selected > 0) {\n return `${selected} ${selected === 1 ? \"item selecionado\" : \"itens selecionados\"}`;\n }\n return `${total} ${total === 1 ? \"item filtrado\" : \"itens filtrados\"}`;\n}\n\n/** The trigger. Shows a spinner while the host's export is still running. */\nfunction ExportTrigger({\n busy,\n onOpen,\n testIdPrefix,\n compact,\n}: {\n busy: boolean;\n onOpen: (anchor: HTMLElement) => void;\n testIdPrefix: string;\n /** Icon only — step 2 of the toolbar's degradation ladder. */\n compact?: boolean;\n}): React.JSX.Element {\n const copy = useDataViewsCopy();\n return (\n <Button\n variant=\"outline\"\n size=\"sm\"\n color=\"neutral\"\n disabled={busy}\n onClick={(event) => onOpen(event.currentTarget as HTMLElement)}\n dataTestId={`${testIdPrefix}-export-trigger`}\n aria-label={copy.export.trigger}\n // The label is gone, so the tooltip is the only thing naming the control.\n title={compact ? copy.export.trigger : undefined}\n >\n <Box component=\"span\" sx={{ display: \"inline-flex\", alignItems: \"center\", gap: 0.5 }}>\n {busy ? <CircularProgress size={14} /> : <DownloadRoundedIcon fontSize=\"small\" />}\n {!compact && (\n <Box component=\"span\" sx={{ display: { xs: \"none\", sm: \"inline\" } }}>\n {copy.export.triggerLabel}\n </Box>\n )}\n {/* Dropped with the label — see the note on the Exibir trigger. */}\n {!compact && <KeyboardArrowDownRoundedIcon fontSize=\"small\" />}\n </Box>\n </Button>\n );\n}\n\n/** One format row: what it produces, and when to reach for it. */\nfunction FormatRow({\n format,\n onPick,\n testIdPrefix,\n}: {\n format: DataViewExportFormat;\n onPick: () => void;\n testIdPrefix: string;\n}): React.JSX.Element {\n const copy = useDataViewsCopy();\n return (\n <Box\n component=\"button\"\n type=\"button\"\n onClick={onPick}\n data-testid={`${testIdPrefix}-export-${format}`}\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n width: \"100%\",\n px: 1.5,\n py: 1,\n border: 0,\n background: \"none\",\n cursor: \"pointer\",\n font: \"inherit\",\n textAlign: \"left\",\n \"&:hover\": { bgcolor: \"action.hover\" },\n }}\n >\n <Box component=\"span\" sx={{ fontSize: \"0.8125rem\" }}>\n {copy.export.formats[format]?.label ?? format}\n </Box>\n <Box component=\"span\" sx={{ fontSize: \"0.6875rem\", color: \"text.disabled\" }}>\n {copy.export.formats[format]?.hint ?? \"\"}\n </Box>\n </Box>\n );\n}\n\n/** The panel: what is about to be exported, then the formats. */\nfunction ExportPanel({\n formats,\n selectedCount,\n totalCount,\n columnCount,\n onPick,\n testIdPrefix,\n}: {\n formats: DataViewExportFormat[];\n selectedCount: number;\n totalCount: number;\n columnCount: number;\n onPick: (format: DataViewExportFormat) => void;\n testIdPrefix: string;\n}): React.JSX.Element {\n const copy = useDataViewsCopy();\n return (\n <Box data-testid={`${testIdPrefix}-export-panel`}>\n <Box sx={{ px: 1.5, pt: 1, pb: 1, borderBottom: 1, borderColor: \"divider\" }}>\n <Text variant=\"caption\" as=\"p\">\n <Box component=\"span\" data-testid={`${testIdPrefix}-export-scope`}>\n Exportando {scopeLabel(selectedCount, totalCount)}\n </Box>\n </Text>\n <Text variant=\"caption\" as=\"p\">\n <Box component=\"span\" sx={{ color: \"text.disabled\" }}>\n {copy.export.visibleColumns(columnCount)}\n </Box>\n </Text>\n </Box>\n {formats.map((format) => (\n <FormatRow\n key={format}\n format={format}\n onPick={() => onPick(format)}\n testIdPrefix={testIdPrefix}\n />\n ))}\n </Box>\n );\n}\n\n/** The toolbar's Exportar control. Renders nothing when no host wired it. */\nexport function DataViewsExportMenu({\n config,\n query,\n totalCount,\n selectedIds,\n columns,\n testIdPrefix,\n compact,\n}: ExportMenuProps): React.JSX.Element {\n const [anchor, setAnchor] = useState<HTMLElement | null>(null);\n const [busy, setBusy] = useState(false);\n\n const run = async (format: DataViewExportFormat): Promise<void> => {\n setAnchor(null);\n setBusy(true);\n try {\n await config.onExport({\n format,\n // UNPAGINATED: page 1 of a page as large as the whole result. The host\n // re-queries with this; nothing here reads the loaded rows.\n query: { ...query, page: 1, pageSize: Math.max(1, totalCount) },\n selectedIds: selectedIds.length > 0 ? [...selectedIds] : undefined,\n columns,\n });\n } finally {\n setBusy(false);\n }\n };\n\n return (\n <>\n <ExportTrigger busy={busy} onOpen={setAnchor} testIdPrefix={testIdPrefix} compact={compact} />\n <Popover\n open={Boolean(anchor)}\n anchorEl={anchor}\n onClose={() => setAnchor(null)}\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"right\" }}\n transformOrigin={{ vertical: \"top\", horizontal: \"right\" }}\n slotProps={{ paper: { sx: { width: 260, maxWidth: \"calc(100vw - 32px)\" } } }}\n >\n <ExportPanel\n formats={config.formats ?? ALL_FORMATS}\n selectedCount={selectedIds.length}\n totalCount={totalCount}\n columnCount={columns.length}\n onPick={(format) => void run(format)}\n testIdPrefix={testIdPrefix}\n />\n </Popover>\n </>\n );\n}\n"],"mappings":"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","names":["default"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/feedback/Sonner/SonnerToast.tsx"],"sourcesContent":["import SuccessIcon from '@mui/icons-material/CheckCircle';\nimport CloseIcon from '@mui/icons-material/Close';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport InfoIcon from '@mui/icons-material/Info';\nimport WarningIcon from '@mui/icons-material/Warning';\nimport Box from '@mui/material/Box/index.js';\nimport Button from '@mui/material/Button/index.js';\nimport CircularProgress from '@mui/material/CircularProgress/index.js';\nimport Collapse from '@mui/material/Collapse/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, useTheme } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { shadowInk } from '../../../tokens/ink';\n\nimport type { SonnerItem } from './Sonner.types';\nimport type { SonnerProps } from './Sonner.types';\n\nconst renderToastIcon = (icon: SonnerProps['icon'], type: SonnerProps['type']) => {\n if (icon) return icon;\n\n switch (type) {\n case 'success':\n return <SuccessIcon sx={{ fontSize: 20, color: 'success.main' }} />;\n case 'error':\n return <ErrorIcon sx={{ fontSize: 20, color: 'error.main' }} />;\n case 'warning':\n return <WarningIcon sx={{ fontSize: 20, color: 'warning.main' }} />;\n case 'info':\n return <InfoIcon sx={{ fontSize: 20, color: 'info.main' }} />;\n case 'loading':\n return <CircularProgress size={16} />;\n default:\n return null;\n }\n};\n\n// Errors and toasts flagged important interrupt the screen reader; the rest wait\n// for the next pause. Computed once instead of duplicating the same condition\n// across the role and aria-live attributes.\nconst resolveToastAnnouncement = (important: boolean, type: SonnerProps['type']) => {\n const interrupts = important || type === 'error';\n\n return {\n role: interrupts ? 'alert' : 'status',\n live: (interrupts ? 'assertive' : 'polite') as 'assertive' | 'polite',\n };\n};\n\nconst buildToastStyles = (\n theme: Theme,\n variant: SonnerProps['variant'],\n visible: boolean,\n): CSSObject => {\n const baseStyles: CSSObject = {\n borderRadius: theme.spacing(1.5),\n border: `1px solid ${theme.palette.divider}`,\n backgroundColor: theme.palette.background.paper,\n boxShadow: theme.shadows[4],\n transition: theme.transitions.create(['all', 'transform', 'opacity'], {\n duration: theme.transitions.duration.short,\n }),\n transform: visible ? 'scale(1)' : 'scale(0.95)',\n opacity: visible ? 1 : 0,\n };\n\n switch (variant) {\n case 'glass':\n return {\n ...baseStyles,\n backgroundColor: alpha(theme.palette.background.paper, 0.1),\n backdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(theme.palette.primary.main, 0.2)}`,\n boxShadow: `0 8px 32px ${shadowInk(theme, 0.1)}`,\n };\n\n case 'minimal':\n return {\n ...baseStyles,\n backgroundColor: theme.palette.background.default,\n border: 'none',\n boxShadow: 'none',\n borderLeft: `4px solid ${theme.palette.primary.main}`,\n borderRadius: 0,\n };\n\n default:\n return baseStyles;\n }\n};\n\n// Title, description and the optional action row. Split out so the toast shell\n// keeps only its own concerns — announcement, styling and dismissal.\nconst ToastContent: React.FC<{\n title?: SonnerProps['title'];\n description?: SonnerProps['description'];\n important: boolean;\n action?: SonnerProps['action'];\n cancel?: SonnerProps['cancel'];\n}> = ({ title, description, important, action, cancel }) => (\n <Box sx={{ flex: 1, minWidth: 0 }}>\n {title && (\n <Typography\n variant=\"body2\"\n sx={{\n fontWeight: important ? 600 : 500,\n color: 'text.primary',\n mb: description ? 0.5 : 0,\n }}\n >\n {title}\n </Typography>\n )}\n\n {description && (\n <Typography variant=\"body2\" sx={{ color: 'text.secondary', fontSize: '0.875rem' }}>\n {description}\n </Typography>\n )}\n\n {(action || cancel) && (\n <Box sx={{ display: 'flex', gap: 1, mt: 1.5 }}>\n {action && (\n <ToastActionButton action={action} buttonVariant=\"contained\" />\n )}\n {cancel && <ToastActionButton action={cancel} buttonVariant=\"outlined\" />}\n </Box>\n )}\n </Box>\n);\n\nconst ToastActionButton: React.FC<{\n action: NonNullable<SonnerProps['action']>;\n buttonVariant: 'contained' | 'outlined';\n}> = ({ action, buttonVariant }) => (\n <Button\n size=\"small\"\n onClick={action.onClick}\n variant={buttonVariant}\n sx={{ fontSize: '0.75rem', py: 0.5, px: 1.5 }}\n >\n {action.label}\n </Button>\n);\n\nexport const SonnerToast: React.FC<SonnerItem & { onDismiss: (id: string) => void }> = ({\n id,\n title,\n description,\n type = 'default',\n variant = 'default',\n closable = true,\n dismissLabel,\n action,\n cancel,\n icon,\n important = false,\n visible,\n onDismiss,\n}) => {\n const theme = useTheme();\n const announcement = resolveToastAnnouncement(important, type);\n\n const handleDismiss = () => {\n onDismiss(id);\n };\n\n return (\n <Collapse in={visible} timeout={200}>\n <Box\n role={announcement.role}\n aria-live={announcement.live}\n aria-atomic=\"true\"\n sx={{\n ...buildToastStyles(theme, variant, visible),\n p: 2,\n mb: 1,\n minWidth: 356,\n maxWidth: 400,\n display: 'flex',\n alignItems: 'flex-start',\n gap: 1.5,\n }}\n >\n {renderToastIcon(icon, type)}\n\n <ToastContent\n title={title}\n description={description}\n important={important}\n action={action}\n cancel={cancel}\n />\n\n {closable && (\n <IconButton\n size=\"small\"\n onClick={handleDismiss}\n aria-label={dismissLabel}\n sx={{\n ml: 'auto',\n color: 'text.secondary',\n '&:hover': {\n backgroundColor: 'action.hover',\n },\n }}\n >\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n )}\n </Box>\n </Collapse>\n );\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/ContentToolbar/SavedViewsMenu.tsx"],"sourcesContent":["'use client';\n\nimport CheckIcon from '@mui/icons-material/Check';\nimport ChevronDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport KebabIcon from '@mui/icons-material/MoreVert';\nimport ViewIcon from '@mui/icons-material/Visibility';\nimport Box from '@mui/material/Box/index.js';\nimport Button from '@mui/material/Button/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport Menu from '@mui/material/Menu/index.js';\nimport MenuItem from '@mui/material/MenuItem/index.js';\nimport Popover from '@mui/material/Popover/index.js';\nimport Stack from '@mui/material/Stack/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport React, { useState } from 'react';\n\nimport type {\n SavedViewLike,\n SavedViewsLabels,\n SavedViewsMenuProps,\n} from './ContentToolbar.types';\nimport { fieldHeight } from '../../../tokens/field-height';\nimport { fieldRadiusPx } from '../../../tokens/field-radius';\n\n/** How many non-pinned views show under \"Recentes\". */\nconst RECENT_LIMIT = 5;\n\ninterface RowHandlers<V extends SavedViewLike> {\n apply: (view: V) => void;\n onEdit: (view: V) => void;\n onDelete: (view: V) => void;\n onSetDefault: (view: V) => void;\n onTogglePin: (view: V) => void;\n onToggleShare: (view: V) => void;\n}\n\nfunction DefaultTag({ label, testId }: { label: string; testId: string }): React.JSX.Element {\n return (\n <Box\n component=\"span\"\n data-testid={testId}\n sx={{ px: 0.75, py: 0.125, borderRadius: 1, fontSize: '0.7rem', bgcolor: 'primary.main', color: 'primary.contrastText' }}\n >\n {label}\n </Box>\n );\n}\n\ninterface KebabAction {\n id: string;\n label: string;\n danger?: boolean;\n run: () => void;\n}\n\n/** Build the per-view ⋮ actions; owner-only mutations follow \"Apply\". */\nfunction buildActions<V extends SavedViewLike>(\n view: V,\n handlers: RowHandlers<V>,\n labels: SavedViewsLabels,\n): KebabAction[] {\n const actions: KebabAction[] = [{ id: 'apply', label: labels.apply, run: () => handlers.apply(view) }];\n if (!view.isOwner) return actions;\n if (!view.isDefault) {\n actions.push({ id: 'default', label: labels.setDefault, run: () => handlers.onSetDefault(view) });\n }\n actions.push({ id: 'pin', label: view.pinned ? labels.unpin : labels.pin, run: () => handlers.onTogglePin(view) });\n actions.push({ id: 'share', label: view.shared ? labels.unshare : labels.share, run: () => handlers.onToggleShare(view) });\n actions.push({ id: 'edit', label: labels.edit, run: () => handlers.onEdit(view) });\n actions.push({ id: 'delete', label: labels.remove, danger: true, run: () => handlers.onDelete(view) });\n return actions;\n}\n\nfunction ViewKebab<V extends SavedViewLike>({\n view,\n handlers,\n labels,\n testIdPrefix,\n}: {\n view: V;\n handlers: RowHandlers<V>;\n labels: SavedViewsLabels;\n testIdPrefix: string;\n}): React.JSX.Element {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const close = (): void => setAnchorEl(null);\n return (\n <>\n <IconButton\n size=\"small\"\n aria-label={`${labels.apply} ${view.name}`}\n data-testid={`${testIdPrefix}-kebab-${view.id}`}\n onClick={(event) => setAnchorEl(event.currentTarget)}\n sx={{ width: 28, height: 28, color: 'text.secondary' }}\n >\n <KebabIcon sx={{ fontSize: 16 }} />\n </IconButton>\n <Menu anchorEl={anchorEl} open={Boolean(anchorEl)} onClose={close}>\n {buildActions(view, handlers, labels).map((action) => (\n <MenuItem\n key={action.id}\n data-testid={`${testIdPrefix}-item-${action.id}-${view.id}`}\n onClick={() => {\n action.run();\n close();\n }}\n sx={action.danger ? { color: 'error.main' } : undefined}\n >\n {action.label}\n </MenuItem>\n ))}\n </Menu>\n </>\n );\n}\n\nfunction ViewRow<V extends SavedViewLike>({\n view,\n handlers,\n labels,\n testIdPrefix,\n}: {\n view: V;\n handlers: RowHandlers<V>;\n labels: SavedViewsLabels;\n testIdPrefix: string;\n}): React.JSX.Element {\n return (\n <Stack direction=\"row\" spacing={1} sx={{ alignItems: 'center' }} data-testid={`${testIdPrefix}-row-${view.id}`}>\n <Box\n onClick={() => handlers.apply(view)}\n sx={{ flex: 1, minWidth: 0, cursor: 'pointer', display: 'flex', alignItems: 'center', gap: 0.75 }}\n data-testid={`${testIdPrefix}-apply-${view.id}`}\n >\n <Typography component=\"span\" sx={{ fontSize: '0.875rem' }}>\n {view.name}\n </Typography>\n {view.isDefault && <DefaultTag label={labels.defaultTag} testId={`${testIdPrefix}-default-${view.id}`} />}\n </Box>\n <ViewKebab view={view} handlers={handlers} labels={labels} testIdPrefix={testIdPrefix} />\n </Stack>\n );\n}\n\nfunction ViewSection<V extends SavedViewLike>({\n title,\n list,\n sectionKey,\n handlers,\n labels,\n testIdPrefix,\n}: {\n title: string;\n list: V[];\n sectionKey: string;\n handlers: RowHandlers<V>;\n labels: SavedViewsLabels;\n testIdPrefix: string;\n}): React.JSX.Element | null {\n if (list.length === 0) return null;\n return (\n <Box data-testid={`${testIdPrefix}-section-${sectionKey}`}>\n <Typography component=\"span\" sx={{ fontSize: '0.75rem', fontWeight: 600, color: 'text.secondary' }}>\n {title}\n </Typography>\n <Stack spacing={0.5} sx={{ mt: 0.5 }}>\n {list.map((view) => (\n <ViewRow key={view.id} view={view} handlers={handlers} labels={labels} testIdPrefix={testIdPrefix} />\n ))}\n </Stack>\n </Box>\n );\n}\n\n/** A borderless footer text button (Save current / Manage all). */\nfunction FooterButton({\n label,\n testId,\n onClick,\n}: {\n label: string;\n testId: string;\n onClick: () => void;\n}): React.JSX.Element {\n return (\n <Button variant=\"text\" size=\"small\" color=\"inherit\" onClick={onClick} data-testid={testId} sx={{ textTransform: 'none' }}>\n {label}\n </Button>\n );\n}\n\n/** The popover contents: the built-in Main vision default, saved-view sections, and footer. */\nfunction PopoverBody<V extends SavedViewLike>({\n views,\n pinned,\n recent,\n activeViewName,\n labels,\n handlers,\n onSelectMain,\n onSaveCurrent,\n onManageAll,\n testIdPrefix,\n}: {\n views: V[];\n pinned: V[];\n recent: V[];\n activeViewName?: string;\n labels: SavedViewsLabels;\n handlers: RowHandlers<V>;\n onSelectMain: () => void;\n onSaveCurrent: () => void;\n onManageAll: () => void;\n testIdPrefix: string;\n}): React.JSX.Element {\n return (\n <Stack spacing={1.5} sx={{ p: 1.5, width: 300 }} data-testid={`${testIdPrefix}-popover`}>\n {/* Built-in no-filter default, always available above the saved views. */}\n <MenuItem data-testid={`${testIdPrefix}-main`} selected={!activeViewName} onClick={onSelectMain} sx={{ borderRadius: 1, px: 1, gap: 1 }}>\n <Box component=\"span\" sx={{ flex: 1, minWidth: 0, fontSize: '0.875rem' }}>\n {labels.mainView}\n </Box>\n {!activeViewName && <CheckIcon sx={{ fontSize: 16, color: 'primary.main' }} />}\n </MenuItem>\n {views.length === 0 ? (\n <Typography sx={{ fontSize: '0.75rem', color: 'text.secondary' }}>{labels.empty}</Typography>\n ) : (\n <>\n <ViewSection title={labels.pinned} list={pinned} sectionKey=\"pinned\" handlers={handlers} labels={labels} testIdPrefix={testIdPrefix} />\n <ViewSection title={labels.recent} list={recent} sectionKey=\"recent\" handlers={handlers} labels={labels} testIdPrefix={testIdPrefix} />\n </>\n )}\n <Box sx={{ borderTop: 1, borderColor: 'divider', pt: 1 }}>\n <Stack spacing={0.5} sx={{ alignItems: 'flex-start' }}>\n <FooterButton label={labels.saveCurrent} testId={`${testIdPrefix}-save-current`} onClick={onSaveCurrent} />\n <FooterButton label={labels.manageAll} testId={`${testIdPrefix}-manage-all`} onClick={onManageAll} />\n </Stack>\n </Box>\n </Stack>\n );\n}\n\n/**\n * Stateless saved-views dropdown: a neutral trigger (styled like the sibling\n * toolbar controls) that shows `activeViewName` when a view is applied, else the\n * built-in \"Main vision\" label. The popover lists the Main vision default plus\n * pinned + recent views; a per-view ⋮ exposes owner-only mutations. This\n * component owns NO data — every action is a callback, so a page-level Connector\n * wires it to the backend.\n */\nexport function SavedViewsMenu<V extends SavedViewLike = SavedViewLike>({\n views,\n activeViewName,\n onApply,\n onSelectMain,\n onSaveCurrent,\n onEdit,\n onDelete,\n onSetDefault,\n onTogglePin,\n onToggleShare,\n onManageAll,\n labels: labelOverrides,\n testIdPrefix = 'views',\n}: SavedViewsMenuProps<V>): React.JSX.Element {\n const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null);\n const close = (): void => setAnchorEl(null);\n const runAndClose = (action: () => void) => (): void => {\n action();\n close();\n };\n const labels = labelOverrides;\n const pinned = views.filter((view) => view.pinned);\n const recent = views.filter((view) => !view.pinned).slice(0, RECENT_LIMIT);\n\n const handlers: RowHandlers<V> = {\n apply: (view) => {\n onApply(view);\n close();\n },\n onEdit,\n onDelete,\n onSetDefault,\n onTogglePin,\n onToggleShare,\n };\n\n return (\n <>\n <Button\n variant=\"text\"\n size=\"small\"\n color=\"inherit\"\n onClick={(event) => setAnchorEl(event.currentTarget)}\n data-testid={`${testIdPrefix}-button`}\n aria-haspopup=\"menu\"\n aria-expanded={Boolean(anchorEl)}\n aria-label={activeViewName ?? labels.mainView}\n sx={{ minWidth: 0, height: fieldHeight, px: 1, gap: 0.5, borderRadius: fieldRadiusPx, color: 'text.primary', textTransform: 'none', fontWeight: 600 }}\n >\n {/* Mobile: an eye icon stands in for the view name to keep the toolbar one line. */}\n <ViewIcon sx={{ fontSize: 18, display: { xs: 'inline-flex', md: 'none' } }} />\n <Box component=\"span\" sx={{ display: { xs: 'none', md: 'inline' } }}>\n {activeViewName ?? labels.mainView}\n </Box>\n <ChevronDownIcon sx={{ fontSize: 14 }} />\n </Button>\n <Popover\n open={Boolean(anchorEl)}\n anchorEl={anchorEl}\n onClose={close}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n >\n <PopoverBody\n views={views}\n pinned={pinned}\n recent={recent}\n activeViewName={activeViewName}\n labels={labels}\n handlers={handlers}\n onSelectMain={runAndClose(onSelectMain)}\n onSaveCurrent={runAndClose(onSaveCurrent)}\n onManageAll={runAndClose(onManageAll)}\n testIdPrefix={testIdPrefix}\n />\n </Popover>\n </>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/form/Form/Form.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport Stack from '@mui/material/Stack/index.js';\nimport { styled } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport type {\n FormControlProps,\n FormFieldProps,\n FormLabelProps,\n FormMessageProps,\n FormProps,\n} from './Form.types';\n\nconst StyledForm = styled('form', {\n shouldForwardProp: (prop) => prop !== 'variant',\n})<{ variant?: FormProps['variant'] }>(({ theme, variant }) => ({\n width: '100%',\n ...(variant === 'inline' && {\n display: 'flex',\n gap: theme.spacing(2),\n alignItems: 'flex-start',\n }),\n}));\n\nconst spacingMap = {\n xs: 1,\n sm: 2,\n md: 3,\n lg: 4,\n xl: 5,\n};\n\nconst maxWidthMap = {\n sm: '600px',\n md: '900px',\n lg: '1200px',\n xl: '1536px',\n full: '100%',\n};\n\nexport const Form = React.forwardRef<HTMLFormElement, FormProps>(\n ({ variant = 'vertical', maxWidth = 'full', spacing = 'md', children, dataTestId, ...props }, ref) => (\n <StyledForm ref={ref} variant={variant} role=\"form\" data-testid={dataTestId} {...props}>\n <Box sx={{ maxWidth: maxWidthMap[maxWidth], width: '100%' }}>\n {variant === 'inline' ? (\n children\n ) : (\n <Stack spacing={spacingMap[spacing]}>{children}</Stack>\n )}\n </Box>\n </StyledForm>\n ),\n);\n\nForm.displayName = 'Form';\n\n/**\n * NO ROW GAP HERE, and that is the fix rather than an omission.\n *\n * `FormLabel` already carries `marginBottom: theme.spacing(0.5)` — 4px — and it\n * carries it because it has to: every OTHER user of it (`CepField`,\n * `CategorySelect`, `CreatableSelect`, the three `total-form` fields, five of\n * `@12-apps/discounts`' builders and the host's own `currency-field`) puts a\n * bare `FormLabel` straight inside a `FormControl`, which is a plain block box\n * with no gap of its own. There, the label's own margin is the ONLY thing\n * between the label and the control.\n *\n * A `gap: theme.spacing(1)` here was a second mechanism for that one job, and in\n * a column the two ADD: 8px + 4px put `FormField` at 12px where every one of\n * those siblings sits at 4px. Measured in Chromium at 320x568 on a consuming\n * app's six-field delivery address form, the 8px a row it added pushed the\n * submit button from 561px to 609px — 41px below the fold of the smallest\n * supported phone, i.e. a checkout whose primary action is off-screen.\n *\n * That claim is about `FormLabel`'s own callers, not about the whole package:\n * `Textarea` labels its control through MUI's `InputLabel` at\n * `theme.spacing(1)` and still draws 8px. It composes nothing out of\n * `FormLabel`, so it is a separate inconsistency rather than a reason to keep\n * a second spacing here.\n *\n * ## The `columnGap` is scaffolding, and currently unreachable\n *\n * `FormFieldProps` has no `variant` and `FormField` passes none, so `variant`\n * is ALWAYS undefined and every branch below resolves to the vertical shape.\n * `Form` accepts `variant=\"horizontal\"` and `Form.md` documents it as \"labels\n * beside inputs\", but nothing carries that variant down to the field — so a\n * horizontal form draws vertical rows today. That gap is older than this\n * change and fixing it is a feature, not a spacing fix.\n *\n * The branch is kept, scoped to the COLUMN axis, so that whoever does wire it\n * up inherits the right answer: with the label beside the control, a horizontal\n * gap and a vertical margin are orthogonal and nothing double-counts. A `gap`\n * shorthand there would put the 8px back on the row axis the moment a field\n * wrapped.\n */\nconst StyledFormField = styled(Box, {\n shouldForwardProp: (prop) => prop !== 'variant',\n})<{ variant?: 'vertical' | 'horizontal' }>(\n ({ theme, variant }) => ({\n display: variant === 'horizontal' ? 'grid' : 'flex',\n flexDirection: variant === 'horizontal' ? undefined : 'column',\n gridTemplateColumns: variant === 'horizontal' ? '200px 1fr' : undefined,\n columnGap: variant === 'horizontal' ? theme.spacing(1) : undefined,\n alignItems: variant === 'horizontal' ? 'center' : undefined,\n }),\n);\n\nexport const FormField: React.FC<FormFieldProps> = ({\n name,\n label,\n required,\n error,\n helperText,\n children,\n dataTestId,\n}) => (\n <StyledFormField data-testid={dataTestId}>\n {label && (\n <FormLabel required={required} error={!!error} htmlFor={name} dataTestId={dataTestId ? `${dataTestId}-label` : undefined}>\n {label}\n </FormLabel>\n )}\n <FormControl fullWidth dataTestId={dataTestId ? `${dataTestId}-control` : undefined}>\n {children}\n {(error || helperText) && <FormMessage error={!!error} dataTestId={dataTestId ? `${dataTestId}-message` : undefined}>{error || helperText}</FormMessage>}\n </FormControl>\n </StyledFormField>\n );\n\nconst StyledFormLabel = styled('label', {\n shouldForwardProp: (prop) => prop !== 'error',\n})<{ error?: boolean }>(({ theme, error }) => ({\n fontSize: '0.875rem',\n fontWeight: 500,\n color: error ? theme.palette.error.main : theme.palette.text.primary,\n marginBottom: theme.spacing(0.5),\n display: 'block',\n '&::after': {\n content: '\" *\"',\n color: theme.palette.error.main,\n display: 'var(--required-display, none)',\n },\n}));\n\nexport const FormLabel: React.FC<FormLabelProps> = ({ required, error, children, htmlFor, dataTestId }) => (\n <StyledFormLabel\n error={error}\n htmlFor={htmlFor}\n data-testid={dataTestId}\n style={{ '--required-display': required ? 'inline' : 'none' } as React.CSSProperties}\n >\n {children}\n </StyledFormLabel>\n );\n\nconst StyledFormControl = styled(Box, {\n shouldForwardProp: (prop) => prop !== 'fullWidth',\n})<{ fullWidth?: boolean }>(({ fullWidth }) => ({\n width: fullWidth ? '100%' : 'auto',\n position: 'relative',\n}));\n\nexport const FormControl: React.FC<FormControlProps> = ({ fullWidth = true, children, dataTestId }) =>\n // Don't pass error prop to the DOM element\n <StyledFormControl fullWidth={fullWidth} data-testid={dataTestId}>{children}</StyledFormControl>\n;\n\nconst StyledFormMessage = styled('span', {\n shouldForwardProp: (prop) => prop !== 'error',\n})<{ error?: boolean }>(({ theme, error }) => ({\n fontSize: '0.75rem',\n marginTop: theme.spacing(0.5),\n color: error ? theme.palette.error.main : theme.palette.text.secondary,\n display: 'block',\n}));\n\nexport const FormMessage: React.FC<FormMessageProps> = ({ error, children, dataTestId }) => <StyledFormMessage error={error} data-testid={dataTestId}>{children}</StyledFormMessage>;\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/form/Toggle/Toggle.styles.ts"],"sourcesContent":["import { alpha, keyframes } from '@mui/material/styles/index.js';\nimport type { CSSObject, PaletteColor, Theme } from '@mui/material/styles/index.js';\n\nimport { fieldRadius } from '../../../tokens/field-radius';\nimport { asFieldSize, fieldBorder, fieldHeight } from '../../../tokens/field-height';\nimport { absoluteInk, controlNeutral, sheen } from '../../../tokens/ink';\n\nconst glowAnimation = keyframes`\n 0% { box-shadow: 0 0 5px currentColor; }\n 50% { box-shadow: 0 0 15px currentColor, 0 0 25px currentColor; }\n 100% { box-shadow: 0 0 5px currentColor; }\n`;\n\nconst floatAnimation = keyframes`\n 0%, 100% { transform: translateY(0px); }\n 50% { transform: translateY(-2px); }\n`;\n\ninterface TogglePalette {\n main: string;\n dark: string;\n light: string;\n contrastText: string;\n}\n\nconst neutralPalette = (theme: Theme): TogglePalette => controlNeutral(theme);\n\n// A theme can be handed to us with shades missing, so each one falls back through\n// the palette's own main colour before reaching for primary.\nconst shade = (\n palette: PaletteColor | undefined,\n key: 'dark' | 'light',\n fallback: PaletteColor,\n): string => palette?.[key] || palette?.main || fallback[key];\n\nexport const getColorFromTheme = (theme: Theme, color: string): TogglePalette => {\n if (color === 'neutral') return neutralPalette(theme);\n\n const colorMap: Record<string, PaletteColor> = {\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 fallback = theme.palette.primary;\n const palette = colorMap[color] || fallback;\n\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\nconst SIZE_MAP: Record<string, CSSObject> = {\n xs: { padding: '4px 8px', fontSize: '0.75rem' },\n sm: { padding: '6px 12px', fontSize: '0.875rem' },\n md: { padding: '8px 16px', fontSize: '1rem' },\n lg: { padding: '10px 20px', fontSize: '1.125rem' },\n xl: { padding: '12px 24px', fontSize: '1.25rem' },\n};\n\nexport const baseStyles = (\n theme: Theme,\n colorPalette: TogglePalette,\n customSize: string,\n): CSSObject => ({\n textTransform: 'none',\n fontWeight: 500,\n borderRadius: fieldRadius(theme),\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n border: fieldBorder(theme),\n color: theme.palette.text.primary,\n backgroundColor: 'transparent',\n position: 'relative',\n overflow: 'hidden',\n\n // A zero-sized circle that grows to fill the button on hover.\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: 0,\n height: 0,\n borderRadius: '50%',\n backgroundColor: alpha(colorPalette.main, 0.2),\n transform: 'translate(-50%, -50%)',\n transition: 'width 0.4s, height 0.4s',\n },\n\n '&:hover': {\n backgroundColor: alpha(colorPalette.main, 0.08),\n borderColor: colorPalette.main,\n transform: 'translateY(-1px)',\n boxShadow: `0 4px 8px ${alpha(colorPalette.main, 0.15)}`,\n animation: `${floatAnimation} 2s ease-in-out infinite`,\n\n '&::before': {\n width: '100%',\n height: '100%',\n },\n },\n\n '&:active': {\n transform: 'scale(0.98)',\n },\n\n '&.Mui-selected': {\n backgroundColor: colorPalette.main,\n color: colorPalette.contrastText || absoluteInk(theme).white,\n borderColor: colorPalette.main,\n boxShadow: `0 2px 8px ${alpha(colorPalette.main, 0.3)}`,\n\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n background: `linear-gradient(135deg, transparent, ${sheen(theme, 0.1)})`,\n pointerEvents: 'none',\n },\n\n '&:hover': {\n backgroundColor: colorPalette.dark,\n transform: 'translateY(-2px) scale(1.02)',\n boxShadow: `0 6px 20px ${alpha(colorPalette.main, 0.4)}`,\n },\n },\n\n // Size wins over everything above it — its font and horizontal padding; the\n // height is the theme's field height for the size.\n ...(SIZE_MAP[customSize] ?? {}),\n minHeight: fieldHeight(theme, asFieldSize(customSize)),\n paddingTop: 0,\n paddingBottom: 0,\n});\n\nexport const variantStyles = (\n theme: Theme,\n customVariant: string | undefined,\n colorPalette: TogglePalette,\n): CSSObject => {\n switch (customVariant) {\n case 'outline':\n return {\n backgroundColor: 'transparent',\n border: `2px solid ${colorPalette.main}`,\n color: colorPalette.main,\n\n '&.Mui-selected': {\n backgroundColor: colorPalette.main,\n color: colorPalette.contrastText || absoluteInk(theme).white,\n },\n };\n case 'soft':\n return {\n backgroundColor: alpha(colorPalette.main, 0.1),\n border: 'none',\n color: colorPalette.main,\n\n '&.Mui-selected': {\n backgroundColor: alpha(colorPalette.main, 0.2),\n color: colorPalette.main,\n },\n };\n default:\n return {};\n }\n};\n\ninterface ToggleEffects {\n glass?: boolean;\n gradient?: boolean;\n glow?: boolean;\n}\n\n// gradient and glow both target `.Mui-selected`; with both on, the later spread\n// wins, so glow's animation replaces gradient's.\nexport const effectStyles = (\n theme: Theme,\n colorPalette: TogglePalette,\n { glass, gradient, glow }: ToggleEffects,\n): CSSObject => ({\n ...(glass && {\n backgroundColor: alpha(theme.palette.background.paper, 0.1),\n backdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n }),\n\n ...(gradient && {\n '&.Mui-selected': {\n background: `linear-gradient(135deg, ${colorPalette.light}, ${colorPalette.main}, ${colorPalette.dark})`,\n backgroundSize: '200% 200%',\n animation: `${floatAnimation} 3s ease-in-out infinite`,\n border: 'none',\n\n '&:hover': {\n backgroundPosition: '100% 100%',\n },\n },\n }),\n\n ...(glow && {\n '&.Mui-selected': {\n animation: `${glowAnimation} 2s ease-in-out infinite`,\n boxShadow: `0 0 15px ${alpha(colorPalette.main, 0.6)}`,\n },\n }),\n});\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/DataViews/data-views-columns-tab.tsx"],"sourcesContent":["\"use client\";\n\nimport ArrowDownwardRoundedIcon from \"@mui/icons-material/ArrowDownwardRounded\";\nimport ArrowUpwardRoundedIcon from \"@mui/icons-material/ArrowUpwardRounded\";\nimport DragIndicatorRoundedIcon from \"@mui/icons-material/DragIndicatorRounded\";\nimport Checkbox from \"@mui/material/Checkbox/index.js\";\nimport { useState } from \"react\";\n\nimport { useDataViewsCopy } from \"./data-views-copy-context\";\nimport { Box } from \"../../../mui/Box\";\nimport { Text } from \"../../typography/Text\";\n\nimport type { HideableColumn } from \"./data-views-columns\";\n\n/* ── Colunas ─────────────────────────────────────────────────────────────── */\n\ninterface ColumnsTabProps {\n columns: HideableColumn[];\n /** Every column id in the CURRENT order (including non-hideable ones). */\n order: string[];\n visibleColumns: string[];\n onToggle: (id: string, visible: boolean) => void;\n onReorder: (order: string[]) => void;\n onShowAll: () => void;\n onReset: () => void;\n testIdPrefix: string;\n}\n\n/** Swap the column at `id` with its neighbour `delta` places away. */\nfunction moved(order: string[], id: string, delta: number): string[] {\n const from = order.indexOf(id);\n const to = from + delta;\n if (from < 0 || to < 0 || to >= order.length) return order;\n const next = [...order];\n [next[from], next[to]] = [next[to]!, next[from]!];\n return next;\n}\n\n/**\n * Visibility AND order in one list, because they are the same decision: an\n * operator reordering columns is deciding what to read first, and hiding one is\n * deciding not to read it at all. Drag the grip, or use the arrows — the arrows\n * exist because drag-and-drop is unusable by keyboard and awkward on a phone.\n */\nexport function ColumnsTab({\n columns,\n order,\n visibleColumns,\n onToggle,\n onReorder,\n onShowAll,\n onReset,\n testIdPrefix,\n}: ColumnsTabProps): React.JSX.Element {\n const copy = useDataViewsCopy();\n const [dragId, setDragId] = useState<string | null>(null);\n const byId = new Map(columns.map((column) => [column.id, column]));\n const ordered = order.map((id) => byId.get(id)).filter((column): column is HideableColumn => Boolean(column));\n // Counted against `columns`, which is the HIDEABLE set — `visibleColumns`\n // also carries the locked ones (a `hideable: false` id like the row's\n // identifier), and counting it whole reads \"9 de 8 visíveis\".\n const visibleHideableCount = visibleColumns.filter((id) => byId.has(id)).length;\n\n const dropOn = (id: string): void => {\n if (!dragId || dragId === id) return;\n const without = order.filter((key) => key !== dragId);\n without.splice(without.indexOf(id), 0, dragId);\n onReorder(without);\n setDragId(null);\n };\n\n return (\n <Box>\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", px: 1.5, py: 1 }}>\n <Text variant=\"caption\" as=\"span\">\n <Box component=\"span\" sx={{ color: \"text.secondary\" }} data-testid={`${testIdPrefix}-columns-count`}>\n {copy.columns.visibleCount(visibleHideableCount, columns.length)}\n </Box>\n </Text>\n <Box sx={{ display: \"flex\", gap: 1 }}>\n <LinkButton label={copy.columns.showAll} onClick={onShowAll} testId={`${testIdPrefix}-columns-show-all`} />\n <LinkButton label={copy.columns.reset} onClick={onReset} testId={`${testIdPrefix}-columns-reset`} muted />\n </Box>\n </Box>\n <Text variant=\"caption\" as=\"p\">\n <Box component=\"span\" sx={{ px: 1.5, pb: 0.5, display: \"block\", color: \"text.disabled\" }}>\n {copy.columns.dragHint}\n </Box>\n </Text>\n <Box sx={{ px: 0.75, pb: 0.75 }}>\n {ordered.map((column) => (\n <ColumnRow\n key={column.id}\n column={column}\n visible={visibleColumns.includes(column.id)}\n dragging={dragId === column.id}\n onToggle={onToggle}\n onDragStart={() => setDragId(column.id)}\n onDragEnd={() => setDragId(null)}\n onDrop={() => dropOn(column.id)}\n onMove={(delta) => onReorder(moved(order, column.id, delta))}\n testIdPrefix={testIdPrefix}\n />\n ))}\n </Box>\n </Box>\n );\n}\n\n/** A borderless text action, for the two column resets. */\nfunction LinkButton({\n label,\n onClick,\n testId,\n muted,\n}: {\n label: string;\n onClick: () => void;\n testId: string;\n muted?: boolean;\n}): React.JSX.Element {\n return (\n <Box\n component=\"button\"\n type=\"button\"\n onClick={onClick}\n data-testid={testId}\n sx={{\n border: 0,\n background: \"none\",\n cursor: \"pointer\",\n font: \"inherit\",\n fontSize: \"0.75rem\",\n p: 0,\n color: muted ? \"text.secondary\" : \"primary.main\",\n \"&:hover\": { textDecoration: \"underline\" },\n }}\n >\n {label}\n </Box>\n );\n}\n\ninterface ColumnRowProps {\n column: HideableColumn;\n visible: boolean;\n dragging: boolean;\n onToggle: (id: string, visible: boolean) => void;\n onDragStart: () => void;\n onDragEnd: () => void;\n onDrop: () => void;\n onMove: (delta: number) => void;\n testIdPrefix: string;\n}\n\n/** One column: grip, checkbox, label, and the keyboard-reachable move arrows. */\nfunction ColumnRow({\n column,\n visible,\n dragging,\n onToggle,\n onDragStart,\n onDragEnd,\n onDrop,\n onMove,\n testIdPrefix,\n}: ColumnRowProps): React.JSX.Element {\n const copy = useDataViewsCopy();\n return (\n <Box\n draggable\n onDragStart={onDragStart}\n onDragEnd={onDragEnd}\n onDragOver={(event: React.DragEvent) => event.preventDefault()}\n onDrop={onDrop}\n data-testid={`${testIdPrefix}-column-row-${column.id}`}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 0.5,\n px: 0.75,\n py: 0.25,\n borderRadius: 1,\n opacity: dragging ? 0.4 : 1,\n \"&:hover\": { bgcolor: \"action.hover\" },\n \"&:hover .dv-col-move\": { opacity: 1 },\n }}\n >\n <Box component=\"span\" aria-hidden sx={{ display: \"flex\", color: \"action.disabled\", cursor: \"grab\" }}>\n <DragIndicatorRoundedIcon fontSize=\"small\" />\n </Box>\n <Checkbox\n size=\"small\"\n checked={visible}\n onChange={(event) => onToggle(column.id, event.target.checked)}\n inputProps={{ \"aria-label\": column.label }}\n data-testid={`${testIdPrefix}-column-toggle-${column.id}`}\n />\n <Text variant=\"caption\" as=\"span\">\n <Box component=\"span\" sx={{ flex: 1, color: visible ? \"text.primary\" : \"text.disabled\" }}>\n {column.label}\n </Box>\n </Text>\n <Box className=\"dv-col-move\" sx={{ ml: \"auto\", display: \"flex\", opacity: 0, transition: \"opacity .15s\" }}>\n <MoveButton label={copy.columns.moveUp(column.label)} onClick={() => onMove(-1)} up />\n <MoveButton label={copy.columns.moveDown(column.label)} onClick={() => onMove(1)} />\n </Box>\n </Box>\n );\n}\n\n/** One of the two reorder arrows — the keyboard's path through the drag handle. */\nfunction MoveButton({\n label,\n onClick,\n up,\n}: {\n label: string;\n onClick: () => void;\n up?: boolean;\n}): React.JSX.Element {\n return (\n <Box\n component=\"button\"\n type=\"button\"\n aria-label={label}\n onClick={onClick}\n sx={{\n display: \"flex\",\n border: 0,\n p: 0.25,\n background: \"none\",\n borderRadius: 0.5,\n cursor: \"pointer\",\n color: \"text.secondary\",\n \"&:hover\": { bgcolor: \"action.selected\" },\n }}\n >\n {up ? <ArrowUpwardRoundedIcon sx={{ fontSize: 14 }} /> : <ArrowDownwardRoundedIcon sx={{ fontSize: 14 }} />}\n </Box>\n );\n}\n\n"],"mappings":"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","names":["default"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/ErrorState/ErrorState.tsx"],"sourcesContent":["import ErrorOutlineIcon from '@mui/icons-material/ErrorOutline';\nimport RefreshIcon from '@mui/icons-material/Refresh';\nimport WarningAmberIcon from '@mui/icons-material/WarningAmber';\nimport Box from '@mui/material/Box/index.js';\nimport Button from '@mui/material/Button/index.js';\nimport Stack from '@mui/material/Stack/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { useTheme } from '@mui/material/styles/index.js';\nimport type { Theme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport {\n ERROR_ICON_BOX,\n ERROR_ICON_BOX_OPACITY,\n ERROR_ICON_SIZE,\n ERROR_MESSAGE_LINE_HEIGHT,\n ERROR_MESSAGE_MAX_WIDTH,\n ERROR_STATE_GAP_UNITS,\n ERROR_STATE_MIN_HEIGHT,\n ERROR_STATE_PADDING_UNITS,\n ERROR_TEXT_GAP_UNITS,\n RETRY_MARGIN_TOP_UNITS,\n RETRY_MIN_WIDTH,\n} from './ErrorState.metrics';\nimport type { ErrorStateProps, ErrorStateSeverity } from './ErrorState.types';\nimport { resolveTestId } from '../../../platform/test-id';\n\nconst makeTestId =\n (dataTestId?: string) =>\n (suffix: string): string =>\n dataTestId ? `${dataTestId}-${suffix}` : `error-state-${suffix}`;\n\nconst paletteFor = (theme: Theme, severity: ErrorStateSeverity) =>\n severity === 'error' ? theme.palette.error : theme.palette.warning;\n\nconst ErrorIcon: React.FC<{\n severity: ErrorStateSeverity;\n icon?: React.ReactNode;\n testId: string;\n}> = ({ severity, icon, testId }) => {\n const theme = useTheme();\n const color = paletteFor(theme, severity);\n const Fallback = severity === 'error' ? ErrorOutlineIcon : WarningAmberIcon;\n\n return (\n <Box\n data-testid={testId}\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: ERROR_ICON_BOX,\n height: ERROR_ICON_BOX,\n borderRadius: '50%',\n backgroundColor: color.light,\n opacity: ERROR_ICON_BOX_OPACITY,\n }}\n >\n {icon || <Fallback sx={{ fontSize: ERROR_ICON_SIZE, color: color.main }} />}\n </Box>\n );\n};\n\nconst ErrorText: React.FC<{\n title?: string;\n message: string;\n titleId: string;\n testId: (suffix: string) => string;\n}> = ({ title, message, titleId, testId }) => {\n const theme = useTheme();\n\n return (\n <Stack spacing={ERROR_TEXT_GAP_UNITS} alignItems=\"center\">\n {title && (\n <Typography\n id={titleId}\n variant=\"h6\"\n component=\"h3\"\n data-testid={testId('title')}\n sx={{\n fontWeight: theme.typography.fontWeightMedium,\n color: theme.palette.text.primary,\n }}\n >\n {title}\n </Typography>\n )}\n\n <Typography\n id={`${titleId}-message`}\n variant=\"body2\"\n color=\"text.secondary\"\n data-testid={testId('message')}\n sx={{\n maxWidth: ERROR_MESSAGE_MAX_WIDTH,\n lineHeight: ERROR_MESSAGE_LINE_HEIGHT,\n }}\n >\n {message}\n </Typography>\n </Stack>\n );\n};\n\nexport const ErrorState: React.FC<ErrorStateProps> = React.memo((props) => {\n const {\n message,\n title,\n onRetry,\n retryLabel = 'Retry',\n severity = 'error',\n icon,\n className,\n } = props;\n const theme = useTheme();\n const titleId = React.useId();\n // `dataTestId` is the documented spelling; `testID`, the shared contract's\n // other one, resolves to the same id.\n const dataTestId = resolveTestId(props);\n const testId = makeTestId(dataTestId);\n\n return (\n <Box\n role=\"alert\"\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={`${titleId}-message`}\n className={className}\n data-testid={dataTestId || 'error-state'}\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n padding: theme.spacing(ERROR_STATE_PADDING_UNITS),\n minHeight: ERROR_STATE_MIN_HEIGHT,\n gap: theme.spacing(ERROR_STATE_GAP_UNITS),\n }}\n >\n <ErrorIcon severity={severity} icon={icon} testId={testId('icon')} />\n\n <ErrorText title={title} message={message} titleId={titleId} testId={testId} />\n\n {onRetry && (\n <Button\n variant=\"outlined\"\n color={severity}\n onClick={onRetry}\n startIcon={<RefreshIcon />}\n data-testid={testId('retry-button')}\n sx={{\n mt: theme.spacing(RETRY_MARGIN_TOP_UNITS),\n minWidth: RETRY_MIN_WIDTH,\n }}\n >\n {retryLabel}\n </Button>\n )}\n </Box>\n );\n});\n\nErrorState.displayName = 'ErrorState';\n\nexport default ErrorState;\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/Chart/chart-internals.ts"],"sourcesContent":["import { alpha, type Theme } from '@mui/material/styles/index.js';\nimport type { CSSProperties } from 'react';\n\nimport type { ChartProps, ChartSeries } from './Chart.types';\nimport { uiInk } from '../../../tokens/ink';\nimport { accentFor} from '../../../tokens/scales';\n\n/**\n * Non-JSX internals of the prop-driven Chart: size/variant styling, palette\n * resolution and series auto-detection. Split from Chart.tsx to keep every\n * function inside the repo's complexity budget.\n */\n\nexport interface SizeStyles {\n height: number;\n fontSize: string;\n /**\n * Gap between an axis line and its tick labels, px.\n *\n * Recharts' default of 2 is not enough. The bottom VALUE tick is centred on\n * the x-axis line, so its text box reaches ~0.79em BELOW that line, while\n * the category labels begin 2px under the 6px tick mark — the two collide at\n * the axis corner, at every viewport. Each value below is ~0.8em of its own\n * font size, which clears the value label's descender with ~6px to spare.\n */\n tickMargin: number;\n}\n\nconst SIZE_PRESETS: Record<NonNullable<ChartProps['size']>, SizeStyles> = {\n xs: { height: 200, fontSize: '0.75rem', tickMargin: 10 },\n sm: { height: 300, fontSize: '0.875rem', tickMargin: 12 },\n md: { height: 400, fontSize: '1rem', tickMargin: 14 },\n lg: { height: 500, fontSize: '1.125rem', tickMargin: 16 },\n xl: { height: 600, fontSize: '1.25rem', tickMargin: 18 },\n};\n\nexport function getSizeStyles(size: ChartProps['size'], height?: number): SizeStyles {\n const preset = SIZE_PRESETS[size ?? 'md'] ?? SIZE_PRESETS.md;\n return { ...preset, height: height ?? preset.height };\n}\n\nexport function getDefaultColors(theme: Theme, variant: ChartProps['variant'], colors?: string[]): string[] {\n if (colors) return colors;\n if (variant === 'neon') return [...uiInk(theme).dataVizNeon.series];\n return [\n theme.palette.primary.main,\n theme.palette.secondary.main,\n theme.palette.success.main,\n theme.palette.warning.main,\n theme.palette.error.main,\n theme.palette.info.main,\n ];\n}\n\ntype SxStyles = Record<string, unknown>;\n\ninterface VariantOptions {\n variant: NonNullable<ChartProps['variant']>;\n color: NonNullable<ChartProps['color']>;\n glow: boolean;\n pulse: boolean;\n glass: boolean;\n gradient: boolean;\n disabled: boolean;\n}\n\nfunction effectStyles(theme: Theme, options: VariantOptions): SxStyles {\n const accent = accentFor(theme, options.color).main;\n const glow = options.glow ? { boxShadow: `0 0 30px ${alpha(accent, 0.4)}` } : {};\n const pulse = options.pulse\n ? {\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 : {};\n return { ...glow, ...pulse };\n}\n\nfunction variantSurface(theme: Theme, options: VariantOptions): SxStyles {\n switch (options.variant) {\n case 'glass':\n return {\n backgroundColor: alpha(theme.palette.background.paper, options.glass ? 0.1 : 0.9),\n backdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.1)}`,\n };\n case 'gradient':\n return {\n background: options.gradient\n ? `linear-gradient(135deg, ${alpha(accentFor(theme, options.color).light, 0.05)}, ${alpha(accentFor(theme, options.color).dark, 0.05)})`\n : theme.palette.background.paper,\n };\n case 'elevated':\n return { boxShadow: theme.shadows[4] };\n case 'minimal':\n return { border: 'none', backgroundColor: 'transparent' };\n case 'neon': {\n const neon = uiInk(theme).dataVizNeon;\n return {\n backgroundColor: neon.ground,\n border: `1px solid ${alpha(neon.accent, 0.3)}`,\n '& .recharts-cartesian-grid-horizontal line, & .recharts-cartesian-grid-vertical line': {\n stroke: alpha(neon.accent, 0.1),\n },\n };\n }\n default:\n return { backgroundColor: theme.palette.background.paper };\n }\n}\n\nexport function getVariantStyles(theme: Theme, options: VariantOptions): SxStyles {\n return {\n borderRadius: theme.spacing(1),\n transition: theme.transitions.create(['all'], {\n duration: theme.transitions.duration.standard,\n }),\n opacity: options.disabled ? 0.5 : 1,\n pointerEvents: options.disabled ? ('none' as const) : ('auto' as const),\n ...effectStyles(theme, options),\n ...variantSurface(theme, options),\n };\n}\n\n/** Explicit series, or one series per non-axis key found in the first row. */\nexport function resolveSeries(\n data: ChartProps['data'],\n series: ChartSeries[] | undefined,\n xAxisKey: string,\n palette: string[],\n): ChartSeries[] {\n if (series) return series;\n if (data.length === 0) return [];\n return Object.keys(data[0] ?? {})\n .filter((key) => key !== xAxisKey)\n .map((key, index) => ({\n dataKey: key,\n name: key,\n color: palette[index % palette.length],\n }));\n}\n\ninterface AxisTextStyles {\n axisStyle: CSSProperties;\n gridStroke: string;\n /**\n * Multiplier applied to `gridStroke`'s own alpha. Gridlines must read one\n * step BELOW the card border — the border is `divider`, so half of it —\n * without being dashed at data weight. Expressing the step as an opacity\n * rather than a second colour keeps it derived from the theme's divider\n * whatever form that takes (rgba, hex, or a CSS variable, which the colour\n * helpers cannot decompose).\n */\n gridOpacity: number;\n}\n\nexport function getAxisStyles(theme: Theme, variant: ChartProps['variant'], fontSize: string): AxisTextStyles {\n const neon = variant === 'neon';\n const neonAccent = uiInk(theme).dataVizNeon.accent;\n return {\n axisStyle: {\n fontSize,\n fill: neon ? neonAccent : theme.palette.text.secondary,\n // Ticks are columns of digits: they have to line up between rows.\n fontVariantNumeric: 'tabular-nums',\n },\n gridStroke: neon ? alpha(neonAccent, 0.1) : theme.palette.divider,\n // The neon grid is already a 10%-alpha cyan; halving it again would erase it.\n gridOpacity: neon ? 1 : 0.5,\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/ContentToolbar/FilterTrigger.tsx"],"sourcesContent":["'use client';\n\nimport FilterIcon from '@mui/icons-material/FilterListRounded';\nimport Box from '@mui/material/Box/index.js';\nimport Button from '@mui/material/Button/index.js';\nimport React from 'react';\n\nimport type { FilterTriggerProps } from './ContentToolbar.types';\nimport { fieldRadiusPx } from '../../../tokens/field-radius';\nimport { fieldHeight } from '../../../tokens/field-height';\n\n/**\n * Labeled filter toggle: a \"Filtros\" button (styled like the sibling toolbar\n * controls) with a funnel icon and, when filters are active, a count badge — so\n * it's obvious that the list is filtered and by how many facets. The panel itself\n * is supplied by the consumer.\n */\nexport function FilterTrigger({\n open,\n onOpenChange,\n hasActiveFilters = false,\n activeCount = 0,\n label = 'Filtros',\n 'data-testid': testId = 'toggle-filters-btn',\n}: FilterTriggerProps): React.JSX.Element {\n const active = activeCount > 0 || hasActiveFilters;\n return (\n <Button\n variant=\"text\"\n size=\"small\"\n color=\"inherit\"\n data-testid={testId}\n aria-expanded={open}\n aria-label={open ? 'Close filters' : 'Open filters'}\n onClick={() => onOpenChange(!open)}\n startIcon={<FilterIcon sx={{ fontSize: 16 }} />}\n sx={{\n minWidth: 0,\n height: fieldHeight,\n px: 1,\n gap: 0.25,\n borderRadius: fieldRadiusPx,\n textTransform: 'none',\n fontWeight: 600,\n color: active ? 'primary.main' : 'text.primary',\n bgcolor: open ? 'action.selected' : 'transparent',\n }}\n >\n {label}\n {activeCount > 0 && (\n <Box\n component=\"span\"\n data-testid={`${testId}-count`}\n sx={{\n ml: 0.5,\n minWidth: 18,\n height: 18,\n px: 0.5,\n borderRadius: 999,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '0.7rem',\n fontWeight: 700,\n lineHeight: 1,\n bgcolor: 'primary.main',\n color: 'primary.contrastText',\n }}\n >\n {activeCount}\n </Box>\n )}\n </Button>\n );\n}\n"],"mappings":";;;;;;;;AAEA,OAAO,gBAAgB;AACvB,OAAO,SAAS;AAChB,OAAO,YAAY;AAuBf,SAQa,KARb;AAVG,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA,mBAAmB;AAAA,EACnB,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,eAAe,SAAS;AAC1B,GAA0C;AACxC,QAAM,SAAS,cAAc,KAAK;AAClC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN,eAAa;AAAA,MACb,iBAAe;AAAA,MACf,cAAY,OAAO,kBAAkB;AAAA,MACrC,SAAS,MAAM,aAAa,CAAC,IAAI;AAAA,MACjC,WAAW,oBAAC,cAAW,IAAI,EAAE,UAAU,GAAG,GAAG;AAAA,MAC7C,IAAI;AAAA,QACF,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,IAAI;AAAA,QACJ,KAAK;AAAA,QACL,cAAc;AAAA,QACd,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,OAAO,SAAS,iBAAiB;AAAA,QACjC,SAAS,OAAO,oBAAoB;AAAA,MACtC;AAAA,MAEC;AAAA;AAAA,QACA,cAAc,KACb;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,eAAa,GAAG,MAAM;AAAA,YACtB,IAAI;AAAA,cACF,IAAI;AAAA,cACJ,UAAU;AAAA,cACV,QAAQ;AAAA,cACR,IAAI;AAAA,cACJ,cAAc;AAAA,cACd,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,UAAU;AAAA,cACV,YAAY;AAAA,cACZ,YAAY;AAAA,cACZ,SAAS;AAAA,cACT,OAAO;AAAA,YACT;AAAA,YAEC;AAAA;AAAA,QACH;AAAA;AAAA;AAAA,EAEJ;AAEJ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/navigation/Breadcrumbs/Breadcrumbs.styles.tsx"],"sourcesContent":["import { alpha, keyframes } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\n\nimport { modeInk, shadowInk, sheen, uiInk } from '../../../tokens/ink';\nimport { EFFECT_GLOW } from '../../../tokens/ink.core';\n\nexport const slideIn = keyframes`\n from {\n opacity: 0;\n transform: translateX(-10px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n`;\n\nexport const pulse = keyframes`\n 0% {\n box-shadow: 0 0 0 0 ${alpha(EFFECT_GLOW.brandIndigo, 0.4)};\n }\n 70% {\n box-shadow: 0 0 0 10px ${alpha(EFFECT_GLOW.brandIndigo, 0)};\n }\n 100% {\n box-shadow: 0 0 0 0 ${alpha(EFFECT_GLOW.brandIndigo, 0)};\n }\n`;\n\nconst BAR_VARIANTS: Record<string, (theme: Theme, elevation: number) => CSSObject> = {\n glass: (theme, elevation) => ({\n background:\n theme.palette.mode === 'dark' ? alpha(uiInk(theme).glassSlate, 0.7) : sheen(theme, 0.7),\n backdropFilter: 'blur(10px)',\n WebkitBackdropFilter: 'blur(10px)',\n border: `1px solid ${alpha(modeInk(theme), 0.1)}`,\n boxShadow:\n theme.palette.mode === 'dark'\n ? `0 ${elevation * 4}px ${elevation * 8}px ${shadowInk(theme, 0.3)}, inset 0 1px 0 ${sheen(theme, 0.1)}`\n : `0 ${elevation * 4}px ${elevation * 8}px ${shadowInk(theme, 0.08)}, inset 0 1px 0 ${sheen(theme, 0.8)}` }),\n elevated: (theme, elevation) => ({\n background: theme.palette.background.paper,\n boxShadow: theme.shadows[elevation] || theme.shadows[1],\n borderRadius: theme.spacing(1.5) }),\n outlined: (theme, _elevation) => ({\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.spacing(1) }) };\n\n// Spacing and colour for the separator glyphs between crumbs.\nconst separatorStyles = (\n theme: Theme,\n size: string | undefined,\n color: string | undefined,\n _visualStyle: string | undefined,\n): CSSObject => ({\n '& .MuiBreadcrumbs-separator': {\n marginLeft: theme.spacing(size === 'sm' ? 0.5 : size === 'lg' ? 1.5 : 1),\n marginRight: theme.spacing(size === 'sm' ? 0.5 : size === 'lg' ? 1.5 : 1),\n opacity: 0.6,\n transition: 'all 0.2s ease',\n ...(color === 'primary' && {\n color: theme.palette.primary.main }),\n ...(color === 'secondary' && {\n color: theme.palette.secondary.main }) } });\n\n// Only one visual style applies at a time, so a lookup replaces three mutually\n// exclusive spreads.\nconst barVariantStyles = (theme: Theme, visualStyle: string | undefined, elevation: number): CSSObject =>\n visualStyle ? (BAR_VARIANTS[visualStyle]?.(theme, elevation) ?? {}) : {};\n\n// The bar's own styling, lifted out so the styled() callback is a single spread\n// rather than seventy lines of conditionals.\nexport const breadcrumbsBarStyles = ({\n theme,\n size,\n color,\n visualStyle,\n elevation = 0 }: {\n theme: Theme;\n size?: string;\n color?: string;\n visualStyle?: string;\n elevation?: number;\n}): CSSObject => ({\n padding: theme.spacing(size === 'sm' ? 0.75 : size === 'lg' ? 1.5 : 1, 2),\n borderRadius: theme.spacing(visualStyle === 'glass' ? 2 : 1),\n ...barVariantStyles(theme, visualStyle, elevation),\n animation: `${slideIn} 0.3s ease-out`,\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n position: 'relative',\n\n // Glass morphism effect\n\n\n // Elevated variant\n\n\n // Outlined variant\n\n\n '& .MuiBreadcrumbs-ol': {\n alignItems: 'center',\n flexWrap: 'nowrap',\n [theme.breakpoints.down('sm')]: {\n flexWrap: 'wrap',\n gap: theme.spacing(0.5) } },\n\n ...separatorStyles(theme, size, color, visualStyle),\n\n\n '&:hover': {\n ...(visualStyle === 'glass' && {\n background:\n theme.palette.mode === 'dark' ? alpha(uiInk(theme).glassSlate, 0.85) : sheen(theme, 0.85),\n boxShadow:\n theme.palette.mode === 'dark'\n ? `0 ${elevation * 6}px ${elevation * 12}px ${shadowInk(theme, 0.4)}`\n : `0 ${elevation * 6}px ${elevation * 12}px ${shadowInk(theme, 0.12)}` }) } });\n\n// The idle glass treatment and the active-crumb treatment are mutually\n// exclusive; keeping them as named pieces takes both branches out of the main\n// style function.\nconst linkGlassIdleStyles = (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.05)} 100%)`,\n opacity: 0,\n transition: 'opacity 0.3s ease',\n borderRadius: 'inherit' } });\n\nconst linkActiveStyles = (theme: Theme, visualStyle?: string): CSSObject => ({\n pointerEvents: 'none',\n cursor: 'default',\n color: theme.palette.primary.main,\n fontWeight: 600,\n\n ...(visualStyle === 'glass' && {\n background: `linear-gradient(135deg, ${alpha(theme.palette.primary.main, 0.1)} 0%, ${alpha(theme.palette.primary.main, 0.05)} 100%)`,\n animation: `${pulse} 2s infinite` }) });\n\n// Hover treatment. The tint is a touch stronger on the glass variant so it still\n// reads against the translucent bar.\nconst linkHoverStyles = (theme: Theme, visualStyle?: string): CSSObject => ({\n '&:hover, &[data-hover=\"true\"]': {\n color: theme.palette.primary.main,\n backgroundColor: alpha(theme.palette.primary.main, visualStyle === 'glass' ? 0.1 : 0.08),\n transform: 'translateY(-1px)',\n\n '&::before': {\n opacity: 1 },\n\n '& .breadcrumb-icon': {\n transform: 'scale(1.1)' } } });\n\nexport const breadcrumbLinkStyles = ({\n theme,\n size,\n active,\n visualStyle }: {\n theme: Theme;\n size?: string;\n active?: boolean;\n visualStyle?: string;\n}): CSSObject => ({\n ...(visualStyle === 'glass' && !active ? linkGlassIdleStyles(theme) : {}),\n ...(active ? linkActiveStyles(theme, visualStyle) : {}),\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(0.5),\n textDecoration: 'none',\n fontSize: size === 'sm' ? '0.875rem' : size === 'lg' ? '1.125rem' : '1rem',\n fontWeight: active ? 600 : 400,\n color: active ? theme.palette.text.primary : theme.palette.text.secondary,\n padding: theme.spacing(0.5, 0.75),\n borderRadius: theme.spacing(0.75),\n position: 'relative',\n overflow: 'hidden',\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n\n // Add subtle background for glass variant\n\n\n ...linkHoverStyles(theme, visualStyle),\n\n\n '&:active': {\n transform: 'translateY(0)',\n backgroundColor: alpha(theme.palette.primary.main, 0.12) },\n\n '&:focus-visible': {\n outline: `2px solid ${theme.palette.primary.main}`,\n outlineOffset: 2,\n backgroundColor: alpha(theme.palette.primary.main, 0.04) },\n\n\n\n '& .breadcrumb-icon': {\n transition: 'transform 0.2s ease' },\n\n // Mobile responsiveness\n [theme.breakpoints.down('sm')]: {\n fontSize: size === 'lg' ? '1rem' : size === 'sm' ? '0.75rem' : '0.875rem',\n padding: theme.spacing(0.375, 0.5) } });\n\nexport const sizeIconMap = {\n xs: 'small',\n sm: 'small',\n md: 'small',\n lg: 'medium',\n xl: 'medium',\n} as const;\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/AlertDialog/AlertDialog.tsx"],"sourcesContent":["import Close from '@mui/icons-material/Close';\nimport Error from '@mui/icons-material/Error';\nimport Info from '@mui/icons-material/Info';\nimport type { ButtonProps } from '@mui/material/Button/index.js';\nimport Button from '@mui/material/Button/index.js';\nimport CircularProgress from '@mui/material/CircularProgress/index.js';\nimport Dialog from '@mui/material/Dialog/index.js';\nimport DialogActions from '@mui/material/DialogActions/index.js';\nimport DialogContent from '@mui/material/DialogContent/index.js';\nimport DialogContentText from '@mui/material/DialogContentText/index.js';\nimport DialogTitle from '@mui/material/DialogTitle/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, keyframes, styled } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { neutralTones } from '../../../tokens/ink';\n\nimport type { AlertDialogProps } from './AlertDialog.types';\n\n// Define pulse animation\nconst pulseAnimation = keyframes`\n 0% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 1;\n }\n 70% {\n box-shadow: 0 0 0 15px currentColor;\n opacity: 0;\n }\n 100% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 0;\n }\n`;\n\nconst StyledDialog = styled(Dialog, {\n shouldForwardProp: (prop) => \n !['customVariant', 'glow', 'pulse'].includes(prop as string),\n})<{ \n customVariant?: string; \n glow?: boolean; \n pulse?: boolean; \n}>(({ theme, customVariant, glow, pulse }) => ({\n '& .MuiDialog-paper': {\n borderRadius: theme.spacing(2),\n transition: 'all 0.3s ease',\n position: 'relative',\n overflow: 'hidden',\n\n // Variant styles\n ...(customVariant === 'default' && {\n backgroundColor: theme.palette.background.paper,\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n }),\n\n // The error tint is LAYERED over the paper, not used as the background\n // itself: `alpha(error, 0.05)` alone leaves the panel 95% transparent, so\n // the page behind it showed straight through the question and its buttons.\n // A confirm nobody can read is the one dialog that must never be hard to\n // read. Same tint, opaque base.\n ...(customVariant === 'destructive' && {\n backgroundColor: theme.palette.background.paper,\n backgroundImage: `linear-gradient(${alpha(theme.palette.error.main, 0.05)}, ${alpha(\n theme.palette.error.main,\n 0.05,\n )})`,\n border: `1px solid ${alpha(theme.palette.error.main, 0.2)}`,\n }),\n\n ...(customVariant === 'glass' && {\n backgroundColor: alpha(theme.palette.background.paper, 0.1),\n backdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n }),\n\n // Glow effect\n ...(glow && !pulse && {\n boxShadow: `0 0 30px 10px ${alpha(theme.palette.primary.main, 0.3)} !important`,\n filter: 'brightness(1.05)',\n }),\n\n // Pulse animation\n ...(pulse && !glow && {\n position: 'relative',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n borderRadius: 'inherit',\n backgroundColor: theme.palette.primary.main,\n opacity: 0.1,\n animation: `${pulseAnimation} 2s infinite`,\n pointerEvents: 'none',\n zIndex: -1,\n },\n }),\n\n // Both glow and pulse\n ...(glow && pulse && {\n position: 'relative',\n boxShadow: `0 0 30px 10px ${alpha(theme.palette.primary.main, 0.3)} !important`,\n filter: 'brightness(1.05)',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n borderRadius: 'inherit',\n backgroundColor: theme.palette.primary.main,\n opacity: 0.1,\n animation: `${pulseAnimation} 2s infinite`,\n pointerEvents: 'none',\n zIndex: -1,\n },\n }),\n },\n}));\n\nconst StyledDialogTitle = styled(DialogTitle)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1.5),\n paddingRight: theme.spacing(6), // Space for close button\n '& .MuiTypography-root': {\n fontWeight: 600,\n fontSize: '1.25rem',\n },\n}));\n\nconst StyledDialogContent = styled(DialogContent)(({ theme }) => ({\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(2),\n}));\n\nconst StyledDialogActions = styled(DialogActions)(({ theme }) => ({\n padding: theme.spacing(2, 3, 3, 3),\n gap: theme.spacing(1),\n}));\n\nconst CloseButton = styled(IconButton)(({ theme }) => ({\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: neutralTones(theme).muted,\n}));\n\n/**\n * Per-variant lookups, hoisted out of the render function. They depend on\n * nothing but their arguments, so keeping them at module scope means they are\n * not rebuilt on every render — and it keeps the component's own branch count\n * inside the repo's complexity budget.\n */\nconst variantIcon = (\n variant: AlertDialogProps['variant'],\n icon: AlertDialogProps['icon'],\n): React.ReactNode => {\n if (icon) return icon;\n return variant === 'destructive' ? <Error color=\"error\" /> : <Info color=\"primary\" />;\n};\n\n/**\n * Ids for the two elements that give the dialog its accessible name and\n * description. Derived from the test id so they are stable and unique per\n * dialog without a generated id that would change on every render.\n */\nconst titleId = (dataTestId: string): string => `${dataTestId}-title`;\nconst descriptionId = (dataTestId: string): string => `${dataTestId}-description`;\n\n/**\n * `alertdialog`, not `dialog`.\n *\n * This component interrupts what the operator was doing and will not go away\n * until they answer — which is exactly the distinction the two roles draw, and\n * it is what makes a screen reader announce the message itself on open rather\n * than just the dialog's name. MUI hardcodes `role=\"dialog\"` on the paper, so\n * it has to be overridden through the paper slot.\n */\nconst ALERT_ROLE = 'alertdialog';\n\n/**\n * The paper slot's a11y props: the role, plus the name and description wired to\n * the elements that actually carry them, so the announcement is the QUESTION\n * rather than the word \"dialog\".\n *\n * Both references are conditional — pointing `aria-labelledby` at an element\n * that was never rendered leaves a dangling id, which screen readers treat as\n * no name at all, i.e. worse than omitting it.\n */\nfunction ariaSlotProps(\n dataTestId: string,\n title: AlertDialogProps['title'],\n description: AlertDialogProps['description'],\n): { paper: Record<string, string> } {\n return {\n paper: {\n role: ALERT_ROLE,\n ...(title ? { 'aria-labelledby': titleId(dataTestId) } : {}),\n ...(description ? { 'aria-describedby': descriptionId(dataTestId) } : {}),\n },\n };\n}\n\n/** Both variants render a filled confirm; only the colour distinguishes them. */\nconst CONFIRM_BUTTON_VARIANT: ButtonProps['variant'] = 'contained';\nconst confirmButtonColor = (variant: AlertDialogProps['variant']): 'error' | 'primary' =>\n variant === 'destructive' ? 'error' : 'primary';\n\n/** Title row: the variant icon (unless explicitly suppressed with `null`) + the title. */\nfunction AlertDialogHeader({\n title,\n icon,\n variant,\n dataTestId,\n}: {\n title: AlertDialogProps['title'];\n icon: AlertDialogProps['icon'];\n variant: AlertDialogProps['variant'];\n dataTestId: string;\n}): React.ReactElement | null {\n if (!title) return null;\n return (\n <StyledDialogTitle id={titleId(dataTestId)} data-testid={`${dataTestId}-title`}>\n {icon !== null && (\n <span data-testid={`${dataTestId}-icon`}>{variantIcon(variant, icon)}</span>\n )}\n <Typography variant=\"h6\" component=\"span\">\n {title}\n </Typography>\n </StyledDialogTitle>\n );\n}\n\n/** Action row: the optional cancel button and the (variant-coloured) confirm. */\nfunction AlertDialogFooter({\n variant,\n cancelText = 'Cancel',\n confirmText = 'Confirm',\n showCancel = true,\n loading = false,\n confirmDisabled = false,\n initialFocus = 'confirm',\n onCancel,\n onConfirm,\n dataTestId,\n}: Pick<\n AlertDialogProps,\n | 'variant'\n | 'cancelText'\n | 'confirmText'\n | 'showCancel'\n | 'loading'\n | 'confirmDisabled'\n | 'initialFocus'\n> & {\n onCancel: () => void;\n onConfirm: () => void;\n dataTestId: string;\n}): React.ReactElement {\n return (\n <StyledDialogActions data-testid={`${dataTestId}-actions`}>\n {showCancel && (\n <Button\n onClick={onCancel}\n variant=\"outlined\"\n color=\"inherit\"\n disabled={loading}\n autoFocus={initialFocus === 'cancel'}\n data-testid={`${dataTestId}-cancel-button`}\n >\n {cancelText}\n </Button>\n )}\n <Button\n onClick={onConfirm}\n variant={CONFIRM_BUTTON_VARIANT}\n color={confirmButtonColor(variant)}\n disabled={confirmDisabled || loading}\n startIcon={\n loading ? (\n <CircularProgress\n size={16}\n color=\"inherit\"\n data-testid={`${dataTestId}-loading-spinner`}\n />\n ) : undefined\n }\n autoFocus={initialFocus !== 'cancel'}\n data-testid={`${dataTestId}-confirm-button`}\n >\n {confirmText}\n </Button>\n </StyledDialogActions>\n );\n}\n\nexport const AlertDialog = React.forwardRef<HTMLDivElement, AlertDialogProps>(\n ({\n variant = 'default',\n glow = false,\n pulse = false,\n title,\n description,\n icon,\n cancelText,\n confirmText,\n onCancel,\n onConfirm,\n showCancel,\n loading,\n confirmDisabled,\n initialFocus,\n children,\n onClose,\n 'data-testid': dataTestId = 'alert-dialog',\n ...props\n }, ref) => {\n const handleCancel = () => {\n onCancel?.();\n onClose?.({}, 'backdropClick');\n };\n\n return (\n <StyledDialog\n ref={ref}\n customVariant={variant}\n glow={glow}\n pulse={pulse}\n onClose={onClose}\n data-testid={dataTestId}\n slotProps={ariaSlotProps(dataTestId, title, description)}\n {...props}\n >\n <CloseButton\n aria-label=\"close\"\n onClick={handleCancel}\n size=\"small\"\n data-testid={`${dataTestId}-close-button`}\n >\n <Close />\n </CloseButton>\n\n <AlertDialogHeader\n title={title}\n icon={icon}\n variant={variant}\n dataTestId={dataTestId}\n />\n\n <StyledDialogContent data-testid={`${dataTestId}-content`}>\n {description && (\n <DialogContentText\n id={descriptionId(dataTestId)}\n data-testid={`${dataTestId}-description`}\n >\n {description}\n </DialogContentText>\n )}\n {children}\n </StyledDialogContent>\n\n <AlertDialogFooter\n variant={variant}\n cancelText={cancelText}\n confirmText={confirmText}\n showCancel={showCancel}\n loading={loading}\n confirmDisabled={confirmDisabled}\n initialFocus={initialFocus}\n onCancel={handleCancel}\n onConfirm={() => onConfirm?.()}\n dataTestId={dataTestId}\n />\n </StyledDialog>\n );\n }\n);\n\nAlertDialog.displayName = 'AlertDialog';"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/form/Label/Label.styles.ts"],"sourcesContent":["import { alpha } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\n\nimport type { LabelProps } from './Label.types';\nimport { accentFor} from '../../../tokens/scales';\n\ntype Size = NonNullable<LabelProps['size']>;\ntype Variant = NonNullable<LabelProps['variant']>;\ntype Weight = NonNullable<LabelProps['weight']>;\n\nconst SIZES: Record<Size, (theme: Theme) => CSSObject> = {\n xs: (theme) => ({ fontSize: '0.75rem', lineHeight: 1.2, padding: theme.spacing(0.25, 0.5) }),\n sm: (theme) => ({ fontSize: '0.875rem', lineHeight: 1.3, padding: theme.spacing(0.5, 0.75) }),\n md: (theme) => ({ fontSize: '1rem', lineHeight: 1.5, padding: theme.spacing(0.75, 1) }),\n lg: (theme) => ({ fontSize: '1.125rem', lineHeight: 1.6, padding: theme.spacing(1, 1.25) }),\n xl: (theme) => ({ fontSize: '1.25rem', lineHeight: 1.7, padding: theme.spacing(1.25, 1.5) }),\n};\n\nexport const sizeStyles = (theme: Theme, size: Size): CSSObject => (SIZES[size] ?? SIZES.md)(theme);\n\nconst WEIGHTS: Record<Weight, number> = {\n light: 300,\n regular: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n};\n\nconst fontWeight = (weight: Weight) => WEIGHTS[weight] ?? WEIGHTS.regular;\n\nexport interface LabelStyleFlags {\n variant: Variant;\n size: Size;\n color: NonNullable<LabelProps['color']>;\n weight: Weight;\n transform: NonNullable<LabelProps['transform']>;\n align: NonNullable<LabelProps['align']>;\n error: boolean;\n disabled: boolean;\n glow: boolean;\n pulse: boolean;\n ripple: boolean;\n srOnly: boolean;\n nowrap: boolean;\n truncate: boolean;\n clickable: boolean;\n}\n\n/**\n * The text colour, which error and disabled override before the palette is\n * consulted at all. Resolved once and threaded through — the variant styles\n * read it up to four times each.\n */\nexport const textColor = (theme: Theme, flags: LabelStyleFlags): string => {\n if (flags.error) return theme.palette.error.main;\n if (flags.disabled) return theme.palette.text.disabled;\n if (flags.color === 'neutral') return theme.palette.text.primary;\n return accentFor(theme, flags.color).main;\n};\n\n/** The ripple that expands from the centre on press, for clickable labels. */\nconst rippleStyles = (theme: Theme): CSSObject => ({\n overflow: 'hidden',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: 0,\n height: 0,\n borderRadius: '50%',\n backgroundColor: alpha(theme.palette.primary.main, 0.3),\n transform: 'translate(-50%, -50%)',\n transition: 'width 0.6s, height 0.6s',\n },\n '&:active::after': { width: '300%', height: '300%' },\n});\n\ninterface SurfaceInput {\n theme: Theme;\n flags: LabelStyleFlags;\n /** The resolved text colour, or the primary accent when it resolves to none. */\n accent: string;\n}\n\n/**\n * Each variant's own additions. Every arm previously re-spread the same base,\n * glow, pulse and ripple objects and re-derived the colour for each use; the\n * shared prefix is applied once by `labelStyles`.\n *\n * The hover rules are only attached when the label is clickable, which is what\n * the `onClick ? {…} : {}` in every arm was saying.\n */\nconst SURFACES: Record<Variant, (input: SurfaceInput) => CSSObject> = {\n filled: ({ theme, flags, accent }) => ({\n backgroundColor: alpha(accent, 0.1),\n borderRadius: theme.spacing(0.5),\n '&:hover': flags.clickable ? { backgroundColor: alpha(accent, 0.15) } : {},\n }),\n\n outlined: ({ theme, flags, accent }) => ({\n border: `1px solid ${alpha(accent, 0.5)}`,\n borderRadius: theme.spacing(0.5),\n '&:hover': flags.clickable\n ? { borderColor: accent, backgroundColor: alpha(accent, 0.05) }\n : {},\n }),\n\n glass: ({ theme, flags }) => ({\n backgroundColor: alpha(theme.palette.background.paper, 0.1),\n backdropFilter: 'blur(10px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n borderRadius: theme.spacing(0.5),\n '&:hover': flags.clickable\n ? {\n backgroundColor: alpha(theme.palette.background.paper, 0.15),\n borderColor: alpha(theme.palette.primary.main, 0.3),\n }\n : {},\n }),\n\n gradient: ({ theme, flags }) => {\n // `neutral` has no accent of its own in the gradient; it borrows primary,\n // which is what this branch already did before the vocabulary was named.\n const accent = accentFor(theme, flags.color === 'neutral' ? 'primary' : flags.color);\n // The gradient paints the glyphs themselves rather than the box behind them.\n const clip = {\n WebkitBackgroundClip: 'text',\n WebkitTextFillColor: 'transparent',\n backgroundClip: 'text',\n };\n\n return {\n background: `linear-gradient(135deg, ${accent.light}, ${accent.main})`,\n ...clip,\n '&:hover': flags.clickable\n ? {\n background: `linear-gradient(135deg, ${accent.main}, ${accent.dark})`,\n ...clip,\n }\n : {},\n };\n },\n\n minimal: ({ theme, flags }) => ({\n padding: 0,\n '&:hover': flags.clickable ? { color: theme.palette.primary.main } : {},\n }),\n\n default: () => ({}),\n};\n\n/** How the text sits: its alignment, weight, casing and overflow behaviour. */\nconst textLayout = (theme: Theme, flags: LabelStyleFlags): CSSObject => {\n const { srOnly, clickable, align, weight, transform, nowrap, truncate } = flags;\n\n return {\n display: srOnly ? 'none' : 'inline-flex',\n alignItems: 'center',\n gap: theme.spacing(0.5),\n transition: theme.transitions.create(['all'], {\n duration: theme.transitions.duration.standard,\n }),\n cursor: clickable ? 'pointer' : 'default',\n textAlign: align,\n fontWeight: fontWeight(weight),\n textTransform: transform,\n whiteSpace: nowrap ? 'nowrap' : 'normal',\n overflow: truncate ? 'hidden' : 'visible',\n textOverflow: truncate ? 'ellipsis' : 'clip',\n position: 'relative' as const,\n };\n};\n\nexport const labelStyles = (theme: Theme, flags: LabelStyleFlags): CSSObject => {\n const { variant, size, clickable } = flags;\n const color = textColor(theme, flags);\n const accent = color || theme.palette.primary.main;\n\n return {\n ...textLayout(theme, flags),\n ...sizeStyles(theme, size),\n color,\n ...(flags.glow && { textShadow: `0 0 10px ${alpha(accent, 0.5)}` }),\n ...(flags.pulse && {\n animation: 'pulse 2s infinite',\n '@keyframes pulse': {\n '0%': { opacity: 1 },\n '50%': { opacity: 0.6 },\n '100%': { opacity: 1 },\n },\n }),\n ...(flags.ripple && clickable && rippleStyles(theme)),\n ...(SURFACES[variant] ?? SURFACES.default)({ theme, flags, accent }),\n };\n};\n\n/** Visually hidden but still read aloud, for the `srOnly` label. */\nexport const SR_ONLY_SX: CSSObject = {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: 0,\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: 0,\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/Tooltip/Tooltip.tsx"],"sourcesContent":["import MuiTooltip from '@mui/material/Tooltip/index.js';\nimport { alpha, keyframes, styled } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport type { TooltipProps } from './Tooltip.types';\nimport { absoluteInk, neutralTones } from '../../../tokens/ink';\n\n// Define pulse animation\nconst pulseAnimation = keyframes`\n 0% {\n transform: scale(1);\n opacity: 1;\n }\n 70% {\n transform: scale(1.05);\n opacity: 0.8;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n`;\n\nconst SIZE_MAP = {\n sm: { fontSize: '0.75rem', padding: '4px 8px' },\n md: { fontSize: '0.875rem', padding: '6px 12px' },\n lg: { fontSize: '1rem', padding: '8px 16px' },\n} as const;\n\nconst getSizeStyles = (size?: string): { fontSize: string; padding: string } =>\n SIZE_MAP[size as keyof typeof SIZE_MAP] || SIZE_MAP.md;\n\nconst variantStyles = (theme: Theme, variant?: string): CSSObject => {\n switch (variant) {\n case 'default':\n return {\n backgroundColor: alpha(neutralTones(theme).inverseSurface, 0.9),\n color: absoluteInk(theme).white,\n };\n case 'dark':\n return {\n backgroundColor: neutralTones(theme).inverseSurface,\n color: absoluteInk(theme).white,\n };\n case 'light':\n return {\n backgroundColor: absoluteInk(theme).white,\n color: theme.palette.text.primary,\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n boxShadow: theme.shadows[4],\n };\n case 'glass':\n return {\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: theme.palette.text.primary,\n };\n default:\n return {};\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.\nconst emphasisStyles = (theme: Theme, glow?: boolean, pulse?: boolean): CSSObject => ({\n ...(glow && {\n boxShadow: `0 0 15px 3px ${alpha(theme.palette.primary.main, 0.4)} !important`,\n filter: 'brightness(1.05)',\n }),\n ...(pulse && {\n animation: `${pulseAnimation} 2s infinite`,\n }),\n});\n\nconst arrowColor = (theme: Theme, variant?: string): string => {\n switch (variant) {\n case 'light':\n return absoluteInk(theme).white;\n case 'glass':\n return alpha(theme.palette.background.paper, 0.1);\n case 'dark':\n return neutralTones(theme).inverseSurface;\n default:\n return alpha(neutralTones(theme).inverseSurface, 0.9);\n }\n};\n\nconst StyledTooltip = styled(MuiTooltip, {\n shouldForwardProp: (prop) =>\n !['customVariant', 'customSize', 'glow', 'pulse'].includes(prop as string),\n})<{\n customVariant?: string;\n customSize?: string;\n glow?: boolean;\n pulse?: boolean;\n}>(({ theme, customVariant, customSize, glow, pulse }) => {\n const sizeStyles = getSizeStyles(customSize);\n\n return {\n '& .MuiTooltip-tooltip': {\n borderRadius: theme.spacing(1),\n fontSize: sizeStyles.fontSize,\n padding: sizeStyles.padding,\n fontWeight: 500,\n transition: 'all 0.3s ease',\n position: 'relative',\n overflow: 'hidden',\n ...variantStyles(theme, customVariant),\n ...emphasisStyles(theme, glow, pulse),\n },\n\n '& .MuiTooltip-arrow': {\n color: arrowColor(theme, customVariant),\n },\n };\n});\n\nexport const Tooltip = React.forwardRef<HTMLDivElement, TooltipProps>(\n (\n {\n variant = 'default',\n size = 'md',\n glow = false,\n pulse = false,\n maxWidth = 300,\n dataTestId,\n children,\n ...props\n },\n ref,\n ) => {\n const childWithTestId = dataTestId\n ? React.cloneElement(children as React.ReactElement<{ 'data-testid'?: string }>, {\n 'data-testid': `${dataTestId}-trigger`,\n })\n : children;\n\n return (\n <StyledTooltip\n ref={ref}\n customVariant={variant}\n customSize={size}\n glow={glow}\n pulse={pulse}\n enterDelay={0}\n leaveDelay={0}\n disableHoverListener={false}\n disableFocusListener={false}\n disableTouchListener={false}\n slotProps={{\n tooltip: {\n sx: { maxWidth },\n role: 'tooltip',\n ...(dataTestId && { 'data-testid': `${dataTestId}-content` }),\n },\n }}\n {...props}\n >\n {childWithTestId}\n </StyledTooltip>\n );\n },\n);\n\nTooltip.displayName = 'Tooltip';\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/DataViews/data-views-scopes.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useMemo, useRef } from \"react\";\n\nimport { useDataViewsCopy } from \"./data-views-copy-context\";\nimport { Box } from \"../../../mui/Box\";\n\n/**\n * SCOPES — a page-level partition rendered as a strip of tabs under the toolbar.\n *\n * A scope is not a filter. Filters NARROW within the current partition and are\n * multi-select by design; a scope PARTITIONS and is exclusive. The distinction\n * is load-bearing for three reasons, and each is why `FilterFieldConfig` could\n * not express these tabs:\n *\n * 1. They are mutually exclusive, and a pill is not.\n * 2. They carry counts of the WHOLE query, which no client can compute under\n * pagination — the count has to come off the response\n * ({@link DataViewServer.scopeCounts}).\n * 3. They compose with the filters instead of competing with them: the scope\n * picks the bucket, the pills narrow inside it.\n *\n * The `predicate` is deliberately opaque to this package. Only the host knows\n * what \"recusados\" selects; the component's whole job is to say WHICH scope is\n * active and let the server answer.\n */\nexport interface ScopeConfig {\n /** Stable id — travels in `DataViewQuery.scope` and in a saved view's state. */\n id: string;\n label: string;\n /**\n * Opaque payload the SERVER interprets. Omitted on the \"all\" scope. Never read\n * by this package: a scope is applied at the backend, never in the browser.\n */\n predicate?: unknown;\n}\n\n/**\n * The active scope id, resolved against what the table currently declares.\n *\n * Resolution happens at READ time, on purpose. A saved view is written once and\n * read many times, and the declared scopes change underneath it — a scope\n * removed after a view was saved must fall back at render rather than break the\n * view or, worse, emit a scope the backend rejects. Resolving on write would\n * bake the mistake in.\n *\n * Returns `undefined` when the table declares no scopes, which is what keeps\n * `scope` out of the emitted query entirely for every table that never opted in.\n */\nexport function resolveScope(scopes: ScopeConfig[], stored: string | undefined): string | undefined {\n if (scopes.length === 0) return undefined;\n const declared = stored !== undefined && scopes.some((scope) => scope.id === stored);\n return declared ? stored : scopes[0]?.id;\n}\n\n/** Are we running outside production? Config mistakes fail loudly only here. */\nfunction isDevelopment(): boolean {\n return typeof process !== \"undefined\" && process.env?.NODE_ENV !== \"production\";\n}\n\n/**\n * Reject a table that partitions by a field AND declares a filter pill over the\n * same field. Two controls over one field is how a tab and a pill end up\n * contradicting each other — the pill says \"estado ∈ {pago, recusado}\" while the\n * tab says \"estado = recusado\", and nothing in either control can show the user\n * which one the server honoured.\n *\n * Throws in DEVELOPMENT ONLY. A thrown config error in production is strictly\n * worse than a duplicated control: the duplicate is confusing, the throw is a\n * blank page. Fail where it is seen and fixed.\n *\n * `scopeFieldId` is the field the scopes partition by, when the host knows it.\n * Absent, the scope IDS are checked against the field ids — which catches the\n * common shape where the scope ids ARE the field's values (`pago`, `recusado`)\n * declared a second time as a pill.\n */\nexport function assertNoScopePillOverlap(\n scopes: ScopeConfig[],\n fieldIds: string[],\n scopeFieldId?: string,\n): void {\n if (scopes.length === 0 || !isDevelopment()) return;\n const clash = scopeFieldId !== undefined && fieldIds.includes(scopeFieldId) ? scopeFieldId : undefined;\n if (clash === undefined) return;\n throw new Error(\n `DataViews: the field \"${clash}\" is both the scope partition (scopes: ` +\n `${scopes.map((scope) => scope.id).join(\", \")}) and a filter field (fields: ` +\n `${fieldIds.join(\", \")}). A field may drive the scope tabs or a filter pill, not both — ` +\n `drop one of the two declarations.`,\n );\n}\n\n/**\n * A development-only warning that scopes need server wiring. Scopes are resolved\n * and emitted, never applied in the browser: filtering locally would make the\n * counts, the \"N de N\" counter and the rendered rows disagree the moment a\n * second page exists.\n */\nexport function warnScopesNeedServer(scopes: ScopeConfig[], hasServer: boolean): void {\n if (scopes.length === 0 || hasServer || !isDevelopment()) return;\n // eslint-disable-next-line no-console -- a config warning has no other channel.\n console.warn(\n \"DataViews: `scopes` require server mode. The scope is tracked and would be emitted, \" +\n \"but with no `server` there is nothing to emit it to and rows are NOT filtered in the browser. \" +\n \"Supply `server` (see DataViewServer) or drop the scopes.\",\n );\n}\n\n/**\n * The scope configuration's setup-time checks, run once per configuration rather\n * than per render: reject a field that is both a scope partition and a filter\n * pill (development only — see `assertNoScopePillOverlap`), and warn about\n * scopes declared with no server to apply them.\n *\n * In a `useMemo` so a mistake surfaces during the FIRST render, where the stack\n * still points at the table that made it.\n */\nexport function useScopeConfigChecks(\n scopes: ScopeConfig[],\n fieldIds: string[],\n scopeFieldId: string | undefined,\n hasServer: boolean,\n): void {\n useMemo(() => {\n assertNoScopePillOverlap(scopes, fieldIds, scopeFieldId);\n warnScopesNeedServer(scopes, hasServer);\n // Keyed on the ids rather than the arrays: hosts pass inline literals, so the\n // array identity changes every render while the configuration does not.\n }, [scopes, fieldIds.join(\",\"), scopeFieldId, hasServer]);\n}\n\n/** Everything the tab strip needs; `counts` is absent when the server omits it. */\ninterface DataViewsScopeTabsProps {\n scopes: ScopeConfig[];\n /** The RESOLVED active scope id (see {@link resolveScope}). */\n value: string | undefined;\n onChange: (id: string) => void;\n /** Server-supplied per-scope totals. Absent ⇒ tabs render WITHOUT numbers. */\n counts?: Record<string, number>;\n testIdPrefix: string;\n}\n\n/** The accessible name of one tab: its label, plus its count when there is one. */\nfunction tabLabel(label: string, count: number | undefined): string {\n return count === undefined ? label : `${label}, ${count}`;\n}\n\n/**\n * Move focus + selection between tabs with the arrow keys, wrapping at both\n * ends. Selection FOLLOWS focus here (an \"automatic activation\" tab list): each\n * arrow press is one scope change, which is one query — the same cost as a\n * click, and it keeps the strip's behaviour identical whichever input the\n * operator uses.\n */\nfunction arrowTarget(key: string, index: number, total: number): number | null {\n if (key === \"ArrowRight\") return (index + 1) % total;\n if (key === \"ArrowLeft\") return (index - 1 + total) % total;\n if (key === \"Home\") return 0;\n if (key === \"End\") return total - 1;\n return null;\n}\n\n/** The active tab's own scroll-into-view, so a deep link to a late scope lands visible. */\nfunction useScrollActiveIntoView(value: string | undefined): React.RefObject<HTMLDivElement | null> {\n const stripRef = useRef<HTMLDivElement | null>(null);\n useEffect(() => {\n const strip = stripRef.current;\n if (!strip || value === undefined) return;\n const active = strip.querySelector<HTMLElement>('[role=\"tab\"][aria-selected=\"true\"]');\n // jsdom implements neither, so guard rather than assume the DOM is a browser's.\n active?.scrollIntoView?.({ block: \"nearest\", inline: \"nearest\" });\n }, [value]);\n return stripRef;\n}\n\n/** One tab's visual + a11y state, kept out of the strip's map for readability. */\nfunction scopeTabSx(active: boolean): Record<string, unknown> {\n return {\n // A 44px min target: the strip is the first thing a thumb reaches on a phone.\n minHeight: 44,\n px: 1.5,\n py: 1,\n border: 0,\n borderBottom: 2,\n borderStyle: \"solid\",\n borderColor: active ? \"primary.main\" : \"transparent\",\n background: \"none\",\n cursor: \"pointer\",\n whiteSpace: \"nowrap\",\n font: \"inherit\",\n fontSize: \"0.8125rem\",\n fontWeight: active ? 600 : 400,\n color: active ? \"primary.main\" : \"text.secondary\",\n \"&:hover\": { color: active ? \"primary.main\" : \"text.primary\" },\n \"&:focus-visible\": { outline: \"2px solid\", outlineColor: \"primary.main\", outlineOffset: -2 },\n };\n}\n\n/** The count badge. Rendered only when the server actually supplied a number. */\nfunction ScopeCount({\n count,\n active,\n testId,\n}: {\n count: number;\n active: boolean;\n testId: string;\n}): React.JSX.Element {\n return (\n <Box\n component=\"span\"\n // The number is already in the tab's `aria-label`; announcing it twice\n // would read \"Recusados 2, 2\".\n aria-hidden=\"true\"\n data-testid={testId}\n sx={{\n ml: 0.75,\n px: 0.75,\n borderRadius: 5,\n fontSize: \"0.6875rem\",\n fontWeight: 600,\n bgcolor: active ? \"primary.main\" : \"action.selected\",\n color: active ? \"primary.contrastText\" : \"text.secondary\",\n }}\n >\n {count}\n </Box>\n );\n}\n\ninterface ScopeTabProps {\n scope: ScopeConfig;\n index: number;\n total: number;\n active: boolean;\n count: number | undefined;\n onChange: (id: string) => void;\n /**\n * Move to the tab at `index`: focus it AND select it. Only the strip knows\n * the other scopes and owns the DOM, so the move belongs to it.\n */\n moveTo: (index: number) => void;\n testIdPrefix: string;\n}\n\n/** One tab: a real `<button role=\"tab\">` with a roving tabindex and arrow keys. */\nfunction ScopeTab({\n scope,\n index,\n total,\n active,\n count,\n onChange,\n moveTo,\n testIdPrefix,\n}: ScopeTabProps): React.JSX.Element {\n return (\n <Box\n component=\"button\"\n type=\"button\"\n role=\"tab\"\n id={`${testIdPrefix}-scope-tab-${scope.id}`}\n aria-selected={active}\n // Roving tabindex: one tab stop for the whole strip, arrows move within it.\n tabIndex={active ? 0 : -1}\n aria-label={tabLabel(scope.label, count)}\n data-testid={`${testIdPrefix}-scope-${scope.id}`}\n onClick={() => onChange(scope.id)}\n onKeyDown={(event: React.KeyboardEvent<HTMLButtonElement>) => {\n const target = arrowTarget(event.key, index, total);\n if (target === null) return;\n event.preventDefault();\n moveTo(target);\n }}\n sx={scopeTabSx(active)}\n >\n {scope.label}\n {count !== undefined && (\n <ScopeCount\n count={count}\n active={active}\n testId={`${testIdPrefix}-scope-count-${scope.id}`}\n />\n )}\n </Box>\n );\n}\n\n/** The strip's own layout: one non-wrapping row that scrolls horizontally. */\nconst STRIP_SX = {\n display: \"flex\",\n alignItems: \"stretch\",\n gap: 0.5,\n // One row that scrolls — never wraps, never collapses into a select.\n flexWrap: \"nowrap\",\n overflowX: \"auto\",\n overflowY: \"hidden\",\n scrollbarWidth: \"thin\",\n borderBottom: 1,\n borderColor: \"divider\",\n mx: { xs: -2, md: -3 },\n px: { xs: 2, md: 3 },\n} as const;\n\n/**\n * The scope strip: a horizontally scrolling tab list under the toolbar.\n *\n * It SCROLLS rather than collapsing into a select on a narrow screen, which is\n * the opposite of what the filter pills do — and deliberately. The counts are\n * the reason the tabs exist at all; burying them behind a menu costs a tap per\n * glance, exactly on the device where glancing is the point.\n *\n * Counts render verbatim from `counts` — never derived from the loaded page, and\n * never invented when the key is missing. A missing count means \"the server did\n * not say\", which reads honestly as no badge at all.\n */\nexport function DataViewsScopeTabs({\n scopes,\n value,\n onChange,\n counts,\n testIdPrefix,\n}: DataViewsScopeTabsProps): React.JSX.Element | null {\n const copy = useDataViewsCopy();\n const stripRef = useScrollActiveIntoView(value);\n const moveTo = (index: number): void => {\n // Focus FIRST, then select: the roving tabindex follows the selection, so\n // focusing afterwards would land on a tab that has given up its tab stop.\n stripRef.current?.querySelectorAll<HTMLElement>('[role=\"tab\"]')?.[index]?.focus();\n const next = scopes[index];\n if (next) onChange(next.id);\n };\n // Reserve NO vertical space when there is nothing to show: a page that\n // declares no scopes must not gain an empty row.\n if (scopes.length === 0) return null;\n const activeIndex = Math.max(\n 0,\n scopes.findIndex((scope) => scope.id === value),\n );\n\n return (\n <Box ref={stripRef} role=\"tablist\" aria-label={copy.filters.scopesLabel} data-testid={`${testIdPrefix}-scopes`} sx={STRIP_SX}>\n {scopes.map((scope, index) => (\n <ScopeTab\n key={scope.id}\n scope={scope}\n index={index}\n total={scopes.length}\n active={index === activeIndex}\n count={counts?.[scope.id]}\n onChange={onChange}\n moveTo={moveTo}\n testIdPrefix={testIdPrefix}\n />\n ))}\n </Box>\n );\n}\n"],"mappings":";;;;;;;;AAEA,SAAS,WAAW,SAAS,cAAc;AA+MvC,cAgDA,YAhDA;AAhKG,SAAS,aAAa,QAAuB,QAAgD;AAClG,MAAI,OAAO,WAAW,EAAG,QAAO;AAChC,QAAM,WAAW,WAAW,UAAa,OAAO,KAAK,CAAC,UAAU,MAAM,OAAO,MAAM;AACnF,SAAO,WAAW,SAAS,OAAO,CAAC,GAAG;AACxC;AAGA,SAAS,gBAAyB;AAChC,SAAO,OAAO,YAAY,eAAe,QAAQ,KAAK,aAAa;AACrE;AAkBO,SAAS,yBACd,QACA,UACA,cACM;AACN,MAAI,OAAO,WAAW,KAAK,CAAC,cAAc,EAAG;AAC7C,QAAM,QAAQ,iBAAiB,UAAa,SAAS,SAAS,YAAY,IAAI,eAAe;AAC7F,MAAI,UAAU,OAAW;AACzB,QAAM,IAAI;AAAA,IACR,yBAAyB,KAAK,0CACzB,OAAO,IAAI,CAAC,UAAU,MAAM,EAAE,EAAE,KAAK,IAAI,CAAC,iCAC1C,SAAS,KAAK,IAAI,CAAC;AAAA,EAE1B;AACF;AAQO,SAAS,qBAAqB,QAAuB,WAA0B;AACpF,MAAI,OAAO,WAAW,KAAK,aAAa,CAAC,cAAc,EAAG;AAE1D,UAAQ;AAAA,IACN;AAAA,EAGF;AACF;AAWO,SAAS,qBACd,QACA,UACA,cACA,WACM;AACN,UAAQ,MAAM;AACZ,6BAAyB,QAAQ,UAAU,YAAY;AACvD,yBAAqB,QAAQ,SAAS;AAAA,EAGxC,GAAG,CAAC,QAAQ,SAAS,KAAK,GAAG,GAAG,cAAc,SAAS,CAAC;AAC1D;AAcA,SAAS,SAAS,OAAe,OAAmC;AAClE,SAAO,UAAU,SAAY,QAAQ,GAAG,KAAK,KAAK,KAAK;AACzD;AASA,SAAS,YAAY,KAAa,OAAe,OAA8B;AAC7E,MAAI,QAAQ,aAAc,SAAQ,QAAQ,KAAK;AAC/C,MAAI,QAAQ,YAAa,SAAQ,QAAQ,IAAI,SAAS;AACtD,MAAI,QAAQ,OAAQ,QAAO;AAC3B,MAAI,QAAQ,MAAO,QAAO,QAAQ;AAClC,SAAO;AACT;AAGA,SAAS,wBAAwB,OAAmE;AAClG,QAAM,WAAW,OAA8B,IAAI;AACnD,YAAU,MAAM;AACd,UAAM,QAAQ,SAAS;AACvB,QAAI,CAAC,SAAS,UAAU,OAAW;AACnC,UAAM,SAAS,MAAM,cAA2B,oCAAoC;AAEpF,YAAQ,iBAAiB,EAAE,OAAO,WAAW,QAAQ,UAAU,CAAC;AAAA,EAClE,GAAG,CAAC,KAAK,CAAC;AACV,SAAO;AACT;AAGA,SAAS,WAAW,QAA0C;AAC5D,SAAO;AAAA;AAAA,IAEL,WAAW;AAAA,IACX,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,aAAa;AAAA,IACb,aAAa,SAAS,iBAAiB;AAAA,IACvC,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,UAAU;AAAA,IACV,YAAY,SAAS,MAAM;AAAA,IAC3B,OAAO,SAAS,iBAAiB;AAAA,IACjC,WAAW,EAAE,OAAO,SAAS,iBAAiB,eAAe;AAAA,IAC7D,mBAAmB,EAAE,SAAS,aAAa,cAAc,gBAAgB,eAAe,GAAG;AAAA,EAC7F;AACF;AAGA,SAAS,WAAW;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AACF,GAIsB;AACpB,SACE;AAAA,IAACA;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MAGV,eAAY;AAAA,MACZ,eAAa;AAAA,MACb,IAAI;AAAA,QACF,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,cAAc;AAAA,QACd,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,SAAS,SAAS,iBAAiB;AAAA,QACnC,OAAO,SAAS,yBAAyB;AAAA,MAC3C;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;AAkBA,SAAS,SAAS;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAqC;AACnC,SACE;AAAA,IAACA;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,MAAK;AAAA,MACL,MAAK;AAAA,MACL,IAAI,GAAG,YAAY,cAAc,MAAM,EAAE;AAAA,MACzC,iBAAe;AAAA,MAEf,UAAU,SAAS,IAAI;AAAA,MACvB,cAAY,SAAS,MAAM,OAAO,KAAK;AAAA,MACvC,eAAa,GAAG,YAAY,UAAU,MAAM,EAAE;AAAA,MAC9C,SAAS,MAAM,SAAS,MAAM,EAAE;AAAA,MAChC,WAAW,CAAC,UAAkD;AAC5D,cAAM,SAAS,YAAY,MAAM,KAAK,OAAO,KAAK;AAClD,YAAI,WAAW,KAAM;AACrB,cAAM,eAAe;AACrB,eAAO,MAAM;AAAA,MACf;AAAA,MACA,IAAI,WAAW,MAAM;AAAA,MAEpB;AAAA,cAAM;AAAA,QACN,UAAU,UACT;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA,QAAQ,GAAG,YAAY,gBAAgB,MAAM,EAAE;AAAA;AAAA,QACjD;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAGA,IAAM,WAAW;AAAA,EACf,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,KAAK;AAAA;AAAA,EAEL,UAAU;AAAA,EACV,WAAW;AAAA,EACX,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,aAAa;AAAA,EACb,IAAI,EAAE,IAAI,IAAI,IAAI,GAAG;AAAA,EACrB,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE;AACrB;AAcO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAsD;AACpD,QAAM,OAAO,iBAAiB;AAC9B,QAAM,WAAW,wBAAwB,KAAK;AAC9C,QAAM,SAAS,CAAC,UAAwB;AAGtC,aAAS,SAAS,iBAA8B,cAAc,IAAI,KAAK,GAAG,MAAM;AAChF,UAAM,OAAO,OAAO,KAAK;AACzB,QAAI,KAAM,UAAS,KAAK,EAAE;AAAA,EAC5B;AAGA,MAAI,OAAO,WAAW,EAAG,QAAO;AAChC,QAAM,cAAc,KAAK;AAAA,IACvB;AAAA,IACA,OAAO,UAAU,CAAC,UAAU,MAAM,OAAO,KAAK;AAAA,EAChD;AAEA,SACE,oBAACA,UAAA,EAAI,KAAK,UAAU,MAAK,WAAU,cAAY,KAAK,QAAQ,aAAa,eAAa,GAAG,YAAY,WAAW,IAAI,UACjH,iBAAO,IAAI,CAAC,OAAO,UAClB;AAAA,IAAC;AAAA;AAAA,MAEC;AAAA,MACA;AAAA,MACA,OAAO,OAAO;AAAA,MACd,QAAQ,UAAU;AAAA,MAClB,OAAO,SAAS,MAAM,EAAE;AAAA,MACxB;AAAA,MACA;AAAA,MACA;AAAA;AAAA,IARK,MAAM;AAAA,EASb,CACD,GACH;AAEJ;","names":["default"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/DataViews/SaveViewModal.tsx"],"sourcesContent":["\"use client\";\n\nimport GroupOutlinedIcon from \"@mui/icons-material/GroupOutlined\";\nimport PushPinOutlinedIcon from \"@mui/icons-material/PushPinOutlined\";\nimport StarOutlineRoundedIcon from \"@mui/icons-material/StarOutlineRounded\";\nimport { useState } from \"react\";\n\nimport { useDataViewsCopy } from \"./data-views-copy-context\";\nimport { Dialog, DialogContent } from \"../../feedback/Dialog\";\nimport { Button } from \"../../form/Button\";\nimport { Input } from \"../../form/Input\";\nimport { Switch } from \"../../form/Switch\";\nimport { Box } from \"../../../mui/Box\";\nimport { Stack } from \"../../../mui/Stack\";\nimport { Text } from \"../../typography/Text\";\n\nimport { describeViewState } from \"./data-views-preview\";\nimport { PreviewBox } from \"./save-view-preview\";\nimport type {\n DataViewColumn,\n DataViewState,\n FilterFieldConfig,\n SavedViewSummary,\n} from \"./data-views-types\";\n\n/** The values the modal collects (the current view state is captured by the parent). */\nexport interface SaveViewPayload {\n name: string;\n description: string;\n shared: boolean;\n pinned: boolean;\n isDefault: boolean;\n}\n\ninterface SaveViewModalProps<T extends Record<string, unknown>> {\n open: boolean;\n onClose: () => void;\n /** The state being saved (drives the preview). */\n currentState: DataViewState;\n fields: FilterFieldConfig<T>[];\n columns: DataViewColumn<T>[];\n /** When set, the modal edits this view (seeds the form + becomes \"Salvar alterações\"). */\n editing?: SavedViewSummary | null;\n onSave: (payload: SaveViewPayload) => Promise<void> | void;\n testIdPrefix?: string;\n}\n\ninterface FlagsSwitchesProps {\n pinned: boolean;\n shared: boolean;\n isDefault: boolean;\n setPinned: (value: boolean) => void;\n setShared: (value: boolean) => void;\n setIsDefault: (value: boolean) => void;\n testIdPrefix: string;\n}\n\n/**\n * One flag: what it is, and what it DOES. A bare \"Fixar na barra lateral\"\n * beside a switch asks the operator to guess where it appears and to whom —\n * the sentence is the difference between a labelled toggle and an explained one.\n */\nfunction FlagRow({\n icon,\n title,\n description,\n checked,\n onChange,\n testId,\n}: {\n icon: React.ReactNode;\n title: string;\n description: string;\n checked: boolean;\n onChange: (value: boolean) => void;\n testId: string;\n}): React.JSX.Element {\n return (\n <Box\n component=\"label\"\n sx={{\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: 1.5,\n px: 1,\n py: 1,\n borderRadius: 1,\n cursor: \"pointer\",\n \"&:hover\": { bgcolor: \"action.hover\" },\n }}\n >\n <Box sx={{ mt: 0.25, color: \"text.disabled\", display: \"flex\" }}>{icon}</Box>\n <Box sx={{ minWidth: 0, flex: 1 }}>\n <Text variant=\"body\" as=\"span\">\n <Box component=\"span\" sx={{ display: \"block\", fontSize: \"0.875rem\" }}>\n {title}\n </Box>\n </Text>\n <Text variant=\"caption\" as=\"span\">\n <Box component=\"span\" sx={{ display: \"block\", color: \"text.secondary\", lineHeight: 1.5 }}>\n {description}\n </Box>\n </Text>\n </Box>\n <Switch\n size=\"sm\"\n checked={checked}\n onChange={(_event, value) => onChange(value)}\n dataTestId={testId}\n />\n </Box>\n );\n}\n\nfunction FlagsSwitches({\n pinned,\n shared,\n isDefault,\n setPinned,\n setShared,\n setIsDefault,\n testIdPrefix,\n}: FlagsSwitchesProps): React.JSX.Element {\n const copy = useDataViewsCopy();\n return (\n <Stack spacing={0}>\n <FlagRow\n icon={<PushPinOutlinedIcon fontSize=\"small\" />}\n title={copy.saveView.pinnedTitle}\n description={copy.saveView.pinnedDescription}\n checked={pinned}\n onChange={setPinned}\n testId={`${testIdPrefix}-save-pinned`}\n />\n <FlagRow\n icon={<GroupOutlinedIcon fontSize=\"small\" />}\n title={copy.saveView.sharedTitle}\n description={copy.saveView.sharedDescription}\n checked={shared}\n onChange={setShared}\n testId={`${testIdPrefix}-save-shared`}\n />\n <FlagRow\n icon={<StarOutlineRoundedIcon fontSize=\"small\" />}\n title={copy.saveView.setDefaultTitle}\n description={copy.saveView.setDefaultDescription}\n checked={isDefault}\n onChange={setIsDefault}\n testId={`${testIdPrefix}-save-default`}\n />\n </Stack>\n );\n}\n\ninterface SaveViewFormState {\n name: string;\n description: string;\n pinned: boolean;\n shared: boolean;\n isDefault: boolean;\n canSave: boolean;\n error: string | null;\n setName: (value: string) => void;\n setDescription: (value: string) => void;\n setPinned: (value: boolean) => void;\n setShared: (value: boolean) => void;\n setIsDefault: (value: boolean) => void;\n submit: () => Promise<void>;\n}\n\n/** The initial form values, seeded from an edited view (or blank for create). */\nfunction seedForm(editing: SavedViewSummary | null | undefined): SaveViewPayload {\n if (!editing) {\n return { name: \"\", description: \"\", pinned: false, shared: false, isDefault: false };\n }\n return {\n name: editing.name,\n description: editing.description ?? \"\",\n pinned: editing.pinned,\n shared: editing.shared,\n isDefault: editing.isDefault,\n };\n}\n\n/** Local form state + submit for {@link SaveViewModal}, seeded from an edited view. */\nfunction useSaveViewForm(\n editing: SavedViewSummary | null | undefined,\n onSave: (payload: SaveViewPayload) => Promise<void> | void,\n): SaveViewFormState {\n const copy = useDataViewsCopy();\n const initial = seedForm(editing);\n const [name, setName] = useState(initial.name);\n const [description, setDescription] = useState(initial.description);\n const [pinned, setPinned] = useState(initial.pinned);\n const [shared, setShared] = useState(initial.shared);\n const [isDefault, setIsDefault] = useState(initial.isDefault);\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const canSave = name.trim().length > 0 && !saving;\n\n async function submit(): Promise<void> {\n setSaving(true);\n setError(null);\n // A rejected save (e.g. duplicate name) is caught here so the modal stays\n // open and shows the reason; the finally always re-enables the button.\n try {\n await onSave({ name: name.trim(), description: description.trim(), shared, pinned, isDefault });\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : copy.saveView.saveFailed);\n } finally {\n setSaving(false);\n }\n }\n\n return {\n name,\n description,\n pinned,\n shared,\n isDefault,\n canSave,\n error,\n setName,\n setDescription,\n setPinned,\n setShared,\n setIsDefault,\n submit,\n };\n}\n\n/**\n * The \"Salvar visão\" modal (FUT-89): captures a name + description and the pin /\n * share / default flags, and previews the filters, visible columns, and sort the\n * view will store. Used for both create and edit.\n */\n/**\n * The dialog's two buttons.\n *\n * Cancel first, primary last: the confirming action sits where the eye lands\n * at the end of the dialog, not before the way out.\n */\nfunction FormFooter({\n editing,\n canSave,\n onSubmit,\n onClose,\n testIdPrefix,\n}: {\n editing: SaveViewModalProps<never>[\"editing\"];\n canSave: boolean;\n onSubmit: () => void;\n onClose: () => void;\n testIdPrefix: string;\n}): React.JSX.Element {\n const copy = useDataViewsCopy();\n return (\n <Stack direction=\"row\" spacing={1.5} sx={{ justifyContent: \"flex-end\" }}>\n <Button variant=\"text\" color=\"neutral\" onClick={onClose} dataTestId={`${testIdPrefix}-save-cancel`}>\n {copy.saveView.cancel}\n </Button>\n <Button onClick={onSubmit} disabled={!canSave} dataTestId={`${testIdPrefix}-save-submit`}>\n {editing ? copy.saveView.submitEditing : copy.saveView.submitCreating}\n </Button>\n </Stack>\n );\n}\n\nexport function SaveViewModal<T extends Record<string, unknown>>({\n open,\n onClose,\n currentState,\n fields,\n columns,\n editing,\n onSave,\n testIdPrefix = \"view\",\n}: SaveViewModalProps<T>): React.JSX.Element {\n const copy = useDataViewsCopy();\n const form = useSaveViewForm(editing, onSave);\n const preview = describeViewState(currentState, fields, columns);\n\n return (\n <Dialog\n open={open}\n onClose={onClose}\n title={editing ? copy.saveView.titleEditing : copy.saveView.titleCreating}\n size=\"sm\"\n showCloseButton\n dataTestId={`${testIdPrefix}-save-modal`}\n >\n <DialogContent>\n <Stack spacing={2} data-testid={`${testIdPrefix}-save-form`}>\n <Input\n size=\"sm\"\n fullWidth\n label={copy.saveView.nameLabel}\n placeholder={copy.saveView.namePlaceholder}\n value={form.name}\n onChange={(event) => form.setName(event.target.value)}\n data-testid={`${testIdPrefix}-save-name`}\n />\n <Input\n size=\"sm\"\n fullWidth\n label={copy.saveView.descriptionLabel}\n placeholder={copy.saveView.descriptionPlaceholder}\n value={form.description}\n onChange={(event) => form.setDescription(event.target.value)}\n data-testid={`${testIdPrefix}-save-description`}\n />\n\n <FlagsSwitches\n pinned={form.pinned}\n shared={form.shared}\n isDefault={form.isDefault}\n setPinned={form.setPinned}\n setShared={form.setShared}\n setIsDefault={form.setIsDefault}\n testIdPrefix={testIdPrefix}\n />\n\n <PreviewBox preview={preview} testIdPrefix={testIdPrefix} />\n\n {form.error && (\n <Text variant=\"caption\" color=\"danger\" as=\"p\" data-testid={`${testIdPrefix}-save-error`}>\n {form.error}\n </Text>\n )}\n\n <FormFooter\n editing={editing}\n canSave={form.canSave}\n onSubmit={() => void form.submit()}\n onClose={onClose}\n testIdPrefix={testIdPrefix}\n />\n </Stack>\n </DialogContent>\n </Dialog>\n );\n}\n"],"mappings":"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","names":["default"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/typography/Blockquote/Blockquote.tsx"],"sourcesContent":["import FormatQuote from '@mui/icons-material/FormatQuote';\nimport type { Theme } from '@mui/material/styles/index.js';\nimport Box from '@mui/material/Box/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, styled } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport type { BlockquoteProps } from './Blockquote.types';\nimport { absoluteInk, controlNeutral, neutralTones } from '../../../tokens/ink';\n\nconst getColorFromTheme = (theme: Theme, color: string) => {\n if (color === 'neutral') {\n const { main, light, dark } = controlNeutral(theme);\n return { main, light, dark };\n }\n\n const colorMap: Record<string, typeof theme.palette.primary> = {\n primary: theme.palette.primary,\n secondary: theme.palette.secondary,\n success: theme.palette.success,\n warning: theme.palette.warning,\n info: theme.palette.info,\n danger: theme.palette.error,\n };\n\n return colorMap[color] || theme.palette.primary;\n};\n\nconst StyledBlockquote = styled('blockquote', {\n shouldForwardProp: (prop) => !['customVariant', 'customColor'].includes(prop as string),\n})<{\n customVariant?: string;\n customColor?: string;\n}>(({ theme, customVariant = 'default', customColor = 'neutral' }) => {\n const colorPalette = getColorFromTheme(theme, customColor);\n\n const baseStyles = {\n margin: '1.5em 0',\n padding: 0,\n position: 'relative' as const,\n fontFamily: theme.typography.body1.fontFamily,\n fontSize: '1.125rem',\n lineHeight: 1.6,\n fontStyle: 'italic',\n color: theme.palette.text.primary,\n };\n\n // Return styles based on variant\n if (customVariant === 'bordered') {\n return {\n ...baseStyles,\n padding: theme.spacing(3),\n border: `2px solid ${alpha(colorPalette.main, 0.2)}`,\n borderRadius: theme.shape.borderRadius * 2,\n backgroundColor: alpha(colorPalette.main, 0.03),\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: -1,\n left: -1,\n right: -1,\n bottom: -1,\n background: `linear-gradient(135deg, ${colorPalette.main}, ${colorPalette.light})`,\n borderRadius: theme.shape.borderRadius * 2,\n padding: '2px',\n WebkitMask: `linear-gradient(${absoluteInk(theme).white} 0 0) content-box, linear-gradient(${absoluteInk(theme).white} 0 0)`,\n WebkitMaskComposite: 'exclude',\n mask: `linear-gradient(${absoluteInk(theme).white} 0 0) content-box, linear-gradient(${absoluteInk(theme).white} 0 0)`,\n maskComposite: 'exclude',\n },\n };\n }\n\n if (customVariant === 'citation') {\n return {\n ...baseStyles,\n padding: theme.spacing(2, 3),\n backgroundColor:\n theme.palette.mode === 'dark'\n ? alpha(theme.palette.background.paper, 0.8)\n : alpha(neutralTones(theme).canvas, 0.95),\n backdropFilter: theme.palette.mode === 'dark' ? 'blur(10px)' : 'none',\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n borderRadius: theme.shape.borderRadius * 2,\n boxShadow: theme.palette.mode === 'dark' ? theme.shadows[4] : 'none',\n textAlign: 'center' as const,\n };\n }\n\n // Default variant\n return {\n ...baseStyles,\n paddingLeft: theme.spacing(3),\n borderLeft: `4px solid ${colorPalette.main}`,\n backgroundColor: alpha(colorPalette.main, 0.05),\n padding: theme.spacing(2, 3),\n borderRadius: theme.shape.borderRadius,\n };\n});\n\nconst QuoteIcon = styled(FormatQuote)<{ customColor: string }>(({ theme, customColor }) => {\n const colorPalette = getColorFromTheme(theme, customColor);\n \n return {\n position: 'absolute',\n top: theme.spacing(1),\n left: theme.spacing(1),\n fontSize: '2rem',\n opacity: 0.3,\n transform: 'rotate(180deg)',\n color: colorPalette.main,\n };\n});\n\nconst CitationContainer = styled(Box)(({ theme }) => ({\n marginTop: theme.spacing(2),\n textAlign: 'right',\n fontStyle: 'normal',\n opacity: 0.8,\n}));\n\nconst AuthorName = styled(Typography)(({ theme }) => ({\n fontWeight: 600,\n fontSize: '0.875rem',\n marginBottom: theme.spacing(0.5),\n}));\n\nconst SourceName = styled(Typography)(() => ({\n fontSize: '0.75rem',\n opacity: 0.7,\n}));\n\nexport const Blockquote = React.forwardRef<globalThis.HTMLQuoteElement, BlockquoteProps>(\n ({ variant = 'default', author, source, color = 'neutral', children, ...props }, ref) => {\n const showCitation = author || source;\n const showIcon = variant === 'bordered' || variant === 'citation';\n\n return (\n <StyledBlockquote ref={ref} customVariant={variant} customColor={color} {...props}>\n {showIcon && <QuoteIcon customColor={color} />}\n\n <Typography\n component=\"div\"\n sx={{\n fontSize: 'inherit',\n lineHeight: 'inherit',\n fontStyle: 'inherit',\n color: 'inherit',\n margin: 0,\n }}\n >\n {children}\n </Typography>\n\n {showCitation && (\n <CitationContainer>\n {author && <AuthorName>— {author}</AuthorName>}\n {source && <SourceName>{source}</SourceName>}\n </CitationContainer>\n )}\n </StyledBlockquote>\n );\n },\n);\n\nBlockquote.displayName = 'Blockquote';"],"mappings":"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","names":[]}
|