@12-apps/ui 6.7.0 → 6.8.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/{chunk-QLBYAYUG.js → chunk-KR2BP7NK.js} +4 -4
- package/dist/chunk-KR2BP7NK.js.map +1 -0
- package/dist/{chunk-DFVRZ3UK.js → chunk-KXARS46L.js} +3 -3
- package/dist/chunk-KXARS46L.js.map +1 -0
- package/dist/{chunk-JP55QWVR.js → chunk-L7L6SX64.js} +5 -2
- package/dist/chunk-L7L6SX64.js.map +1 -0
- package/dist/{chunk-QZZVHY6U.js → chunk-PVLDKXKR.js} +7 -3
- package/dist/chunk-PVLDKXKR.js.map +1 -0
- package/dist/{chunk-H7UAGTVW.js → chunk-TSG5C7MP.js} +4 -3
- package/dist/chunk-TSG5C7MP.js.map +1 -0
- package/dist/{chunk-NUCLEOHF.js → chunk-UNM7KFDX.js} +44 -14
- package/dist/chunk-UNM7KFDX.js.map +1 -0
- package/dist/{chunk-CEKPLUQV.js → chunk-UY7UF7IN.js} +19 -13
- package/dist/chunk-UY7UF7IN.js.map +1 -0
- package/dist/data-display/DataGrid.js +1 -1
- package/dist/data-display/DataViews.js +88 -65
- package/dist/data-display/DataViews.js.map +1 -1
- package/dist/data-display/HoverCard.js +4 -1
- package/dist/data-display/HoverCard.js.map +1 -1
- package/dist/data-display/Table.js +4 -2
- package/dist/data-display/Table.js.map +1 -1
- package/dist/data-display/TimingDiagram.js +3 -2
- package/dist/data-display/TimingDiagram.js.map +1 -1
- package/dist/feedback/Sonner.js +5 -4
- package/dist/feedback/Sonner.js.map +1 -1
- package/dist/feedback/StackedModal.js +1 -1
- package/dist/feedback/TutorialOverlay.js +19 -5
- package/dist/feedback/TutorialOverlay.js.map +1 -1
- package/dist/form/AddressAutocomplete.js +16 -8
- package/dist/form/AddressAutocomplete.js.map +1 -1
- package/dist/form/Autocomplete.js +9 -7
- package/dist/form/Autocomplete.js.map +1 -1
- package/dist/form/Calendar.js +1 -1
- package/dist/form/CodeEditor.js +14 -9
- package/dist/form/CodeEditor.js.map +1 -1
- package/dist/form/DateRangePicker.js +10 -3
- package/dist/form/DateRangePicker.js.map +1 -1
- package/dist/form/Menubar.js +4 -1
- package/dist/form/Menubar.js.map +1 -1
- package/dist/form/PasswordStrength.js +48 -28
- package/dist/form/PasswordStrength.js.map +1 -1
- package/dist/form/PhoneInput.js +11 -5
- package/dist/form/PhoneInput.js.map +1 -1
- package/dist/form/SearchPalette.js +4 -1
- package/dist/form/SearchPalette.js.map +1 -1
- package/dist/form/Textarea.js +21 -19
- package/dist/form/Textarea.js.map +1 -1
- package/dist/form/UploadButton.js +16 -11
- package/dist/form/UploadButton.js.map +1 -1
- package/dist/layout/ContentToolbar.js +1 -1
- package/dist/layout/Dashboard.js +2 -1
- package/dist/layout/Dashboard.js.map +1 -1
- package/dist/layout/ScrollArea.js +9 -3
- package/dist/layout/ScrollArea.js.map +1 -1
- package/dist/layout/TableFilter.js +1 -1
- package/dist/navigation/Breadcrumbs.js +9 -3
- package/dist/navigation/Breadcrumbs.js.map +1 -1
- package/dist/navigation/CommandPalette.js +20 -7
- package/dist/navigation/CommandPalette.js.map +1 -1
- package/dist/navigation/Pagination.js +1 -1
- package/dist/navigation/Tabs.js +7 -3
- package/dist/navigation/Tabs.js.map +1 -1
- package/dist/pt-BR.js +159 -8
- package/dist/pt-BR.js.map +1 -1
- package/dist/types/components/data-display/DataGrid/DataGrid.states.d.ts +1 -0
- package/dist/types/components/data-display/DataGrid/DataGrid.states.d.ts.map +1 -1
- package/dist/types/components/data-display/DataGrid/DataGrid.types.d.ts +5 -0
- package/dist/types/components/data-display/DataGrid/DataGrid.types.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-category-pill.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-copy.d.ts +27 -1
- package/dist/types/components/data-display/DataViews/data-views-copy.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-day-input.d.ts +12 -1
- package/dist/types/components/data-display/DataViews/data-views-day-input.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-grid-parts.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-pagination.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-toolbar.d.ts.map +1 -1
- package/dist/types/components/data-display/HoverCard/HoverCard.content.d.ts +1 -1
- package/dist/types/components/data-display/HoverCard/HoverCard.content.d.ts.map +1 -1
- package/dist/types/components/data-display/HoverCard/HoverCard.d.ts.map +1 -1
- package/dist/types/components/data-display/HoverCard/HoverCard.types.d.ts +2 -0
- package/dist/types/components/data-display/HoverCard/HoverCard.types.d.ts.map +1 -1
- package/dist/types/components/data-display/Table/Table.d.ts.map +1 -1
- package/dist/types/components/data-display/Table/Table.types.d.ts +5 -0
- package/dist/types/components/data-display/Table/Table.types.d.ts.map +1 -1
- package/dist/types/components/data-display/Table/TableStates.d.ts +3 -1
- package/dist/types/components/data-display/Table/TableStates.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.types.d.ts +3 -0
- package/dist/types/components/data-display/TimingDiagram/TimingDiagram.types.d.ts.map +1 -1
- package/dist/types/components/feedback/Sonner/Sonner.d.ts +8 -0
- package/dist/types/components/feedback/Sonner/Sonner.d.ts.map +1 -1
- package/dist/types/components/feedback/Sonner/Sonner.types.d.ts +2 -0
- package/dist/types/components/feedback/Sonner/Sonner.types.d.ts.map +1 -1
- package/dist/types/components/feedback/Sonner/SonnerToast.d.ts.map +1 -1
- package/dist/types/components/feedback/StackedModal/StackedModal.d.ts.map +1 -1
- package/dist/types/components/feedback/StackedModal/StackedModal.parts.d.ts +2 -0
- package/dist/types/components/feedback/StackedModal/StackedModal.parts.d.ts.map +1 -1
- package/dist/types/components/feedback/StackedModal/StackedModal.types.d.ts +2 -0
- package/dist/types/components/feedback/StackedModal/StackedModal.types.d.ts.map +1 -1
- package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.d.ts.map +1 -1
- package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.types.d.ts +3 -0
- package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.types.d.ts.map +1 -1
- package/dist/types/components/feedback/TutorialOverlay/TutorialStepBody.d.ts +2 -0
- package/dist/types/components/feedback/TutorialOverlay/TutorialStepBody.d.ts.map +1 -1
- package/dist/types/components/form/AddressAutocomplete/AddressAutocomplete.types.d.ts +7 -0
- package/dist/types/components/form/AddressAutocomplete/AddressAutocomplete.types.d.ts.map +1 -1
- package/dist/types/components/form/AddressAutocomplete/AddressAutocompleteField.d.ts.map +1 -1
- package/dist/types/components/form/AddressAutocomplete/AddressFallbackField.d.ts +1 -0
- package/dist/types/components/form/AddressAutocomplete/AddressFallbackField.d.ts.map +1 -1
- package/dist/types/components/form/AddressAutocomplete/AddressInputField.d.ts +1 -0
- package/dist/types/components/form/AddressAutocomplete/AddressInputField.d.ts.map +1 -1
- package/dist/types/components/form/Autocomplete/Autocomplete.d.ts.map +1 -1
- package/dist/types/components/form/Autocomplete/Autocomplete.parts.d.ts +9 -3
- package/dist/types/components/form/Autocomplete/Autocomplete.parts.d.ts.map +1 -1
- package/dist/types/components/form/Autocomplete/Autocomplete.types.d.ts +7 -0
- package/dist/types/components/form/Autocomplete/Autocomplete.types.d.ts.map +1 -1
- package/dist/types/components/form/Calendar/Calendar.types.d.ts +6 -0
- package/dist/types/components/form/Calendar/Calendar.types.d.ts.map +1 -1
- package/dist/types/components/form/CodeEditor/CodeEditor.d.ts.map +1 -1
- package/dist/types/components/form/CodeEditor/CodeEditor.types.d.ts +7 -0
- package/dist/types/components/form/CodeEditor/CodeEditor.types.d.ts.map +1 -1
- package/dist/types/components/form/CodeEditor/CodeEditorToolbar.d.ts +2 -0
- package/dist/types/components/form/CodeEditor/CodeEditorToolbar.d.ts.map +1 -1
- package/dist/types/components/form/DateRangePicker/DateRangePicker.d.ts.map +1 -1
- package/dist/types/components/form/DateRangePicker/DateRangePicker.range.d.ts.map +1 -1
- package/dist/types/components/form/DateRangePicker/DateRangePicker.types.d.ts +11 -0
- package/dist/types/components/form/DateRangePicker/DateRangePicker.types.d.ts.map +1 -1
- package/dist/types/components/form/DateRangePicker/DateRangePickerFields.d.ts.map +1 -1
- package/dist/types/components/form/Menubar/Menubar.d.ts.map +1 -1
- package/dist/types/components/form/Menubar/Menubar.toolbar.d.ts +1 -0
- package/dist/types/components/form/Menubar/Menubar.toolbar.d.ts.map +1 -1
- package/dist/types/components/form/Menubar/Menubar.types.d.ts +5 -0
- package/dist/types/components/form/Menubar/Menubar.types.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 +4 -2
- package/dist/types/components/form/PasswordStrength/PasswordStrength.helpers.d.ts.map +1 -1
- package/dist/types/components/form/PasswordStrength/PasswordStrength.types.d.ts +8 -0
- package/dist/types/components/form/PasswordStrength/PasswordStrength.types.d.ts.map +1 -1
- package/dist/types/components/form/PhoneInput/PhoneInput.d.ts.map +1 -1
- package/dist/types/components/form/PhoneInput/PhoneInput.types.d.ts +7 -0
- package/dist/types/components/form/PhoneInput/PhoneInput.types.d.ts.map +1 -1
- package/dist/types/components/form/SearchPalette/SearchPalette.d.ts.map +1 -1
- package/dist/types/components/form/SearchPalette/SearchPalette.parts.d.ts +2 -0
- package/dist/types/components/form/SearchPalette/SearchPalette.parts.d.ts.map +1 -1
- package/dist/types/components/form/SearchPalette/SearchPalette.types.d.ts +6 -0
- package/dist/types/components/form/SearchPalette/SearchPalette.types.d.ts.map +1 -1
- package/dist/types/components/form/Textarea/Textarea.d.ts.map +1 -1
- package/dist/types/components/form/Textarea/Textarea.types.d.ts +16 -1
- package/dist/types/components/form/Textarea/Textarea.types.d.ts.map +1 -1
- package/dist/types/components/form/Textarea/TextareaRichEditor.d.ts +7 -0
- package/dist/types/components/form/Textarea/TextareaRichEditor.d.ts.map +1 -1
- package/dist/types/components/form/UploadButton/UploadButton.d.ts.map +1 -1
- package/dist/types/components/form/UploadButton/UploadButton.parts.d.ts +6 -3
- package/dist/types/components/form/UploadButton/UploadButton.parts.d.ts.map +1 -1
- package/dist/types/components/form/UploadButton/UploadButton.types.d.ts +7 -0
- package/dist/types/components/form/UploadButton/UploadButton.types.d.ts.map +1 -1
- package/dist/types/components/layout/ContentToolbar/ContentToolbar.d.ts +1 -1
- package/dist/types/components/layout/ContentToolbar/ContentToolbar.d.ts.map +1 -1
- package/dist/types/components/layout/ContentToolbar/ContentToolbar.types.d.ts +12 -0
- package/dist/types/components/layout/ContentToolbar/ContentToolbar.types.d.ts.map +1 -1
- package/dist/types/components/layout/ContentToolbar/MultiSelectDropdown.d.ts +1 -1
- package/dist/types/components/layout/ContentToolbar/MultiSelectDropdown.d.ts.map +1 -1
- package/dist/types/components/layout/ContentToolbar/SortByDropdown.d.ts +1 -1
- package/dist/types/components/layout/ContentToolbar/SortByDropdown.d.ts.map +1 -1
- package/dist/types/components/layout/ContentToolbar/ViewSelector.d.ts +1 -1
- package/dist/types/components/layout/ContentToolbar/ViewSelector.d.ts.map +1 -1
- package/dist/types/components/layout/Dashboard/Dashboard.d.ts +1 -1
- package/dist/types/components/layout/Dashboard/Dashboard.types.d.ts +4 -0
- package/dist/types/components/layout/Dashboard/Dashboard.types.d.ts.map +1 -1
- package/dist/types/components/layout/Dashboard/DashboardParts.d.ts +1 -1
- package/dist/types/components/layout/Dashboard/DashboardParts.d.ts.map +1 -1
- package/dist/types/components/layout/ScrollArea/ScrollArea.d.ts.map +1 -1
- package/dist/types/components/layout/ScrollArea/ScrollArea.types.d.ts +21 -3
- package/dist/types/components/layout/ScrollArea/ScrollArea.types.d.ts.map +1 -1
- package/dist/types/components/layout/ScrollArea/ScrollViewport.d.ts +2 -0
- package/dist/types/components/layout/ScrollArea/ScrollViewport.d.ts.map +1 -1
- package/dist/types/components/layout/TableFilter/TableFilter.d.ts +1 -1
- package/dist/types/components/layout/TableFilter/TableFilter.d.ts.map +1 -1
- package/dist/types/components/layout/TableFilter/TableFilter.types.d.ts +7 -0
- package/dist/types/components/layout/TableFilter/TableFilter.types.d.ts.map +1 -1
- package/dist/types/components/layout/TableFilter/TableFilterContext.d.ts +9 -0
- package/dist/types/components/layout/TableFilter/TableFilterContext.d.ts.map +1 -1
- package/dist/types/components/navigation/Breadcrumbs/BreadcrumbEntry.d.ts +2 -0
- 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.types.d.ts +3 -0
- package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.types.d.ts.map +1 -1
- package/dist/types/components/navigation/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/types/components/navigation/CommandPalette/CommandPalette.types.d.ts +3 -0
- package/dist/types/components/navigation/CommandPalette/CommandPalette.types.d.ts.map +1 -1
- package/dist/types/components/navigation/CommandPalette/CommandPaletteResults.d.ts +2 -0
- package/dist/types/components/navigation/CommandPalette/CommandPaletteResults.d.ts.map +1 -1
- package/dist/types/components/navigation/Pagination/Pagination.d.ts.map +1 -1
- package/dist/types/components/navigation/Pagination/Pagination.types.d.ts +2 -0
- package/dist/types/components/navigation/Pagination/Pagination.types.d.ts.map +1 -1
- package/dist/types/components/navigation/Pagination/PaginationParts.d.ts +2 -0
- package/dist/types/components/navigation/Pagination/PaginationParts.d.ts.map +1 -1
- package/dist/types/components/navigation/Tabs/Tabs.d.ts.map +1 -1
- package/dist/types/components/navigation/Tabs/Tabs.types.d.ts +2 -0
- package/dist/types/components/navigation/Tabs/Tabs.types.d.ts.map +1 -1
- package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.d.ts.map +1 -1
- package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.parts.d.ts +6 -2
- package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.parts.d.ts.map +1 -1
- package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.types.d.ts +6 -0
- package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.types.d.ts.map +1 -1
- package/dist/types/components/utility/InstallPrompt/InstallPrompt.d.ts +4 -2
- package/dist/types/components/utility/InstallPrompt/InstallPrompt.d.ts.map +1 -1
- package/dist/types/components/utility/InstallPrompt/InstallPrompt.types.d.ts +8 -7
- package/dist/types/components/utility/InstallPrompt/InstallPrompt.types.d.ts.map +1 -1
- package/dist/types/copy/data-display.d.ts +56 -0
- package/dist/types/copy/data-display.d.ts.map +1 -0
- package/dist/types/copy/feedback.d.ts +38 -0
- package/dist/types/copy/feedback.d.ts.map +1 -0
- package/dist/types/copy/form.d.ts +146 -0
- package/dist/types/copy/form.d.ts.map +1 -0
- package/dist/types/copy/layout.d.ts +18 -0
- package/dist/types/copy/layout.d.ts.map +1 -0
- package/dist/types/copy/navigation.d.ts +24 -0
- package/dist/types/copy/navigation.d.ts.map +1 -0
- package/dist/types/copy/shared.d.ts +119 -0
- package/dist/types/copy/shared.d.ts.map +1 -0
- package/dist/types/copy/utility.d.ts +35 -0
- package/dist/types/copy/utility.d.ts.map +1 -0
- package/dist/types/copy.d.ts +12 -165
- package/dist/types/copy.d.ts.map +1 -1
- package/dist/types/pt-BR.d.ts +15 -22
- package/dist/types/pt-BR.d.ts.map +1 -1
- package/dist/types/pt-BR.data-display.d.ts +13 -0
- package/dist/types/pt-BR.data-display.d.ts.map +1 -0
- package/dist/types/pt-BR.feedback.d.ts +8 -0
- package/dist/types/pt-BR.feedback.d.ts.map +1 -0
- package/dist/types/pt-BR.form.d.ts +13 -0
- package/dist/types/pt-BR.form.d.ts.map +1 -0
- package/dist/types/pt-BR.layout.d.ts +7 -0
- package/dist/types/pt-BR.layout.d.ts.map +1 -0
- package/dist/types/pt-BR.navigation.d.ts +8 -0
- package/dist/types/pt-BR.navigation.d.ts.map +1 -0
- package/dist/types/pt-BR.shared.d.ts +21 -0
- package/dist/types/pt-BR.shared.d.ts.map +1 -0
- package/dist/types/pt-BR.utility.d.ts +8 -0
- package/dist/types/pt-BR.utility.d.ts.map +1 -0
- package/dist/types/user-avatar/user-avatar.d.ts +7 -1
- package/dist/types/user-avatar/user-avatar.d.ts.map +1 -1
- package/dist/user-avatar.js +2 -2
- package/dist/user-avatar.js.map +1 -1
- package/dist/utility/InfiniteScroll.js +7 -5
- package/dist/utility/InfiniteScroll.js.map +1 -1
- package/dist/utility/InstallPrompt.js +14 -13
- package/dist/utility/InstallPrompt.js.map +1 -1
- package/package.json +1 -1
- package/src/components/data-display/DataGrid/DataGrid.states.tsx +3 -3
- package/src/components/data-display/DataGrid/DataGrid.tsx +1 -1
- package/src/components/data-display/DataGrid/DataGrid.types.ts +5 -0
- package/src/components/data-display/DataViews/data-views-category-pill.tsx +2 -0
- package/src/components/data-display/DataViews/data-views-copy.ts +27 -1
- package/src/components/data-display/DataViews/data-views-day-input.tsx +14 -3
- 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 -0
- package/src/components/data-display/DataViews/data-views-grid-parts.tsx +9 -10
- package/src/components/data-display/DataViews/data-views-more-fields.tsx +3 -1
- package/src/components/data-display/DataViews/data-views-pagination.tsx +3 -0
- package/src/components/data-display/DataViews/data-views-range-pill.tsx +3 -1
- package/src/components/data-display/DataViews/data-views-toolbar.tsx +2 -0
- package/src/components/data-display/HoverCard/HoverCard.content.tsx +10 -2
- package/src/components/data-display/HoverCard/HoverCard.tsx +2 -3
- package/src/components/data-display/HoverCard/HoverCard.types.ts +2 -0
- package/src/components/data-display/Table/Table.tsx +7 -2
- package/src/components/data-display/Table/Table.types.ts +5 -0
- package/src/components/data-display/Table/TableStates.tsx +2 -2
- package/src/components/data-display/TimingDiagram/TimingDiagram.tsx +3 -2
- package/src/components/data-display/TimingDiagram/TimingDiagram.types.ts +3 -0
- package/src/components/feedback/Sonner/Sonner.tsx +15 -3
- package/src/components/feedback/Sonner/Sonner.types.ts +2 -0
- package/src/components/feedback/Sonner/SonnerToast.tsx +2 -1
- package/src/components/feedback/StackedModal/StackedModal.parts.tsx +10 -3
- package/src/components/feedback/StackedModal/StackedModal.tsx +2 -1
- package/src/components/feedback/StackedModal/StackedModal.types.ts +2 -0
- package/src/components/feedback/TutorialOverlay/TutorialOverlay.tsx +13 -1
- package/src/components/feedback/TutorialOverlay/TutorialOverlay.types.ts +3 -0
- package/src/components/feedback/TutorialOverlay/TutorialStepBody.tsx +10 -4
- package/src/components/form/AddressAutocomplete/AddressAutocomplete.types.ts +7 -0
- package/src/components/form/AddressAutocomplete/AddressAutocompleteField.tsx +2 -0
- package/src/components/form/AddressAutocomplete/AddressFallbackField.tsx +4 -2
- package/src/components/form/AddressAutocomplete/AddressInputField.tsx +13 -6
- package/src/components/form/Autocomplete/Autocomplete.parts.tsx +9 -6
- package/src/components/form/Autocomplete/Autocomplete.tsx +2 -1
- package/src/components/form/Autocomplete/Autocomplete.types.ts +7 -0
- package/src/components/form/Calendar/Calendar.tsx +2 -2
- package/src/components/form/Calendar/Calendar.types.ts +7 -0
- package/src/components/form/CodeEditor/CodeEditor.tsx +6 -4
- package/src/components/form/CodeEditor/CodeEditor.types.ts +7 -0
- package/src/components/form/CodeEditor/CodeEditorToolbar.tsx +12 -5
- package/src/components/form/DateRangePicker/DateRangePicker.range.ts +2 -0
- package/src/components/form/DateRangePicker/DateRangePicker.tsx +4 -0
- package/src/components/form/DateRangePicker/DateRangePicker.types.ts +11 -0
- package/src/components/form/DateRangePicker/DateRangePickerFields.tsx +2 -0
- package/src/components/form/Menubar/Menubar.toolbar.tsx +3 -1
- package/src/components/form/Menubar/Menubar.tsx +2 -1
- package/src/components/form/Menubar/Menubar.types.ts +5 -0
- package/src/components/form/PasswordStrength/PasswordStrength.helpers.tsx +33 -17
- package/src/components/form/PasswordStrength/PasswordStrength.tsx +29 -13
- package/src/components/form/PasswordStrength/PasswordStrength.types.ts +9 -0
- package/src/components/form/PhoneInput/PhoneInput.tsx +15 -5
- package/src/components/form/PhoneInput/PhoneInput.types.ts +7 -0
- package/src/components/form/SearchPalette/SearchPalette.parts.tsx +4 -1
- package/src/components/form/SearchPalette/SearchPalette.tsx +4 -1
- package/src/components/form/SearchPalette/SearchPalette.types.ts +6 -0
- package/src/components/form/Textarea/Textarea.tsx +6 -1
- package/src/components/form/Textarea/Textarea.types.ts +14 -1
- package/src/components/form/Textarea/TextareaRichEditor.tsx +28 -18
- package/src/components/form/UploadButton/UploadButton.parts.tsx +16 -7
- package/src/components/form/UploadButton/UploadButton.tsx +4 -1
- package/src/components/form/UploadButton/UploadButton.types.ts +8 -0
- package/src/components/layout/ContentToolbar/ContentToolbar.tsx +10 -2
- package/src/components/layout/ContentToolbar/ContentToolbar.types.ts +12 -0
- package/src/components/layout/ContentToolbar/MultiSelectDropdown.tsx +15 -4
- package/src/components/layout/ContentToolbar/SortByDropdown.tsx +12 -3
- package/src/components/layout/ContentToolbar/ViewSelector.tsx +2 -1
- package/src/components/layout/Dashboard/Dashboard.types.ts +4 -0
- package/src/components/layout/Dashboard/DashboardParts.tsx +2 -1
- package/src/components/layout/ScrollArea/ScrollArea.tsx +16 -3
- package/src/components/layout/ScrollArea/ScrollArea.types.ts +19 -4
- package/src/components/layout/ScrollArea/ScrollViewport.tsx +4 -1
- package/src/components/layout/TableFilter/TableFilter.tsx +19 -11
- package/src/components/layout/TableFilter/TableFilter.types.ts +8 -0
- package/src/components/layout/TableFilter/TableFilterContext.tsx +10 -0
- package/src/components/navigation/Breadcrumbs/BreadcrumbEntry.tsx +11 -4
- package/src/components/navigation/Breadcrumbs/Breadcrumbs.tsx +2 -0
- package/src/components/navigation/Breadcrumbs/Breadcrumbs.types.ts +3 -0
- package/src/components/navigation/CommandPalette/CommandPalette.tsx +15 -5
- package/src/components/navigation/CommandPalette/CommandPalette.types.ts +3 -0
- package/src/components/navigation/CommandPalette/CommandPaletteResults.tsx +5 -2
- package/src/components/navigation/Pagination/Pagination.tsx +2 -0
- package/src/components/navigation/Pagination/Pagination.types.ts +2 -0
- package/src/components/navigation/Pagination/PaginationParts.tsx +4 -1
- package/src/components/navigation/Tabs/Tabs.tsx +8 -3
- package/src/components/navigation/Tabs/Tabs.types.ts +2 -0
- package/src/components/utility/InfiniteScroll/InfiniteScroll.parts.tsx +4 -4
- package/src/components/utility/InfiniteScroll/InfiniteScroll.tsx +4 -2
- package/src/components/utility/InfiniteScroll/InfiniteScroll.types.ts +6 -0
- package/src/components/utility/InstallPrompt/InstallPrompt.tsx +18 -13
- package/src/components/utility/InstallPrompt/InstallPrompt.types.ts +9 -7
- package/src/copy/data-display.ts +60 -0
- package/src/copy/feedback.ts +39 -0
- package/src/copy/form.ts +154 -0
- package/src/copy/layout.ts +18 -0
- package/src/copy/navigation.ts +25 -0
- package/src/copy/shared.ts +122 -0
- package/src/copy/utility.ts +36 -0
- package/src/copy.ts +12 -173
- package/src/pt-BR.data-display.ts +236 -0
- package/src/pt-BR.feedback.ts +25 -0
- package/src/pt-BR.form.ts +96 -0
- package/src/pt-BR.layout.ts +15 -0
- package/src/pt-BR.navigation.ts +21 -0
- package/src/pt-BR.shared.ts +94 -0
- package/src/pt-BR.ts +15 -307
- package/src/pt-BR.utility.ts +21 -0
- package/src/user-avatar/user-avatar.tsx +8 -2
- package/dist/chunk-CEKPLUQV.js.map +0 -1
- package/dist/chunk-DFVRZ3UK.js.map +0 -1
- package/dist/chunk-H7UAGTVW.js.map +0 -1
- package/dist/chunk-JP55QWVR.js.map +0 -1
- package/dist/chunk-NUCLEOHF.js.map +0 -1
- package/dist/chunk-QLBYAYUG.js.map +0 -1
- package/dist/chunk-QZZVHY6U.js.map +0 -1
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
2
|
|
|
3
|
+
import type { UploadButtonCopy } from '../../../copy';
|
|
4
|
+
|
|
3
5
|
export interface UploadButtonProps {
|
|
6
|
+
/**
|
|
7
|
+
* What this control says beyond the host's own button label. REQUIRED: three
|
|
8
|
+
* of the four are announcements only a screen reader ever receives, which is
|
|
9
|
+
* how they stayed English through every language pass.
|
|
10
|
+
*/
|
|
11
|
+
copy: UploadButtonCopy;
|
|
4
12
|
/** Button variant style */
|
|
5
13
|
variant?: 'default' | 'outline' | 'ghost' | 'dropzone';
|
|
6
14
|
|
|
@@ -28,6 +28,8 @@ type SelectionClusterProps = Pick<
|
|
|
28
28
|
| 'clearAllTestId'
|
|
29
29
|
| 'edgeAlign'
|
|
30
30
|
| 'selectAllLabel'
|
|
31
|
+
| 'selectAllText'
|
|
32
|
+
| 'clearAllText'
|
|
31
33
|
>;
|
|
32
34
|
|
|
33
35
|
/** The left cluster: Select All + (when selecting) Clear All / count / actions. */
|
|
@@ -41,6 +43,8 @@ function SelectionCluster({
|
|
|
41
43
|
clearAllTestId,
|
|
42
44
|
edgeAlign = false,
|
|
43
45
|
selectAllLabel,
|
|
46
|
+
selectAllText,
|
|
47
|
+
clearAllText,
|
|
44
48
|
}: SelectionClusterProps): React.JSX.Element {
|
|
45
49
|
const actionsSlot = actions !== undefined && (
|
|
46
50
|
<Box sx={{ ml: 0.5, display: 'flex', flexShrink: 0, alignItems: 'center' }}>{actions}</Box>
|
|
@@ -68,7 +72,7 @@ function SelectionCluster({
|
|
|
68
72
|
data-testid={selectAllTestId}
|
|
69
73
|
sx={{ ...selectionButtonSx, display: { xs: 'none', md: 'inline-flex' } }}
|
|
70
74
|
>
|
|
71
|
-
|
|
75
|
+
{selectAllText}
|
|
72
76
|
</Button>
|
|
73
77
|
<Checkbox
|
|
74
78
|
size="small"
|
|
@@ -88,7 +92,7 @@ function SelectionCluster({
|
|
|
88
92
|
data-testid={clearAllTestId}
|
|
89
93
|
sx={selectionButtonSx}
|
|
90
94
|
>
|
|
91
|
-
|
|
95
|
+
{clearAllText}
|
|
92
96
|
</Button>
|
|
93
97
|
<Divider orientation="vertical" flexItem sx={{ height: 16, alignSelf: 'center' }} />
|
|
94
98
|
<Typography
|
|
@@ -216,6 +220,8 @@ export function ContentToolbar({
|
|
|
216
220
|
edgeAlign = false,
|
|
217
221
|
exclusiveSelection = false,
|
|
218
222
|
selectAllLabel,
|
|
223
|
+
selectAllText,
|
|
224
|
+
clearAllText,
|
|
219
225
|
}: ContentToolbarProps): React.JSX.Element {
|
|
220
226
|
// Under `exclusiveSelection` the two states are alternatives, not neighbours:
|
|
221
227
|
// browsing shows the controls and no checkbox, selecting shows the checkbox
|
|
@@ -241,6 +247,8 @@ export function ContentToolbar({
|
|
|
241
247
|
>
|
|
242
248
|
{showSelection && (
|
|
243
249
|
<SelectionCluster
|
|
250
|
+
selectAllText={selectAllText}
|
|
251
|
+
clearAllText={clearAllText}
|
|
244
252
|
hasSelection={hasSelection}
|
|
245
253
|
selectedCount={selectedCount}
|
|
246
254
|
selectAll={selectAll}
|
|
@@ -4,6 +4,9 @@ import type { ReactNode } from 'react';
|
|
|
4
4
|
|
|
5
5
|
/** Props for {@link ContentToolbar} — the shared content-page toolbar. */
|
|
6
6
|
export interface ContentToolbarProps {
|
|
7
|
+
/** The two bulk-selection buttons, spelled out where the bar has room. */
|
|
8
|
+
selectAllText: string;
|
|
9
|
+
clearAllText: string;
|
|
7
10
|
/**
|
|
8
11
|
* The select-all checkbox's accessible name. It carries no visible label of
|
|
9
12
|
* its own, so this is the only thing a screen reader gets for it. REQUIRED:
|
|
@@ -61,6 +64,8 @@ export type ViewMode = 'grid' | 'list';
|
|
|
61
64
|
|
|
62
65
|
/** Props for {@link ViewSelector}. */
|
|
63
66
|
export interface ViewSelectorProps {
|
|
67
|
+
/** The card-size control's accessible name — it renders icons only. */
|
|
68
|
+
cardSizeLabel: string;
|
|
64
69
|
/** Current view mode. */
|
|
65
70
|
viewMode: ViewMode;
|
|
66
71
|
/** Called when the view mode changes. */
|
|
@@ -99,6 +104,10 @@ export interface SortFieldDefinition<TField extends string = string> {
|
|
|
99
104
|
|
|
100
105
|
/** Props for {@link SortByDropdown}. */
|
|
101
106
|
export interface SortByDropdownProps<TField extends string = string> {
|
|
107
|
+
/** The menu's two section headings, and the trigger's own prefix. */
|
|
108
|
+
orderHeading: string;
|
|
109
|
+
sortHeading: string;
|
|
110
|
+
triggerPrefix: string;
|
|
102
111
|
fields: SortFieldDefinition<TField>[];
|
|
103
112
|
activeField: TField;
|
|
104
113
|
activeOrder?: string;
|
|
@@ -126,6 +135,9 @@ export interface MultiSelectExtraOption {
|
|
|
126
135
|
|
|
127
136
|
/** Props for {@link MultiSelectDropdown}. */
|
|
128
137
|
export interface MultiSelectDropdownProps<TValue extends string = string> {
|
|
138
|
+
/** The extra-options section heading, and the clear-selection action. */
|
|
139
|
+
extraOptionsHeading: string;
|
|
140
|
+
clearText: string;
|
|
129
141
|
/** Label before the trigger (e.g. "Content Type"). */
|
|
130
142
|
label: string;
|
|
131
143
|
options: MultiSelectOption<TValue>[];
|
|
@@ -62,6 +62,8 @@ export function MultiSelectDropdown<TValue extends string = string>({
|
|
|
62
62
|
onClear,
|
|
63
63
|
allLabel = 'All',
|
|
64
64
|
clearLabel,
|
|
65
|
+
clearText,
|
|
66
|
+
extraOptionsHeading,
|
|
65
67
|
extraOptions,
|
|
66
68
|
searchable,
|
|
67
69
|
searchPlaceholder = 'Search…',
|
|
@@ -111,7 +113,7 @@ export function MultiSelectDropdown<TValue extends string = string>({
|
|
|
111
113
|
<>
|
|
112
114
|
{renderTrigger()}
|
|
113
115
|
<MultiSelectMenu
|
|
114
|
-
anchorEl={anchorEl}
|
|
116
|
+
extraOptionsHeading={extraOptionsHeading} clearText={clearText} anchorEl={anchorEl}
|
|
115
117
|
open={open}
|
|
116
118
|
close={close}
|
|
117
119
|
options={options}
|
|
@@ -184,6 +186,8 @@ interface MultiSelectMenuProps<TValue extends string> {
|
|
|
184
186
|
onQueryChange: (value: string) => void;
|
|
185
187
|
searchPlaceholder: string;
|
|
186
188
|
noResultsLabel: string;
|
|
189
|
+
extraOptionsHeading: string;
|
|
190
|
+
clearText: string;
|
|
187
191
|
/** Match the menu width to the trigger and left-align it (stacked select). */
|
|
188
192
|
matchAnchorWidth?: boolean;
|
|
189
193
|
testId?: string;
|
|
@@ -211,6 +215,8 @@ function MultiSelectMenu<TValue extends string>({
|
|
|
211
215
|
selected,
|
|
212
216
|
onToggle,
|
|
213
217
|
extraOptions,
|
|
218
|
+
extraOptionsHeading,
|
|
219
|
+
clearText,
|
|
214
220
|
clearDisabled,
|
|
215
221
|
onClear,
|
|
216
222
|
showSearch,
|
|
@@ -267,25 +273,30 @@ function MultiSelectMenu<TValue extends string>({
|
|
|
267
273
|
? [
|
|
268
274
|
<Divider key="extra-divider" />,
|
|
269
275
|
<ListSubheader key="extra-label" sx={{ px: 1, py: 0.75, fontSize: '0.75rem', fontWeight: 600 }}>
|
|
270
|
-
|
|
276
|
+
{extraOptionsHeading}
|
|
271
277
|
</ListSubheader>,
|
|
272
278
|
...extraOptions.map((extra) => (
|
|
273
279
|
<CheckboxRow key={extra.id} label={extra.label} checked={extra.checked} onToggle={(next) => extra.onCheckedChange(next)} />
|
|
274
280
|
)),
|
|
275
281
|
]
|
|
276
282
|
: null}
|
|
277
|
-
<MenuClearFooter
|
|
283
|
+
<MenuClearFooter
|
|
284
|
+
clearText={clearText} clearDisabled={clearDisabled} onClear={onClear}
|
|
285
|
+
close={close} testId={testId}
|
|
286
|
+
/>
|
|
278
287
|
</Menu>
|
|
279
288
|
);
|
|
280
289
|
}
|
|
281
290
|
|
|
282
291
|
/** The bottom "Clear" footer that resets the selection and closes the menu. */
|
|
283
292
|
function MenuClearFooter({
|
|
293
|
+
clearText,
|
|
284
294
|
clearDisabled,
|
|
285
295
|
onClear,
|
|
286
296
|
close,
|
|
287
297
|
testId,
|
|
288
298
|
}: {
|
|
299
|
+
clearText: string;
|
|
289
300
|
clearDisabled: boolean;
|
|
290
301
|
onClear: () => void;
|
|
291
302
|
close: () => void;
|
|
@@ -320,7 +331,7 @@ function MenuClearFooter({
|
|
|
320
331
|
}}
|
|
321
332
|
sx={{ minWidth: 0, px: 1, py: 0.25, fontSize: '0.75rem', fontWeight: 400, textTransform: 'none', color: 'text.secondary' }}
|
|
322
333
|
>
|
|
323
|
-
|
|
334
|
+
{clearText}
|
|
324
335
|
</Button>
|
|
325
336
|
</Box>
|
|
326
337
|
);
|
|
@@ -103,6 +103,8 @@ interface SortMenuProps<TField extends string> {
|
|
|
103
103
|
fields: SortFieldDefinition<TField>[];
|
|
104
104
|
activeField: TField;
|
|
105
105
|
onFieldSelect: (field: TField) => void;
|
|
106
|
+
orderHeading: string;
|
|
107
|
+
sortHeading: string;
|
|
106
108
|
}
|
|
107
109
|
|
|
108
110
|
/** The Order + Sort sections of the dropdown menu. */
|
|
@@ -116,6 +118,8 @@ function SortMenu<TField extends string>({
|
|
|
116
118
|
fields,
|
|
117
119
|
activeField,
|
|
118
120
|
onFieldSelect,
|
|
121
|
+
orderHeading,
|
|
122
|
+
sortHeading,
|
|
119
123
|
}: SortMenuProps<TField>): React.JSX.Element {
|
|
120
124
|
return (
|
|
121
125
|
<Menu
|
|
@@ -128,7 +132,7 @@ function SortMenu<TField extends string>({
|
|
|
128
132
|
>
|
|
129
133
|
{orderOptions.length > 0 && [
|
|
130
134
|
<ListSubheader key="order-label" sx={sectionLabelSx}>
|
|
131
|
-
|
|
135
|
+
{orderHeading}
|
|
132
136
|
</ListSubheader>,
|
|
133
137
|
...orderOptions.map((option) => (
|
|
134
138
|
<SortRow
|
|
@@ -141,7 +145,7 @@ function SortMenu<TField extends string>({
|
|
|
141
145
|
)),
|
|
142
146
|
<Divider key="order-divider" />,
|
|
143
147
|
]}
|
|
144
|
-
<ListSubheader sx={sectionLabelSx}>
|
|
148
|
+
<ListSubheader sx={sectionLabelSx}>{sortHeading}</ListSubheader>
|
|
145
149
|
{fields.map((field) => (
|
|
146
150
|
<SortRow
|
|
147
151
|
key={field.value}
|
|
@@ -167,6 +171,9 @@ export function SortByDropdown<TField extends string = string>({
|
|
|
167
171
|
activeOrder,
|
|
168
172
|
onFieldChange,
|
|
169
173
|
onOrderChange,
|
|
174
|
+
orderHeading,
|
|
175
|
+
sortHeading,
|
|
176
|
+
triggerPrefix,
|
|
170
177
|
'data-testid': testId,
|
|
171
178
|
}: SortByDropdownProps<TField>): React.JSX.Element {
|
|
172
179
|
const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);
|
|
@@ -195,7 +202,7 @@ export function SortByDropdown<TField extends string = string>({
|
|
|
195
202
|
component="span"
|
|
196
203
|
sx={{ display: { xs: 'none', md: 'inline' }, color: 'text.secondary', fontSize: '0.875rem' }}
|
|
197
204
|
>
|
|
198
|
-
|
|
205
|
+
{triggerPrefix}
|
|
199
206
|
</Typography>
|
|
200
207
|
<Button
|
|
201
208
|
variant="text"
|
|
@@ -219,6 +226,8 @@ export function SortByDropdown<TField extends string = string>({
|
|
|
219
226
|
<ChevronDownIcon sx={{ fontSize: 14 }} />
|
|
220
227
|
</Button>
|
|
221
228
|
<SortMenu
|
|
229
|
+
orderHeading={orderHeading}
|
|
230
|
+
sortHeading={sortHeading}
|
|
222
231
|
anchorEl={anchorEl}
|
|
223
232
|
open={open}
|
|
224
233
|
close={close}
|
|
@@ -25,6 +25,7 @@ export function ViewSelector({
|
|
|
25
25
|
onViewModeChange,
|
|
26
26
|
zoom,
|
|
27
27
|
onZoomChange,
|
|
28
|
+
cardSizeLabel,
|
|
28
29
|
}: ViewSelectorProps): React.JSX.Element {
|
|
29
30
|
const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);
|
|
30
31
|
const open = Boolean(anchorEl);
|
|
@@ -37,7 +38,7 @@ export function ViewSelector({
|
|
|
37
38
|
<Box sx={{ width: 96, display: 'flex', alignItems: 'center' }}>
|
|
38
39
|
<Slider
|
|
39
40
|
data-testid="resize-card-slider"
|
|
40
|
-
aria-label=
|
|
41
|
+
aria-label={cardSizeLabel}
|
|
41
42
|
value={zoom[0] ?? 0}
|
|
42
43
|
onChange={(_, value) => onZoomChange([value as number])}
|
|
43
44
|
min={0}
|
|
@@ -75,6 +75,8 @@ interface DashboardSettingsBaseProps {
|
|
|
75
75
|
* dialog rendering `children`. Mutually exclusive with link mode.
|
|
76
76
|
*/
|
|
77
77
|
export interface DashboardSettingsDialogProps extends DashboardSettingsBaseProps {
|
|
78
|
+
/** The dialog's close button — a glyph with no visible label. REQUIRED. */
|
|
79
|
+
closeLabel: string;
|
|
78
80
|
/** Dialog title. Defaults to `"Settings"`. */
|
|
79
81
|
title?: ReactNode;
|
|
80
82
|
/** Dialog body. */
|
|
@@ -89,6 +91,8 @@ export interface DashboardSettingsDialogProps extends DashboardSettingsBaseProps
|
|
|
89
91
|
* exclusive with dialog mode, so `title`/`children` are not accepted.
|
|
90
92
|
*/
|
|
91
93
|
export interface DashboardSettingsLinkProps extends DashboardSettingsBaseProps {
|
|
94
|
+
/** Link mode opens no dialog, so there is no close button to name. */
|
|
95
|
+
closeLabel?: never;
|
|
92
96
|
/** Link target settings route. */
|
|
93
97
|
href: string;
|
|
94
98
|
/**
|
|
@@ -101,6 +101,7 @@ DashboardFilterToggle.displayName = 'Dashboard.FilterToggle';
|
|
|
101
101
|
|
|
102
102
|
export const DashboardSettings = ({
|
|
103
103
|
title = 'Settings',
|
|
104
|
+
closeLabel,
|
|
104
105
|
children,
|
|
105
106
|
ariaLabel = 'Settings',
|
|
106
107
|
href,
|
|
@@ -146,7 +147,7 @@ export const DashboardSettings = ({
|
|
|
146
147
|
<Dialog open={open} onClose={() => setOpen(false)} maxWidth="sm" fullWidth data-testid={`${testIdPrefix}-settings-dialog`}>
|
|
147
148
|
<DialogTitle sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>
|
|
148
149
|
{title}
|
|
149
|
-
<IconButton aria-label=
|
|
150
|
+
<IconButton aria-label={closeLabel} size="small" onClick={() => setOpen(false)}>
|
|
150
151
|
<CloseIcon fontSize="small" />
|
|
151
152
|
</IconButton>
|
|
152
153
|
</DialogTitle>
|
|
@@ -148,9 +148,18 @@ const LoadingOverlay: FC = () => (
|
|
|
148
148
|
</Box>
|
|
149
149
|
);
|
|
150
150
|
|
|
151
|
-
|
|
151
|
+
// The label is guarded at the call site rather than defaulted: the props union
|
|
152
|
+
// already makes it required alongside `scrollToTopButton`, and a fab with an
|
|
153
|
+
// empty accessible name is the exact failure this port exists to remove.
|
|
154
|
+
const ScrollToTopFab: FC<{
|
|
155
|
+
visible: boolean;
|
|
156
|
+
glass: boolean;
|
|
157
|
+
scrollToTopLabel: string;
|
|
158
|
+
onClick: () => void;
|
|
159
|
+
}> = ({
|
|
152
160
|
visible,
|
|
153
161
|
glass,
|
|
162
|
+
scrollToTopLabel,
|
|
154
163
|
onClick }) => {
|
|
155
164
|
const theme = useTheme();
|
|
156
165
|
|
|
@@ -158,7 +167,7 @@ const ScrollToTopFab: FC<{ visible: boolean; glass: boolean; onClick: () => void
|
|
|
158
167
|
<Zoom in={visible}>
|
|
159
168
|
<Fab
|
|
160
169
|
size="small"
|
|
161
|
-
aria-label=
|
|
170
|
+
aria-label={scrollToTopLabel}
|
|
162
171
|
onClick={onClick}
|
|
163
172
|
sx={{
|
|
164
173
|
position: 'absolute',
|
|
@@ -183,6 +192,8 @@ const ScrollToTopFab: FC<{ visible: boolean; glass: boolean; onClick: () => void
|
|
|
183
192
|
export const ScrollArea: React.FC<ScrollAreaProps> = (componentProps) => {
|
|
184
193
|
const resolved = resolveScrollAreaProps(componentProps);
|
|
185
194
|
const {
|
|
195
|
+
regionLabel,
|
|
196
|
+
scrollToTopLabel,
|
|
186
197
|
children,
|
|
187
198
|
width,
|
|
188
199
|
height,
|
|
@@ -231,6 +242,7 @@ export const ScrollArea: React.FC<ScrollAreaProps> = (componentProps) => {
|
|
|
231
242
|
>
|
|
232
243
|
<ScrollViewport
|
|
233
244
|
{...resolved}
|
|
245
|
+
regionLabel={regionLabel}
|
|
234
246
|
shouldShowScrollbar={shouldShowScrollbar}
|
|
235
247
|
setScrollRef={setScrollRef}
|
|
236
248
|
onScroll={handleScroll}
|
|
@@ -246,8 +258,9 @@ export const ScrollArea: React.FC<ScrollAreaProps> = (componentProps) => {
|
|
|
246
258
|
|
|
247
259
|
{loading && <LoadingOverlay />}
|
|
248
260
|
|
|
249
|
-
{scrollToTopButton && !disabled && !loading && (
|
|
261
|
+
{scrollToTopButton && scrollToTopLabel && !disabled && !loading && (
|
|
250
262
|
<ScrollToTopFab
|
|
263
|
+
scrollToTopLabel={scrollToTopLabel}
|
|
251
264
|
visible={showScrollToTop}
|
|
252
265
|
glass={variant === 'glass'}
|
|
253
266
|
onClick={scrollToTop}
|
|
@@ -5,7 +5,25 @@ export type ScrollOrientation = 'vertical' | 'horizontal' | 'both';
|
|
|
5
5
|
export type ScrollbarSize = 'thin' | 'medium' | 'thick';
|
|
6
6
|
export type ScrollAreaVariant = 'default' | 'overlay' | 'glass';
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Conditionally-required copy for the scroll-to-top control. The fab only exists
|
|
10
|
+
* when `scrollToTopButton` is set, so only that side of the union owes a name —
|
|
11
|
+
* a host that never shows the button is not asked for a word it cannot place.
|
|
12
|
+
*/
|
|
13
|
+
type ScrollAreaScrollToTop =
|
|
14
|
+
| { scrollToTopButton?: false; scrollToTopLabel?: never }
|
|
15
|
+
| { scrollToTopButton: true; scrollToTopLabel: string };
|
|
16
|
+
|
|
17
|
+
export type ScrollAreaProps = ScrollAreaBase & ScrollAreaScrollToTop;
|
|
18
|
+
|
|
19
|
+
export interface ScrollAreaBase extends Omit<BoxProps, 'ref'> {
|
|
20
|
+
/**
|
|
21
|
+
* The scroll region's accessible name. REQUIRED: the viewport is a
|
|
22
|
+
* `role="region"`, so a screen reader announces this word and no other. The
|
|
23
|
+
* package cannot know whether it wraps a menu, a chat log or a table.
|
|
24
|
+
*/
|
|
25
|
+
regionLabel: string;
|
|
26
|
+
|
|
9
27
|
/** Content to be rendered inside the scrollable area */
|
|
10
28
|
children: ReactNode;
|
|
11
29
|
|
|
@@ -45,9 +63,6 @@ export interface ScrollAreaProps extends Omit<BoxProps, 'ref'> {
|
|
|
45
63
|
/** Scroll event handler */
|
|
46
64
|
onScroll?: (event: React.UIEvent<HTMLDivElement>) => void;
|
|
47
65
|
|
|
48
|
-
/** Show scroll-to-top button */
|
|
49
|
-
scrollToTopButton?: boolean;
|
|
50
|
-
|
|
51
66
|
/** Threshold for showing scroll-to-top button (in pixels) */
|
|
52
67
|
scrollToTopThreshold?: number;
|
|
53
68
|
|
|
@@ -20,6 +20,8 @@ export interface ScrollViewportProps
|
|
|
20
20
|
| 'loading'
|
|
21
21
|
| 'smoothScroll'
|
|
22
22
|
> {
|
|
23
|
+
/** The scroll region's accessible name. REQUIRED. */
|
|
24
|
+
regionLabel: string;
|
|
23
25
|
children: ReactNode;
|
|
24
26
|
shouldShowScrollbar: boolean;
|
|
25
27
|
setScrollRef: (node: HTMLDivElement | null) => void;
|
|
@@ -29,6 +31,7 @@ export interface ScrollViewportProps
|
|
|
29
31
|
// The element that actually scrolls: its own overflow and scrollbar styling,
|
|
30
32
|
// plus the disabled and loading treatments.
|
|
31
33
|
export const ScrollViewport: FC<ScrollViewportProps> = ({
|
|
34
|
+
regionLabel,
|
|
32
35
|
children,
|
|
33
36
|
height,
|
|
34
37
|
maxHeight,
|
|
@@ -52,7 +55,7 @@ export const ScrollViewport: FC<ScrollViewportProps> = ({
|
|
|
52
55
|
ref={setScrollRef}
|
|
53
56
|
onScroll={onScroll}
|
|
54
57
|
role="region"
|
|
55
|
-
aria-label=
|
|
58
|
+
aria-label={regionLabel}
|
|
56
59
|
aria-busy={loading}
|
|
57
60
|
tabIndex={disabled ? -1 : 0}
|
|
58
61
|
sx={{
|
|
@@ -54,9 +54,10 @@ export function TableFilter({
|
|
|
54
54
|
open,
|
|
55
55
|
onOpenChange,
|
|
56
56
|
hasActiveFilters = false,
|
|
57
|
+
copy,
|
|
57
58
|
}: TableFilterProps): React.JSX.Element {
|
|
58
59
|
return (
|
|
59
|
-
<TableFilterContext.Provider value={{ open, onOpenChange, hasActiveFilters }}>
|
|
60
|
+
<TableFilterContext.Provider value={{ open, onOpenChange, hasActiveFilters, copy }}>
|
|
60
61
|
{children}
|
|
61
62
|
</TableFilterContext.Provider>
|
|
62
63
|
);
|
|
@@ -97,7 +98,7 @@ const TableFilterPanel = ({
|
|
|
97
98
|
ariaLabel = 'Filters',
|
|
98
99
|
clearTestId,
|
|
99
100
|
}: TableFilterPanelProps): React.JSX.Element => {
|
|
100
|
-
const { open } = useTableFilterContext();
|
|
101
|
+
const { open, copy } = useTableFilterContext();
|
|
101
102
|
return (
|
|
102
103
|
<Box
|
|
103
104
|
component="aside"
|
|
@@ -142,7 +143,7 @@ const TableFilterPanel = ({
|
|
|
142
143
|
onClick={onClearAll}
|
|
143
144
|
sx={{ fontSize: '0.75rem', color: 'text.secondary' }}
|
|
144
145
|
>
|
|
145
|
-
|
|
146
|
+
{copy.clearAllFilters}
|
|
146
147
|
</Link>
|
|
147
148
|
</Box>
|
|
148
149
|
{children}
|
|
@@ -160,6 +161,7 @@ const TableFilterKeyword = ({
|
|
|
160
161
|
label = 'Filter by keyword',
|
|
161
162
|
testId,
|
|
162
163
|
}: TableFilterKeywordProps): React.JSX.Element => {
|
|
164
|
+
const { copy } = useTableFilterContext();
|
|
163
165
|
const [draft, setDraft] = useState(value);
|
|
164
166
|
const prevValue = useRef(value);
|
|
165
167
|
if (prevValue.current !== value) {
|
|
@@ -204,7 +206,7 @@ const TableFilterKeyword = ({
|
|
|
204
206
|
<InputAdornment position="end">
|
|
205
207
|
<IconButton
|
|
206
208
|
size="small"
|
|
207
|
-
aria-label=
|
|
209
|
+
aria-label={copy.clearKeyword}
|
|
208
210
|
data-testid={testId ? `${testId}-clear` : undefined}
|
|
209
211
|
onMouseDown={(event) => event.preventDefault()}
|
|
210
212
|
onClick={clearKeyword}
|
|
@@ -326,12 +328,18 @@ const TableFilterRangeField = ({
|
|
|
326
328
|
onChange,
|
|
327
329
|
unit,
|
|
328
330
|
step,
|
|
329
|
-
minPlaceholder
|
|
330
|
-
maxPlaceholder
|
|
331
|
+
minPlaceholder,
|
|
332
|
+
maxPlaceholder,
|
|
331
333
|
invalidLabel,
|
|
332
334
|
testId,
|
|
333
335
|
}: TableFilterRangeFieldProps): React.JSX.Element => {
|
|
336
|
+
const { copy } = useTableFilterContext();
|
|
334
337
|
const invalid = isRangeInverted(value);
|
|
338
|
+
// A field may override any of the three; unset, they come from the root's
|
|
339
|
+
// table. Neither path reaches an English literal in this package.
|
|
340
|
+
const minText = minPlaceholder ?? copy.rangeMin;
|
|
341
|
+
const maxText = maxPlaceholder ?? copy.rangeMax;
|
|
342
|
+
const invalidText = invalidLabel ?? copy.invalidRange;
|
|
335
343
|
return (
|
|
336
344
|
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }} data-testid={testId}>
|
|
337
345
|
<Typography sx={{ fontSize: '0.75rem', fontWeight: 500, color: 'text.secondary' }}>
|
|
@@ -342,9 +350,9 @@ const TableFilterRangeField = ({
|
|
|
342
350
|
<RangeBound
|
|
343
351
|
bound={value.min}
|
|
344
352
|
error={invalid}
|
|
345
|
-
placeholder={
|
|
353
|
+
placeholder={minText}
|
|
346
354
|
step={step}
|
|
347
|
-
ariaLabel={`${label} ${
|
|
355
|
+
ariaLabel={`${label} ${minText}`}
|
|
348
356
|
testId={testId ? `${testId}-min` : undefined}
|
|
349
357
|
onChange={(min) => onChange({ ...value, min })}
|
|
350
358
|
/>
|
|
@@ -354,9 +362,9 @@ const TableFilterRangeField = ({
|
|
|
354
362
|
<RangeBound
|
|
355
363
|
bound={value.max}
|
|
356
364
|
error={invalid}
|
|
357
|
-
placeholder={
|
|
365
|
+
placeholder={maxText}
|
|
358
366
|
step={step}
|
|
359
|
-
ariaLabel={`${label} ${
|
|
367
|
+
ariaLabel={`${label} ${maxText}`}
|
|
360
368
|
testId={testId ? `${testId}-max` : undefined}
|
|
361
369
|
onChange={(max) => onChange({ ...value, max })}
|
|
362
370
|
/>
|
|
@@ -367,7 +375,7 @@ const TableFilterRangeField = ({
|
|
|
367
375
|
data-testid={testId ? `${testId}-error` : undefined}
|
|
368
376
|
sx={{ fontSize: '0.7rem', color: 'error.main' }}
|
|
369
377
|
>
|
|
370
|
-
{
|
|
378
|
+
{invalidText}
|
|
371
379
|
</Typography>
|
|
372
380
|
)}
|
|
373
381
|
</Box>
|
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
2
|
|
|
3
|
+
import type { TableFilterCopy } from '../../../copy';
|
|
4
|
+
|
|
3
5
|
/** Props for the `<TableFilter>` root (provider). */
|
|
4
6
|
export interface TableFilterProps {
|
|
5
7
|
children: ReactNode;
|
|
8
|
+
/**
|
|
9
|
+
* Every word this compound renders. REQUIRED: this package ships no default
|
|
10
|
+
* copy, and the two ends of a range plus the panel's clear link are read by
|
|
11
|
+
* the store's own customer, in the store's own language.
|
|
12
|
+
*/
|
|
13
|
+
copy: TableFilterCopy;
|
|
6
14
|
/** Whether the panel is open. */
|
|
7
15
|
open: boolean;
|
|
8
16
|
/** Toggle the panel. */
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
import { createContext, useContext } from 'react';
|
|
4
4
|
|
|
5
|
+
import type { TableFilterCopy } from '../../../copy';
|
|
6
|
+
|
|
5
7
|
/** Open/close + active state shared by every `TableFilter` compound part. */
|
|
6
8
|
export interface TableFilterContextValue {
|
|
7
9
|
/** Whether the filter panel is expanded. */
|
|
@@ -10,6 +12,14 @@ export interface TableFilterContextValue {
|
|
|
10
12
|
onOpenChange: (open: boolean) => void;
|
|
11
13
|
/** When true, the trigger shows a filled indicator dot. */
|
|
12
14
|
hasActiveFilters: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Every word the compound's parts render. Carried on the root's context
|
|
17
|
+
* rather than on each part's props because the parts are a TREE — a host
|
|
18
|
+
* composes `Panel`, `Keyword` and the fields under one root, and asking each
|
|
19
|
+
* one separately for its share of the same table is the shape that makes a
|
|
20
|
+
* host answer four times and get one of them wrong.
|
|
21
|
+
*/
|
|
22
|
+
copy: TableFilterCopy;
|
|
13
23
|
}
|
|
14
24
|
|
|
15
25
|
/** Backing context. `null` outside a `<TableFilter>` root. */
|
|
@@ -6,6 +6,7 @@ import React from 'react';
|
|
|
6
6
|
|
|
7
7
|
import { breadcrumbLinkStyles } from './Breadcrumbs.styles';
|
|
8
8
|
import type { BreadcrumbItem } from './Breadcrumbs.types';
|
|
9
|
+
import type { BreadcrumbCopy } from '../../../copy';
|
|
9
10
|
|
|
10
11
|
const BreadcrumbLink = styled(Link, {
|
|
11
12
|
shouldForwardProp: (prop) => prop !== 'size' && prop !== 'active' && prop !== 'visualStyle' })<{ size?: string; active?: boolean; visualStyle?: string }>(
|
|
@@ -96,10 +97,12 @@ const CollapsedMenu = ({
|
|
|
96
97
|
items,
|
|
97
98
|
size,
|
|
98
99
|
visualStyle,
|
|
100
|
+
copy,
|
|
99
101
|
dataTestId }: {
|
|
100
102
|
items: BreadcrumbItem[];
|
|
101
103
|
size: string;
|
|
102
104
|
visualStyle?: string;
|
|
105
|
+
copy: BreadcrumbCopy;
|
|
103
106
|
dataTestId?: string;
|
|
104
107
|
}) => {
|
|
105
108
|
const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);
|
|
@@ -115,7 +118,7 @@ const CollapsedMenu = ({
|
|
|
115
118
|
|
|
116
119
|
return (
|
|
117
120
|
<>
|
|
118
|
-
<Tooltip title=
|
|
121
|
+
<Tooltip title={copy.showMore} arrow>
|
|
119
122
|
<BreadcrumbLink
|
|
120
123
|
onClick={handleClick}
|
|
121
124
|
size={size}
|
|
@@ -174,10 +177,11 @@ const crumbIcon = ({
|
|
|
174
177
|
);
|
|
175
178
|
};
|
|
176
179
|
|
|
177
|
-
const EllipsisCrumb: React.FC<{ label: string; dataTestId?: string }> = ({
|
|
180
|
+
const EllipsisCrumb: React.FC<{ label: string; copy: BreadcrumbCopy; dataTestId?: string }> = ({
|
|
178
181
|
label,
|
|
182
|
+
copy,
|
|
179
183
|
dataTestId }) => (
|
|
180
|
-
<Tooltip title=
|
|
184
|
+
<Tooltip title={copy.moreItems} arrow>
|
|
181
185
|
<Box
|
|
182
186
|
sx={{
|
|
183
187
|
px: 1,
|
|
@@ -237,6 +241,7 @@ export const BreadcrumbEntry: React.FC<{
|
|
|
237
241
|
iconSize: 'small' | 'medium';
|
|
238
242
|
size: string;
|
|
239
243
|
variant: string;
|
|
244
|
+
copy: BreadcrumbCopy;
|
|
240
245
|
dataTestId?: string;
|
|
241
246
|
}> = ({
|
|
242
247
|
item,
|
|
@@ -249,6 +254,7 @@ export const BreadcrumbEntry: React.FC<{
|
|
|
249
254
|
iconSize,
|
|
250
255
|
size,
|
|
251
256
|
variant,
|
|
257
|
+
copy,
|
|
252
258
|
dataTestId }) => {
|
|
253
259
|
const testId = makeTestId(dataTestId);
|
|
254
260
|
const isLast = index === itemCount - 1;
|
|
@@ -262,6 +268,7 @@ export const BreadcrumbEntry: React.FC<{
|
|
|
262
268
|
return (
|
|
263
269
|
<>
|
|
264
270
|
<CollapsedMenu
|
|
271
|
+
copy={copy}
|
|
265
272
|
items={collapsedItems}
|
|
266
273
|
size={size}
|
|
267
274
|
visualStyle={variant}
|
|
@@ -273,7 +280,7 @@ export const BreadcrumbEntry: React.FC<{
|
|
|
273
280
|
}
|
|
274
281
|
|
|
275
282
|
if (item.isEllipsis) {
|
|
276
|
-
return <EllipsisCrumb label={item.label} dataTestId={dataTestId} />;
|
|
283
|
+
return <EllipsisCrumb copy={copy} label={item.label} dataTestId={dataTestId} />;
|
|
277
284
|
}
|
|
278
285
|
|
|
279
286
|
const icon = crumbIcon({ item, isFirst: index === 0, showHomeIcon, iconSize });
|
|
@@ -145,6 +145,7 @@ export const Breadcrumbs = React.forwardRef<HTMLElement, BreadcrumbsProps>(
|
|
|
145
145
|
collapseBehavior,
|
|
146
146
|
mobileMaxItems,
|
|
147
147
|
ariaLabel,
|
|
148
|
+
copy,
|
|
148
149
|
dataTestId,
|
|
149
150
|
...props
|
|
150
151
|
} = resolveProps(componentProps);
|
|
@@ -181,6 +182,7 @@ export const Breadcrumbs = React.forwardRef<HTMLElement, BreadcrumbsProps>(
|
|
|
181
182
|
>
|
|
182
183
|
{displayItems.map((item, index) => (
|
|
183
184
|
<BreadcrumbEntry
|
|
185
|
+
copy={copy}
|
|
184
186
|
key={index}
|
|
185
187
|
item={item}
|
|
186
188
|
index={index}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ColorValue, SizeValue } from '../../../tokens/scales';
|
|
2
2
|
import type { BreadcrumbsProps as MuiBreadcrumbsProps } from '@mui/material';
|
|
3
3
|
import type { ReactNode } from 'react';
|
|
4
|
+
import type { BreadcrumbCopy } from '../../../copy';
|
|
4
5
|
|
|
5
6
|
export interface BreadcrumbItem {
|
|
6
7
|
/**
|
|
@@ -57,6 +58,8 @@ export interface BreadcrumbItem {
|
|
|
57
58
|
}
|
|
58
59
|
|
|
59
60
|
export interface BreadcrumbsProps extends Omit<MuiBreadcrumbsProps, 'separator'> {
|
|
61
|
+
/** The overflow control's tooltip, in its two spellings. REQUIRED. */
|
|
62
|
+
copy: BreadcrumbCopy;
|
|
60
63
|
/**
|
|
61
64
|
* The visual variant of the breadcrumbs container
|
|
62
65
|
* - default: No special styling
|