@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
|
@@ -17,6 +17,7 @@ export type AddressAutocompleteFieldProps = ResolvedAddressProps & AddressAutoco
|
|
|
17
17
|
|
|
18
18
|
// The live field, rendered once Google Maps (or the mock stand-in) is ready.
|
|
19
19
|
export const AddressAutocompleteField: FC<AddressAutocompleteFieldProps> = ({
|
|
20
|
+
copy,
|
|
20
21
|
variant,
|
|
21
22
|
label,
|
|
22
23
|
placeholder,
|
|
@@ -62,6 +63,7 @@ export const AddressAutocompleteField: FC<AddressAutocompleteFieldProps> = ({
|
|
|
62
63
|
)}
|
|
63
64
|
renderInput={(params) => (
|
|
64
65
|
<AddressInputField
|
|
66
|
+
copy={copy}
|
|
65
67
|
params={params}
|
|
66
68
|
addressVariant={variant}
|
|
67
69
|
label={floating ? undefined : label}
|
|
@@ -6,6 +6,7 @@ import type { AddressAutocompleteProps } from './AddressAutocomplete.types';
|
|
|
6
6
|
import { AddressTextField } from './AddressTextField';
|
|
7
7
|
|
|
8
8
|
export interface AddressFallbackFieldProps {
|
|
9
|
+
copy: AddressAutocompleteProps['copy'];
|
|
9
10
|
variant: AddressAutocompleteProps['variant'];
|
|
10
11
|
label?: string;
|
|
11
12
|
placeholder?: string;
|
|
@@ -18,6 +19,7 @@ export interface AddressFallbackFieldProps {
|
|
|
18
19
|
// Stands in for the Autocomplete before Google Maps is usable: a disabled field
|
|
19
20
|
// that either spins or explains why it never loaded.
|
|
20
21
|
export const AddressFallbackField: FC<AddressFallbackFieldProps> = ({
|
|
22
|
+
copy,
|
|
21
23
|
variant,
|
|
22
24
|
label,
|
|
23
25
|
placeholder,
|
|
@@ -33,7 +35,7 @@ export const AddressFallbackField: FC<AddressFallbackFieldProps> = ({
|
|
|
33
35
|
<AddressTextField
|
|
34
36
|
addressVariant={variant}
|
|
35
37
|
label={floating ? undefined : label}
|
|
36
|
-
placeholder=
|
|
38
|
+
placeholder={copy.loadingMaps}
|
|
37
39
|
disabled
|
|
38
40
|
fullWidth={fullWidth}
|
|
39
41
|
InputProps={{
|
|
@@ -57,7 +59,7 @@ export const AddressFallbackField: FC<AddressFallbackFieldProps> = ({
|
|
|
57
59
|
InputProps={{ startAdornment }}
|
|
58
60
|
/>
|
|
59
61
|
<Alert severity="error" sx={{ mt: 1 }}>
|
|
60
|
-
|
|
62
|
+
{copy.mapsLoadFailed}
|
|
61
63
|
</Alert>
|
|
62
64
|
</Box>
|
|
63
65
|
);
|
|
@@ -7,16 +7,17 @@ import React from 'react';
|
|
|
7
7
|
import type { AddressAutocompleteProps } from './AddressAutocomplete.types';
|
|
8
8
|
import { AddressTextField } from './AddressTextField';
|
|
9
9
|
|
|
10
|
-
const CurrentLocationButton: FC<{
|
|
11
|
-
disabled
|
|
12
|
-
onClick
|
|
13
|
-
|
|
10
|
+
const CurrentLocationButton: FC<{
|
|
11
|
+
disabled: boolean;
|
|
12
|
+
onClick: () => void;
|
|
13
|
+
currentLocationLabel: string;
|
|
14
|
+
}> = ({ disabled, onClick, currentLocationLabel }) => (
|
|
14
15
|
<InputAdornment position="end">
|
|
15
16
|
<IconButton
|
|
16
17
|
edge="end"
|
|
17
18
|
onClick={onClick}
|
|
18
19
|
size="small"
|
|
19
|
-
title=
|
|
20
|
+
title={currentLocationLabel}
|
|
20
21
|
disabled={disabled}
|
|
21
22
|
data-testid="address-current-location-button"
|
|
22
23
|
>
|
|
@@ -26,6 +27,7 @@ const CurrentLocationButton: FC<{ disabled: boolean; onClick: () => void }> = ({
|
|
|
26
27
|
);
|
|
27
28
|
|
|
28
29
|
export interface AddressInputFieldProps {
|
|
30
|
+
copy: AddressAutocompleteProps['copy'];
|
|
29
31
|
params: AutocompleteRenderInputParams;
|
|
30
32
|
addressVariant: AddressAutocompleteProps['variant'];
|
|
31
33
|
label?: string;
|
|
@@ -41,6 +43,7 @@ export interface AddressInputFieldProps {
|
|
|
41
43
|
}
|
|
42
44
|
|
|
43
45
|
export const AddressInputField: FC<AddressInputFieldProps> = ({
|
|
46
|
+
copy,
|
|
44
47
|
params,
|
|
45
48
|
addressVariant,
|
|
46
49
|
label,
|
|
@@ -69,7 +72,11 @@ export const AddressInputField: FC<AddressInputFieldProps> = ({
|
|
|
69
72
|
<>
|
|
70
73
|
{loading && <CircularProgress color="inherit" size={20} data-testid="address-loading" />}
|
|
71
74
|
{showCurrentLocation && (
|
|
72
|
-
<CurrentLocationButton
|
|
75
|
+
<CurrentLocationButton
|
|
76
|
+
disabled={disabled}
|
|
77
|
+
onClick={onGetCurrentLocation}
|
|
78
|
+
currentLocationLabel={copy.useCurrentLocation}
|
|
79
|
+
/>
|
|
73
80
|
)}
|
|
74
81
|
{params.InputProps.endAdornment}
|
|
75
82
|
</>
|
|
@@ -17,6 +17,7 @@ import React from 'react';
|
|
|
17
17
|
|
|
18
18
|
import { highlightLabel, type MatchMode } from './Autocomplete.helpers';
|
|
19
19
|
import type { SuggestionItemState, SuggestionType } from './Autocomplete.types';
|
|
20
|
+
import type { AutocompleteCopy } from '../../../copy';
|
|
20
21
|
|
|
21
22
|
const StyledPopper = styled(Popper)(({ theme }) => ({
|
|
22
23
|
zIndex: theme.zIndex.tooltip,
|
|
@@ -213,13 +214,13 @@ export function DefaultSuggestion<T>({
|
|
|
213
214
|
}
|
|
214
215
|
|
|
215
216
|
/** A "Loading…" row shown while async suggestions resolve. */
|
|
216
|
-
export function LoadingRow(): React.JSX.Element {
|
|
217
|
+
export function LoadingRow({ label }: { label: string }): React.JSX.Element {
|
|
217
218
|
return (
|
|
218
219
|
<ListItem>
|
|
219
220
|
<Box display="flex" alignItems="center" gap={1}>
|
|
220
221
|
<CircularProgress size={16} />
|
|
221
222
|
<Typography variant="body2" color="text.secondary">
|
|
222
|
-
|
|
223
|
+
{label}
|
|
223
224
|
</Typography>
|
|
224
225
|
</Box>
|
|
225
226
|
</ListItem>
|
|
@@ -227,11 +228,11 @@ export function LoadingRow(): React.JSX.Element {
|
|
|
227
228
|
}
|
|
228
229
|
|
|
229
230
|
/** The empty "No results found" row. */
|
|
230
|
-
export function NoResultsRow(): React.JSX.Element {
|
|
231
|
+
export function NoResultsRow({ label }: { label: string }): React.JSX.Element {
|
|
231
232
|
return (
|
|
232
233
|
<ListItem>
|
|
233
234
|
<Typography variant="body2" color="text.secondary">
|
|
234
|
-
|
|
235
|
+
{label}
|
|
235
236
|
</Typography>
|
|
236
237
|
</ListItem>
|
|
237
238
|
);
|
|
@@ -251,6 +252,7 @@ const SAME_WIDTH_MODIFIER = {
|
|
|
251
252
|
};
|
|
252
253
|
|
|
253
254
|
export interface SuggestionListBoxProps<T> {
|
|
255
|
+
copy: AutocompleteCopy;
|
|
254
256
|
open: boolean;
|
|
255
257
|
anchorEl: HTMLElement | null;
|
|
256
258
|
portal: boolean | { container?: HTMLElement };
|
|
@@ -272,6 +274,7 @@ export interface SuggestionListBoxProps<T> {
|
|
|
272
274
|
|
|
273
275
|
/** The suggestions dropdown: a same-width Popper with the option list + loading/empty rows. */
|
|
274
276
|
export function SuggestionListBox<T>({
|
|
277
|
+
copy,
|
|
275
278
|
open,
|
|
276
279
|
anchorEl,
|
|
277
280
|
portal,
|
|
@@ -328,8 +331,8 @@ export function SuggestionListBox<T>({
|
|
|
328
331
|
{renderItem(item, index === activeIndex)}
|
|
329
332
|
</ListItem>
|
|
330
333
|
))}
|
|
331
|
-
{isLoading && <LoadingRow />}
|
|
332
|
-
{showNoResults && <NoResultsRow />}
|
|
334
|
+
{isLoading && <LoadingRow label={copy.loading} />}
|
|
335
|
+
{showNoResults && <NoResultsRow label={copy.noResults} />}
|
|
333
336
|
</List>
|
|
334
337
|
</Paper>
|
|
335
338
|
</StyledPopper>
|
|
@@ -54,7 +54,7 @@ function resolveRenderConfig<T>(p: AutocompleteProps<T>): RenderConfig<T> {
|
|
|
54
54
|
selectedItems: p.selectedItems ?? [],
|
|
55
55
|
isLoading: Boolean(p.isLoading),
|
|
56
56
|
showGhostText: p.showGhostText ?? true,
|
|
57
|
-
placeholder: p.placeholder ??
|
|
57
|
+
placeholder: p.placeholder ?? p.copy.placeholder,
|
|
58
58
|
autoFocus: Boolean(p.autoFocus),
|
|
59
59
|
disabled: Boolean(p.disabled),
|
|
60
60
|
portal: p.portal ?? false,
|
|
@@ -137,6 +137,7 @@ export const Autocomplete = <T = AutocompleteOption>(props: AutocompleteProps<T>
|
|
|
137
137
|
|
|
138
138
|
{s.open && (
|
|
139
139
|
<SuggestionListBox
|
|
140
|
+
copy={props.copy}
|
|
140
141
|
open={s.open}
|
|
141
142
|
anchorEl={s.inputRef.current}
|
|
142
143
|
portal={cfg.portal}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type React from 'react';
|
|
2
|
+
import type { AutocompleteCopy } from '../../../copy';
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* A suggestion's behavior on select:
|
|
@@ -24,6 +25,12 @@ export interface AutocompleteOption<T = unknown> {
|
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
export interface AutocompleteProps<T = AutocompleteOption> {
|
|
28
|
+
/**
|
|
29
|
+
* The two rows the dropdown shows in place of options — while an async
|
|
30
|
+
* fetch is in flight, and when it came back empty. REQUIRED: this package
|
|
31
|
+
* ships no default copy.
|
|
32
|
+
*/
|
|
33
|
+
copy: AutocompleteCopy;
|
|
27
34
|
/** Controlled input value */
|
|
28
35
|
value: string;
|
|
29
36
|
/** Input value change */
|
|
@@ -23,7 +23,7 @@ const containerSx = (monthsToShow: number): SxProps<Theme> => ({
|
|
|
23
23
|
|
|
24
24
|
export const Calendar = React.forwardRef<HTMLDivElement, CalendarProps>((componentProps, ref) => {
|
|
25
25
|
const props = resolveCalendarProps(componentProps);
|
|
26
|
-
const { monthsToShow, locale, renderHeader, renderFooter, className } = props;
|
|
26
|
+
const { monthsToShow, locale, renderHeader, renderFooter, className, ariaLabel } = props;
|
|
27
27
|
|
|
28
28
|
const calendar = useCalendar(props);
|
|
29
29
|
|
|
@@ -48,7 +48,7 @@ export const Calendar = React.forwardRef<HTMLDivElement, CalendarProps>((compone
|
|
|
48
48
|
ref={ref}
|
|
49
49
|
className={className}
|
|
50
50
|
role="application"
|
|
51
|
-
aria-label=
|
|
51
|
+
aria-label={ariaLabel}
|
|
52
52
|
tabIndex={0}
|
|
53
53
|
onKeyDown={calendar.handleKeyDown}
|
|
54
54
|
data-testid="calendar-container"
|
|
@@ -23,6 +23,13 @@ export interface HeaderRenderContext {
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
export interface CalendarProps {
|
|
26
|
+
/**
|
|
27
|
+
* The grid's accessible name. REQUIRED: the container is a
|
|
28
|
+
* `role="application"`, so a screen reader announces this and nothing else —
|
|
29
|
+
* and the package cannot know whether it picks a delivery day or a birthday.
|
|
30
|
+
*/
|
|
31
|
+
ariaLabel: string;
|
|
32
|
+
|
|
26
33
|
// Mode
|
|
27
34
|
selectionMode?: SelectionMode; // default: 'single'
|
|
28
35
|
|
|
@@ -50,7 +50,7 @@ const PlaceholderOverlay = styled(Box)(({ theme }) => ({
|
|
|
50
50
|
userSelect: 'none' }));
|
|
51
51
|
|
|
52
52
|
// Monaco editor themes
|
|
53
|
-
const EditorLoading: FC = () => (
|
|
53
|
+
const EditorLoading: FC<{ label: string }> = ({ label }) => (
|
|
54
54
|
<Box
|
|
55
55
|
sx={{
|
|
56
56
|
display: 'flex',
|
|
@@ -59,7 +59,7 @@ const EditorLoading: FC = () => (
|
|
|
59
59
|
height: '100%',
|
|
60
60
|
color: 'text.secondary' }}
|
|
61
61
|
>
|
|
62
|
-
<Typography variant="body2">
|
|
62
|
+
<Typography variant="body2">{label}</Typography>
|
|
63
63
|
</Box>
|
|
64
64
|
);
|
|
65
65
|
|
|
@@ -116,7 +116,8 @@ export const CodeEditor: FC<CodeEditorProps> = (componentProps) => {
|
|
|
116
116
|
autoFormat,
|
|
117
117
|
placeholder,
|
|
118
118
|
onSave,
|
|
119
|
-
dataTestId
|
|
119
|
+
dataTestId,
|
|
120
|
+
copy } = resolveCodeEditorProps(componentProps);
|
|
120
121
|
|
|
121
122
|
const testId = makeTestId(dataTestId);
|
|
122
123
|
const editor = useCodeEditor({ themeProp, wordWrap, autoFormat, readOnly, onSave });
|
|
@@ -132,6 +133,7 @@ export const CodeEditor: FC<CodeEditorProps> = (componentProps) => {
|
|
|
132
133
|
<EditorContainer elevation={2} data-testid={dataTestId || 'code-editor'}>
|
|
133
134
|
{showToolbar && (
|
|
134
135
|
<EditorToolbar
|
|
136
|
+
copy={copy}
|
|
135
137
|
language={language}
|
|
136
138
|
readOnly={readOnly}
|
|
137
139
|
isWrapped={editor.isWrapped}
|
|
@@ -158,7 +160,7 @@ export const CodeEditor: FC<CodeEditorProps> = (componentProps) => {
|
|
|
158
160
|
theme={editor.editorTheme}
|
|
159
161
|
options={editorOptions}
|
|
160
162
|
onMount={editor.handleEditorDidMount}
|
|
161
|
-
loading={<EditorLoading />}
|
|
163
|
+
loading={<EditorLoading label={copy.loading} />}
|
|
162
164
|
/>
|
|
163
165
|
</EditorWrapper>
|
|
164
166
|
</EditorContainer>
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
// Types for CodeEditor component
|
|
2
|
+
import type { CodeEditorCopy } from '../../../copy';
|
|
2
3
|
|
|
3
4
|
export type EditorLanguage = 'json' | 'javascript' | 'typescript' | 'css' | 'html' | 'yaml' | 'markdown' | 'sql' | 'python';
|
|
4
5
|
|
|
5
6
|
export type EditorTheme = 'light' | 'dark' | 'auto';
|
|
6
7
|
|
|
7
8
|
export interface CodeEditorProps {
|
|
9
|
+
/**
|
|
10
|
+
* The editor's chrome — the loading line, the read-only badge and the four
|
|
11
|
+
* toolbar tooltips, which are also those buttons' accessible names.
|
|
12
|
+
* REQUIRED: this package ships no default copy.
|
|
13
|
+
*/
|
|
14
|
+
copy: CodeEditorCopy;
|
|
8
15
|
/** Programming language for syntax highlighting */
|
|
9
16
|
language: EditorLanguage;
|
|
10
17
|
/** Editor height (default: '400px') */
|
|
@@ -7,6 +7,8 @@ import { Box, IconButton, Stack, Tooltip, Typography } from '@mui/material';
|
|
|
7
7
|
import { alpha, styled } from '@mui/material';
|
|
8
8
|
import React from 'react';
|
|
9
9
|
|
|
10
|
+
import type { CodeEditorCopy } from '../../../copy';
|
|
11
|
+
|
|
10
12
|
// Each button repeated the same conditional test id; this is that ternary once.
|
|
11
13
|
const makeTestId =
|
|
12
14
|
(dataTestId?: string) =>
|
|
@@ -37,6 +39,7 @@ const LanguageBadge = styled(Box)(({ theme }) => ({
|
|
|
37
39
|
}));
|
|
38
40
|
|
|
39
41
|
const EditorActions: React.FC<{
|
|
42
|
+
copy: CodeEditorCopy;
|
|
40
43
|
readOnly: boolean;
|
|
41
44
|
isWrapped: boolean;
|
|
42
45
|
isCopied: boolean;
|
|
@@ -47,6 +50,7 @@ const EditorActions: React.FC<{
|
|
|
47
50
|
onWrapToggle: () => void;
|
|
48
51
|
onFullscreenToggle: () => void;
|
|
49
52
|
}> = ({
|
|
53
|
+
copy,
|
|
50
54
|
readOnly,
|
|
51
55
|
isWrapped,
|
|
52
56
|
isCopied,
|
|
@@ -62,7 +66,7 @@ const EditorActions: React.FC<{
|
|
|
62
66
|
return (
|
|
63
67
|
<Stack direction="row" spacing={1}>
|
|
64
68
|
{!readOnly && (
|
|
65
|
-
<Tooltip title=
|
|
69
|
+
<Tooltip title={copy.formatCode}>
|
|
66
70
|
<IconButton
|
|
67
71
|
size="small"
|
|
68
72
|
onClick={onFormat}
|
|
@@ -73,7 +77,7 @@ const EditorActions: React.FC<{
|
|
|
73
77
|
</Tooltip>
|
|
74
78
|
)}
|
|
75
79
|
|
|
76
|
-
<Tooltip title={isWrapped ?
|
|
80
|
+
<Tooltip title={isWrapped ? copy.disableWrap : copy.enableWrap}>
|
|
77
81
|
<IconButton
|
|
78
82
|
size="small"
|
|
79
83
|
onClick={onWrapToggle}
|
|
@@ -84,7 +88,7 @@ const EditorActions: React.FC<{
|
|
|
84
88
|
</IconButton>
|
|
85
89
|
</Tooltip>
|
|
86
90
|
|
|
87
|
-
<Tooltip title={isCopied ?
|
|
91
|
+
<Tooltip title={isCopied ? copy.copied : copy.copyToClipboard}>
|
|
88
92
|
<IconButton
|
|
89
93
|
size="small"
|
|
90
94
|
onClick={onCopy}
|
|
@@ -95,7 +99,7 @@ const EditorActions: React.FC<{
|
|
|
95
99
|
</IconButton>
|
|
96
100
|
</Tooltip>
|
|
97
101
|
|
|
98
|
-
<Tooltip title={isFullscreen ?
|
|
102
|
+
<Tooltip title={isFullscreen ? copy.exitFullscreen : copy.enterFullscreen}>
|
|
99
103
|
<IconButton
|
|
100
104
|
size="small"
|
|
101
105
|
onClick={onFullscreenToggle}
|
|
@@ -114,6 +118,7 @@ const EditorActions: React.FC<{
|
|
|
114
118
|
|
|
115
119
|
// Language badge, read-only marker and the four action buttons.
|
|
116
120
|
export const EditorToolbar: React.FC<{
|
|
121
|
+
copy: CodeEditorCopy;
|
|
117
122
|
language: string;
|
|
118
123
|
readOnly: boolean;
|
|
119
124
|
isWrapped: boolean;
|
|
@@ -125,6 +130,7 @@ export const EditorToolbar: React.FC<{
|
|
|
125
130
|
onWrapToggle: () => void;
|
|
126
131
|
onFullscreenToggle: () => void;
|
|
127
132
|
}> = ({
|
|
133
|
+
copy,
|
|
128
134
|
language,
|
|
129
135
|
readOnly,
|
|
130
136
|
isWrapped,
|
|
@@ -147,12 +153,13 @@ export const EditorToolbar: React.FC<{
|
|
|
147
153
|
</LanguageBadge>
|
|
148
154
|
{readOnly && (
|
|
149
155
|
<Typography variant="caption" color="text.secondary">
|
|
150
|
-
|
|
156
|
+
{copy.readOnly}
|
|
151
157
|
</Typography>
|
|
152
158
|
)}
|
|
153
159
|
</Stack>
|
|
154
160
|
|
|
155
161
|
<EditorActions
|
|
162
|
+
copy={copy}
|
|
156
163
|
readOnly={readOnly}
|
|
157
164
|
isWrapped={isWrapped}
|
|
158
165
|
isCopied={isCopied}
|
|
@@ -61,6 +61,8 @@ export function defaultMessages(): DateRangePickerMessages {
|
|
|
61
61
|
reversed: 'The end date must be on or after the start date.',
|
|
62
62
|
overMax: ({ maxRangeDays }) => `Choose a range of at most ${maxRangeDays} days.`,
|
|
63
63
|
summary: ({ from, to }) => `${isoToBr(from)} – ${isoToBr(to)}`,
|
|
64
|
+
calendarLabel: 'Calendar',
|
|
65
|
+
dayMask: 'dd/mm/yyyy',
|
|
64
66
|
};
|
|
65
67
|
}
|
|
66
68
|
|
|
@@ -129,6 +129,7 @@ function useMonthCount(requested: number | undefined): number | undefined {
|
|
|
129
129
|
|
|
130
130
|
/** The grid, in range mode — `Calendar`, never a second implementation of one. */
|
|
131
131
|
function RangeCalendar({
|
|
132
|
+
calendarLabel,
|
|
132
133
|
picker,
|
|
133
134
|
value,
|
|
134
135
|
locale,
|
|
@@ -142,10 +143,12 @@ function RangeCalendar({
|
|
|
142
143
|
weekStartsOn: WeekStart;
|
|
143
144
|
months: number | undefined;
|
|
144
145
|
maxRangeDays: number | undefined;
|
|
146
|
+
calendarLabel: string;
|
|
145
147
|
}): React.JSX.Element {
|
|
146
148
|
return (
|
|
147
149
|
<Calendar
|
|
148
150
|
key={picker.viewNonce}
|
|
151
|
+
ariaLabel={calendarLabel}
|
|
149
152
|
className={CALENDAR_CLASS}
|
|
150
153
|
selectionMode="range"
|
|
151
154
|
locale={locale}
|
|
@@ -223,6 +226,7 @@ export function DateRangePicker({
|
|
|
223
226
|
<Paper className={className} data-testid={dataTestId} sx={ROOT_SX}>
|
|
224
227
|
<Box sx={BODY_SX}>
|
|
225
228
|
<RangeCalendar
|
|
229
|
+
calendarLabel={picker.copy.calendarLabel}
|
|
226
230
|
picker={picker}
|
|
227
231
|
value={value}
|
|
228
232
|
locale={locale}
|
|
@@ -96,6 +96,17 @@ export interface DateRangePickerMessages {
|
|
|
96
96
|
overMax: (info: { maxRangeDays: number; days: number }) => string;
|
|
97
97
|
/** The chosen window, in words. */
|
|
98
98
|
summary: (window: DayWindow) => string;
|
|
99
|
+
/**
|
|
100
|
+
* The month grid's accessible name. The grid is a `role="application"`, so
|
|
101
|
+
* this is the only thing a screen reader announces for it.
|
|
102
|
+
*/
|
|
103
|
+
calendarLabel: string;
|
|
104
|
+
/**
|
|
105
|
+
* The two fields' mask, which IS their placeholder — the expected ORDER is
|
|
106
|
+
* on screen before the first keystroke rather than discovered by getting it
|
|
107
|
+
* wrong. `dd/mm/aaaa` is one locale's order and one locale's letters.
|
|
108
|
+
*/
|
|
109
|
+
dayMask: string;
|
|
99
110
|
}
|
|
100
111
|
|
|
101
112
|
/** Which of the three views moved the range, and what it moved it to. */
|
|
@@ -57,6 +57,7 @@ export function DateRangeFields({
|
|
|
57
57
|
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>
|
|
58
58
|
<Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>
|
|
59
59
|
<DayBoundInput
|
|
60
|
+
mask={messages.dayMask}
|
|
60
61
|
label={messages.from}
|
|
61
62
|
value={value.from ?? undefined}
|
|
62
63
|
onChange={(bound) => onEdit('from', bound ?? null)}
|
|
@@ -65,6 +66,7 @@ export function DateRangeFields({
|
|
|
65
66
|
describedBy={statusId}
|
|
66
67
|
/>
|
|
67
68
|
<DayBoundInput
|
|
69
|
+
mask={messages.dayMask}
|
|
68
70
|
label={messages.to}
|
|
69
71
|
value={value.to ?? undefined}
|
|
70
72
|
onChange={(bound) => onEdit('to', bound ?? null)}
|
|
@@ -7,6 +7,7 @@ import { MenubarSeparator } from './Menubar.separator';
|
|
|
7
7
|
import type { MenubarItem, MenubarProps } from './Menubar.types';
|
|
8
8
|
|
|
9
9
|
export interface MenubarToolbarProps {
|
|
10
|
+
ariaLabel: string;
|
|
10
11
|
barSx: CSSObject;
|
|
11
12
|
items: MenubarItem[];
|
|
12
13
|
size: NonNullable<MenubarProps['size']>;
|
|
@@ -31,6 +32,7 @@ export interface MenubarToolbarProps {
|
|
|
31
32
|
* wrapping it differs.
|
|
32
33
|
*/
|
|
33
34
|
export const MenubarToolbar: React.FC<MenubarToolbarProps> = ({
|
|
35
|
+
ariaLabel,
|
|
34
36
|
barSx,
|
|
35
37
|
items,
|
|
36
38
|
size,
|
|
@@ -53,7 +55,7 @@ export const MenubarToolbar: React.FC<MenubarToolbarProps> = ({
|
|
|
53
55
|
return (
|
|
54
56
|
<Toolbar
|
|
55
57
|
role="toolbar"
|
|
56
|
-
aria-label=
|
|
58
|
+
aria-label={ariaLabel}
|
|
57
59
|
sx={{
|
|
58
60
|
...barSx,
|
|
59
61
|
width: fullWidth ? '100%' : 'auto',
|
|
@@ -47,7 +47,7 @@ type ResolvedProps = MenubarProps & Required<Pick<MenubarProps, keyof typeof DEF
|
|
|
47
47
|
|
|
48
48
|
export const Menubar: React.FC<MenubarProps> = (props) => {
|
|
49
49
|
const {
|
|
50
|
-
items, variant, size, color, orientation, glow, pulse, glass, gradient,
|
|
50
|
+
ariaLabel, items, variant, size, color, orientation, glow, pulse, glass, gradient,
|
|
51
51
|
loading, disabled, className, style, logo, endContent, sticky, transparent,
|
|
52
52
|
blur, elevation, fullWidth, onClick, onFocus, onBlur,
|
|
53
53
|
'data-testid': dataTestId,
|
|
@@ -65,6 +65,7 @@ export const Menubar: React.FC<MenubarProps> = (props) => {
|
|
|
65
65
|
|
|
66
66
|
const content = (
|
|
67
67
|
<MenubarToolbar
|
|
68
|
+
ariaLabel={ariaLabel}
|
|
68
69
|
barSx={barSx}
|
|
69
70
|
items={items}
|
|
70
71
|
size={size}
|
|
@@ -13,6 +13,11 @@ export interface MenubarItem {
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
export interface MenubarProps {
|
|
16
|
+
/**
|
|
17
|
+
* The bar's accessible name. REQUIRED: it is a `role="toolbar"` whose items
|
|
18
|
+
* are the host's own, so only the host can say what this bar navigates.
|
|
19
|
+
*/
|
|
20
|
+
ariaLabel: string;
|
|
16
21
|
items: MenubarItem[];
|
|
17
22
|
variant?: 'default' | 'glass' | 'gradient' | 'elevated' | 'minimal' | 'bordered';
|
|
18
23
|
size?: SizeValue;
|
|
@@ -4,6 +4,7 @@ import WarningIcon from '@mui/icons-material/Warning';
|
|
|
4
4
|
import { Box, Typography } from '@mui/material';
|
|
5
5
|
import React from 'react';
|
|
6
6
|
|
|
7
|
+
import type { PasswordRequirementCopy, PasswordStrengthCopy } from '../../../copy';
|
|
7
8
|
import type { PasswordRequirements } from './PasswordStrength.types';
|
|
8
9
|
|
|
9
10
|
export const defaultRequirements: PasswordRequirements = {
|
|
@@ -72,15 +73,19 @@ export const calculatePasswordStrength = (
|
|
|
72
73
|
return Math.min(earned + lengthBonus(password.length), 100);
|
|
73
74
|
};
|
|
74
75
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
[
|
|
79
|
-
[
|
|
76
|
+
// The four ceilings, and which band each one names. The band NAMES come from
|
|
77
|
+
// the host's table — only the thresholds are ours.
|
|
78
|
+
const STRENGTH_BANDS: ReadonlyArray<[number, keyof PasswordStrengthCopy['bands']]> = [
|
|
79
|
+
[20, 'veryWeak'],
|
|
80
|
+
[40, 'weak'],
|
|
81
|
+
[60, 'fair'],
|
|
82
|
+
[80, 'good'],
|
|
80
83
|
];
|
|
81
84
|
|
|
82
|
-
export const getStrengthLabel = (
|
|
83
|
-
|
|
85
|
+
export const getStrengthLabel = (
|
|
86
|
+
strength: number,
|
|
87
|
+
bands: PasswordStrengthCopy['bands'],
|
|
88
|
+
): string => bands[STRENGTH_BANDS.find(([ceiling]) => strength <= ceiling)?.[1] ?? 'strong'];
|
|
84
89
|
|
|
85
90
|
export const getStrengthIcon = (strength: number) => {
|
|
86
91
|
if (strength <= 40) return <WarningIcon />;
|
|
@@ -88,23 +93,34 @@ export const getStrengthIcon = (strength: number) => {
|
|
|
88
93
|
return <SuccessIcon />;
|
|
89
94
|
};
|
|
90
95
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
['
|
|
95
|
-
['
|
|
96
|
-
['
|
|
96
|
+
// One tip per unmet requirement, in checklist order. The `length` tip carries
|
|
97
|
+
// the configured minimum, so the number in the sentence is the one enforced.
|
|
98
|
+
const SUGGESTION_KEYS: ReadonlyArray<[keyof RequirementChecks, keyof PasswordRequirementCopy]> = [
|
|
99
|
+
['length', 'minLength'],
|
|
100
|
+
['uppercase', 'uppercase'],
|
|
101
|
+
['lowercase', 'lowercase'],
|
|
102
|
+
['numbers', 'numbers'],
|
|
103
|
+
['special', 'special'],
|
|
97
104
|
];
|
|
98
105
|
|
|
99
|
-
export const buildSuggestions = (
|
|
100
|
-
|
|
106
|
+
export const buildSuggestions = (
|
|
107
|
+
checks: RequirementChecks,
|
|
108
|
+
copy: PasswordRequirementCopy,
|
|
109
|
+
minLength: number,
|
|
110
|
+
): string[] =>
|
|
111
|
+
SUGGESTION_KEYS.filter(([check]) => !checks[check]).map(([, key]) =>
|
|
112
|
+
key === 'minLength' ? copy.minLength(minLength) : copy[key],
|
|
113
|
+
);
|
|
101
114
|
|
|
102
115
|
// Rendered by PasswordStrength; depends on nothing styled, so it lives beside
|
|
103
116
|
// the pure helpers rather than in the component file.
|
|
104
|
-
export const SuggestionsList: React.FC<{ suggestions: string[] }> = ({
|
|
117
|
+
export const SuggestionsList: React.FC<{ suggestions: string[]; heading: string }> = ({
|
|
118
|
+
suggestions,
|
|
119
|
+
heading,
|
|
120
|
+
}) => (
|
|
105
121
|
<Box>
|
|
106
122
|
<Typography variant="caption" color="text.secondary" fontWeight="medium">
|
|
107
|
-
|
|
123
|
+
{heading}
|
|
108
124
|
</Typography>
|
|
109
125
|
<Box sx={{ mt: 1 }}>
|
|
110
126
|
{suggestions.map((tip) => (
|