@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
|
@@ -21,6 +21,7 @@ import { useCommandPalette } from './CommandPalette.hooks';
|
|
|
21
21
|
import { PaletteResults } from './CommandPaletteResults';
|
|
22
22
|
import { ShortcutChip } from './ShortcutChip';
|
|
23
23
|
import type { CommandPaletteProps } from './CommandPalette.types';
|
|
24
|
+
import type { CommandPaletteCopy } from '../../../copy';
|
|
24
25
|
|
|
25
26
|
// Styled components
|
|
26
27
|
const StyledDialog = styled(Dialog)(() => ({
|
|
@@ -98,7 +99,10 @@ const PaletteSearch: React.FC<{
|
|
|
98
99
|
</SearchContainer>
|
|
99
100
|
);
|
|
100
101
|
|
|
101
|
-
const PaletteFooter: React.FC<{ commandCount: number }> = ({
|
|
102
|
+
const PaletteFooter: React.FC<{ commandCount: number; copy: CommandPaletteCopy }> = ({
|
|
103
|
+
commandCount,
|
|
104
|
+
copy,
|
|
105
|
+
}) => {
|
|
102
106
|
const theme = useTheme();
|
|
103
107
|
|
|
104
108
|
return (
|
|
@@ -112,9 +116,13 @@ const PaletteFooter: React.FC<{ commandCount: number }> = ({ commandCount }) =>
|
|
|
112
116
|
background: alpha(theme.palette.background.default, 0.4) }}
|
|
113
117
|
>
|
|
114
118
|
<Box sx={{ display: 'flex', gap: 1 }}>
|
|
115
|
-
<ShortcutChip
|
|
116
|
-
|
|
117
|
-
|
|
119
|
+
<ShortcutChip
|
|
120
|
+
icon={<EnterIcon sx={{ fontSize: 12 }} />}
|
|
121
|
+
label={copy.execute}
|
|
122
|
+
size="small"
|
|
123
|
+
/>
|
|
124
|
+
<ShortcutChip label={copy.navigate} size="small" />
|
|
125
|
+
<ShortcutChip label={copy.close} size="small" />
|
|
118
126
|
</Box>
|
|
119
127
|
<Typography variant="caption" color="text.secondary">
|
|
120
128
|
{commandCount} commands
|
|
@@ -124,6 +132,7 @@ const PaletteFooter: React.FC<{ commandCount: number }> = ({ commandCount }) =>
|
|
|
124
132
|
};
|
|
125
133
|
|
|
126
134
|
export const CommandPalette: FC<CommandPaletteProps> = ({
|
|
135
|
+
copy,
|
|
127
136
|
open,
|
|
128
137
|
onClose,
|
|
129
138
|
commands,
|
|
@@ -177,6 +186,7 @@ export const CommandPalette: FC<CommandPaletteProps> = ({
|
|
|
177
186
|
/>
|
|
178
187
|
|
|
179
188
|
<PaletteResults
|
|
189
|
+
copy={copy}
|
|
180
190
|
listRef={listRef}
|
|
181
191
|
dataTestId={dataTestId}
|
|
182
192
|
searchQuery={searchQuery}
|
|
@@ -190,7 +200,7 @@ export const CommandPalette: FC<CommandPaletteProps> = ({
|
|
|
190
200
|
onExecute={executeCommand}
|
|
191
201
|
/>
|
|
192
202
|
|
|
193
|
-
<PaletteFooter commandCount={filteredCommands.length} />
|
|
203
|
+
<PaletteFooter copy={copy} commandCount={filteredCommands.length} />
|
|
194
204
|
</PaletteContainer>
|
|
195
205
|
</DialogContent>
|
|
196
206
|
</StyledDialog>
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type React from 'react';
|
|
2
|
+
import type { CommandPaletteCopy } from '../../../copy';
|
|
2
3
|
|
|
3
4
|
export interface PaletteCommand {
|
|
4
5
|
id: string;
|
|
@@ -12,6 +13,8 @@ export interface PaletteCommand {
|
|
|
12
13
|
}
|
|
13
14
|
|
|
14
15
|
export interface CommandPaletteProps {
|
|
16
|
+
/** The footer's keyboard hints and the empty state's nudge. REQUIRED. */
|
|
17
|
+
copy: CommandPaletteCopy;
|
|
15
18
|
open: boolean;
|
|
16
19
|
onClose: () => void;
|
|
17
20
|
commands: PaletteCommand[];
|
|
@@ -5,6 +5,7 @@ import React from 'react';
|
|
|
5
5
|
|
|
6
6
|
import { ShortcutChip } from './ShortcutChip';
|
|
7
7
|
import type { PaletteCommand } from './CommandPalette.types';
|
|
8
|
+
import type { CommandPaletteCopy } from '../../../copy';
|
|
8
9
|
|
|
9
10
|
const ResultsList = styled(List)(({ theme }) => ({
|
|
10
11
|
maxHeight: 400,
|
|
@@ -90,6 +91,7 @@ const slug = (value: string) => value.toLowerCase().replace(/\s+/g, '-');
|
|
|
90
91
|
// has to stay consistent across both sections, so it is threaded through here
|
|
91
92
|
// rather than mutated from inside the render as it was before.
|
|
92
93
|
export const PaletteResults: React.FC<{
|
|
94
|
+
copy: CommandPaletteCopy;
|
|
93
95
|
listRef: React.Ref<globalThis.HTMLUListElement>;
|
|
94
96
|
dataTestId?: string;
|
|
95
97
|
searchQuery: string;
|
|
@@ -102,6 +104,7 @@ export const PaletteResults: React.FC<{
|
|
|
102
104
|
onSelect: (index: number) => void;
|
|
103
105
|
onExecute: (command: PaletteCommand) => void;
|
|
104
106
|
}> = ({
|
|
107
|
+
copy,
|
|
105
108
|
listRef,
|
|
106
109
|
dataTestId,
|
|
107
110
|
searchQuery,
|
|
@@ -121,7 +124,7 @@ export const PaletteResults: React.FC<{
|
|
|
121
124
|
No commands found for "{searchQuery}"
|
|
122
125
|
</Typography>
|
|
123
126
|
<Typography variant="caption" color="text.disabled" sx={{ mt: 1 }}>
|
|
124
|
-
|
|
127
|
+
{copy.tryAnotherTerm}
|
|
125
128
|
</Typography>
|
|
126
129
|
</NoResults>
|
|
127
130
|
);
|
|
@@ -160,7 +163,7 @@ export const PaletteResults: React.FC<{
|
|
|
160
163
|
<>
|
|
161
164
|
<CategoryLabel data-testid={`${dataTestId}-group-recent`}>
|
|
162
165
|
<RecentIcon sx={{ fontSize: 14, mr: 0.5, verticalAlign: 'middle' }} />
|
|
163
|
-
|
|
166
|
+
{copy.recent}
|
|
164
167
|
</CategoryLabel>
|
|
165
168
|
{recent.map(row)}
|
|
166
169
|
{filteredCommands.length > recentCommandIds.length && <Divider sx={{ my: 1 }} />}
|
|
@@ -152,6 +152,7 @@ export const Pagination = React.forwardRef<HTMLElement, PaginationProps>(
|
|
|
152
152
|
(componentProps, ref) => {
|
|
153
153
|
const resolved = resolvePaginationProps(componentProps);
|
|
154
154
|
const {
|
|
155
|
+
pageSizeLabel,
|
|
155
156
|
variant,
|
|
156
157
|
size,
|
|
157
158
|
page,
|
|
@@ -194,6 +195,7 @@ export const Pagination = React.forwardRef<HTMLElement, PaginationProps>(
|
|
|
194
195
|
<PaginationContainer className={className} data-testid={dataTestId || 'pagination'}>
|
|
195
196
|
{showItemsPerPage && onItemsPerPageChange && (
|
|
196
197
|
<ItemsPerPageSelect
|
|
198
|
+
pageSizeLabel={pageSizeLabel}
|
|
197
199
|
value={itemsPerPage}
|
|
198
200
|
options={itemsPerPageOptions}
|
|
199
201
|
size={size}
|
|
@@ -3,6 +3,8 @@ import type { PaginationProps as MuiPaginationProps } from '@mui/material';
|
|
|
3
3
|
import type { ReactNode } from 'react';
|
|
4
4
|
|
|
5
5
|
export interface PaginationProps extends Omit<MuiPaginationProps, 'variant' | 'size' | 'color'> {
|
|
6
|
+
/** The label in front of the page-size select. REQUIRED. */
|
|
7
|
+
pageSizeLabel: string;
|
|
6
8
|
/**
|
|
7
9
|
* The variant of the pagination
|
|
8
10
|
*/
|
|
@@ -20,6 +20,8 @@ const PageInfoContainer = styled(Box)(({ theme }) => ({
|
|
|
20
20
|
}));
|
|
21
21
|
|
|
22
22
|
export interface ItemsPerPageSelectProps {
|
|
23
|
+
/** The label in front of the select. REQUIRED — it was `"Show:"`. */
|
|
24
|
+
pageSizeLabel: string;
|
|
23
25
|
value: number;
|
|
24
26
|
options: number[];
|
|
25
27
|
size: string;
|
|
@@ -29,6 +31,7 @@ export interface ItemsPerPageSelectProps {
|
|
|
29
31
|
}
|
|
30
32
|
|
|
31
33
|
export const ItemsPerPageSelect: FC<ItemsPerPageSelectProps> = ({
|
|
34
|
+
pageSizeLabel,
|
|
32
35
|
value,
|
|
33
36
|
options,
|
|
34
37
|
size,
|
|
@@ -38,7 +41,7 @@ export const ItemsPerPageSelect: FC<ItemsPerPageSelectProps> = ({
|
|
|
38
41
|
}) => (
|
|
39
42
|
<ItemsPerPageContainer>
|
|
40
43
|
<Typography variant="body2" color="text.secondary">
|
|
41
|
-
|
|
44
|
+
{pageSizeLabel}
|
|
42
45
|
</Typography>
|
|
43
46
|
<FormControl size="small" sx={{ minWidth: 80 }}>
|
|
44
47
|
<Select
|
|
@@ -105,8 +105,9 @@ const buildTabsSx = ({
|
|
|
105
105
|
// A tab's label: icon, text, optional close affordance, optionally badged.
|
|
106
106
|
const TabLabel: React.FC<{
|
|
107
107
|
item: TabItem;
|
|
108
|
+
closeTabLabel: string;
|
|
108
109
|
onClose: (event: React.MouseEvent | React.KeyboardEvent, tabId: string) => void;
|
|
109
|
-
}> = ({ item, onClose }) => {
|
|
110
|
+
}> = ({ item, closeTabLabel, onClose }) => {
|
|
110
111
|
const content = (
|
|
111
112
|
<Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>
|
|
112
113
|
{item.icon}
|
|
@@ -116,7 +117,7 @@ const TabLabel: React.FC<{
|
|
|
116
117
|
onClick={(e) => onClose(e, item.id)}
|
|
117
118
|
role="button"
|
|
118
119
|
tabIndex={0}
|
|
119
|
-
aria-label=
|
|
120
|
+
aria-label={closeTabLabel}
|
|
120
121
|
onKeyDown={(e) => {
|
|
121
122
|
if (e.key !== 'Enter' && e.key !== ' ') return;
|
|
122
123
|
onClose(e, item.id);
|
|
@@ -176,7 +177,7 @@ const TabsBar: React.FC<
|
|
|
176
177
|
<MuiTab
|
|
177
178
|
key={item.id}
|
|
178
179
|
value={item.id}
|
|
179
|
-
label={<TabLabel item={item} onClose={onCloseTab} />}
|
|
180
|
+
label={<TabLabel closeTabLabel={p.closeTabLabel} item={item} onClose={onCloseTab} />}
|
|
180
181
|
disabled={item.disabled || p.disabled}
|
|
181
182
|
className={item.className}
|
|
182
183
|
id={`tab-${item.id}`}
|
|
@@ -224,6 +225,10 @@ export const Tabs = React.forwardRef<HTMLDivElement, TabsProps>(
|
|
|
224
225
|
(tabsProps, ref) => {
|
|
225
226
|
const resolved = { ...TABS_DEFAULTS, ...definedProps(tabsProps) } as TabsProps;
|
|
226
227
|
const {
|
|
228
|
+
// Destructured only to keep it OUT of `rest`, which is spread onto the
|
|
229
|
+
// DOM node — `{...resolved}` below is what actually carries it to
|
|
230
|
+
// `TabsBar`. Same reason as `value` on the next line.
|
|
231
|
+
closeTabLabel: _closeTabLabel,
|
|
227
232
|
value: _value,
|
|
228
233
|
onChange,
|
|
229
234
|
onTabClose,
|
|
@@ -50,6 +50,8 @@ export interface TabItem {
|
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
export interface TabsProps extends Omit<MuiTabsProps, 'variant' | 'children' | 'indicatorColor' | 'scrollButtons'> {
|
|
53
|
+
/** A closable tab's dismiss — a glyph with no visible label. REQUIRED. */
|
|
54
|
+
closeTabLabel: string;
|
|
53
55
|
/**
|
|
54
56
|
* The visual variant of the tabs
|
|
55
57
|
*/
|
|
@@ -12,19 +12,19 @@ const CENTERED = {
|
|
|
12
12
|
p: 2,
|
|
13
13
|
} as const;
|
|
14
14
|
|
|
15
|
-
export const DefaultLoader: React.FC = () => (
|
|
15
|
+
export const DefaultLoader: React.FC<{ loadingText: string }> = ({ loadingText }) => (
|
|
16
16
|
<Box sx={CENTERED}>
|
|
17
17
|
<CircularProgress size={24} />
|
|
18
18
|
<Typography variant="body2" sx={{ ml: 1 }}>
|
|
19
|
-
|
|
19
|
+
{loadingText}
|
|
20
20
|
</Typography>
|
|
21
21
|
</Box>
|
|
22
22
|
);
|
|
23
23
|
|
|
24
|
-
export const DefaultEndMessage: React.FC = () => (
|
|
24
|
+
export const DefaultEndMessage: React.FC<{ endText: string }> = ({ endText }) => (
|
|
25
25
|
<Box sx={CENTERED}>
|
|
26
26
|
<Typography variant="body2" color="text.secondary">
|
|
27
|
-
|
|
27
|
+
{endText}
|
|
28
28
|
</Typography>
|
|
29
29
|
</Box>
|
|
30
30
|
);
|
|
@@ -18,6 +18,8 @@ export const InfiniteScroll: React.FC<InfiniteScrollProps> = ({
|
|
|
18
18
|
threshold = 150,
|
|
19
19
|
loadMore,
|
|
20
20
|
loader,
|
|
21
|
+
loadingText,
|
|
22
|
+
endText,
|
|
21
23
|
endMessage,
|
|
22
24
|
error,
|
|
23
25
|
errorComponent,
|
|
@@ -45,9 +47,9 @@ export const InfiniteScroll: React.FC<InfiniteScrollProps> = ({
|
|
|
45
47
|
// The tail of the list is one of four things: the end message, an error, a
|
|
46
48
|
// spinner, or the sentinel that asks for the next page.
|
|
47
49
|
const renderSentinel = () => {
|
|
48
|
-
if (!hasMore) return endMessage || <DefaultEndMessage />;
|
|
50
|
+
if (!hasMore) return endMessage || <DefaultEndMessage endText={endText} />;
|
|
49
51
|
if (error) return errorComponent || <DefaultError error={error} />;
|
|
50
|
-
if (loading) return loader || <DefaultLoader />;
|
|
52
|
+
if (loading) return loader || <DefaultLoader loadingText={loadingText} />;
|
|
51
53
|
|
|
52
54
|
return (
|
|
53
55
|
<div
|
|
@@ -3,6 +3,12 @@ import type { ReactNode } from 'react';
|
|
|
3
3
|
export type InfiniteScrollVariant = 'default' | 'reverse' | 'horizontal';
|
|
4
4
|
|
|
5
5
|
export interface InfiniteScrollProps {
|
|
6
|
+
/**
|
|
7
|
+
* The two states the scroller renders on its own: fetching the next page,
|
|
8
|
+
* and having reached the end. REQUIRED — both were English literals.
|
|
9
|
+
*/
|
|
10
|
+
loadingText: string;
|
|
11
|
+
endText: string;
|
|
6
12
|
children: ReactNode;
|
|
7
13
|
variant?: InfiniteScrollVariant;
|
|
8
14
|
hasMore: boolean;
|
|
@@ -8,6 +8,7 @@ import React from 'react';
|
|
|
8
8
|
import { installPromptStyles } from './InstallPrompt.styles';
|
|
9
9
|
import type { InstallPlatform, InstallPromptProps } from './InstallPrompt.types';
|
|
10
10
|
import { usePwaInstall } from './usePwaInstall';
|
|
11
|
+
import type { InstallPromptCopy } from '../../../copy';
|
|
11
12
|
|
|
12
13
|
const StyledInstallPrompt = styled(Box)(({ theme }) => installPromptStyles(theme));
|
|
13
14
|
|
|
@@ -20,9 +21,10 @@ const testIdFor = (base: string | undefined, suffix: string) =>
|
|
|
20
21
|
* be a control that does nothing when pressed.
|
|
21
22
|
*/
|
|
22
23
|
const IosInstructions: React.FC<{
|
|
24
|
+
copy: InstallPromptCopy;
|
|
23
25
|
instructions?: React.ReactNode;
|
|
24
26
|
dataTestId?: string;
|
|
25
|
-
}> = ({ instructions, dataTestId }) => (
|
|
27
|
+
}> = ({ copy, instructions, dataTestId }) => (
|
|
26
28
|
<Typography
|
|
27
29
|
className="install-prompt-description"
|
|
28
30
|
variant="body2"
|
|
@@ -32,20 +34,22 @@ const IosInstructions: React.FC<{
|
|
|
32
34
|
>
|
|
33
35
|
{instructions ?? (
|
|
34
36
|
<>
|
|
35
|
-
|
|
37
|
+
{copy.iosTapBefore} <IosShare fontSize="small" aria-label={copy.shareLabel} />{' '}
|
|
38
|
+
{copy.iosTapAfter}
|
|
36
39
|
</>
|
|
37
40
|
)}
|
|
38
41
|
</Typography>
|
|
39
42
|
);
|
|
40
43
|
|
|
41
44
|
const InstallPromptBody: React.FC<{
|
|
45
|
+
copy: InstallPromptCopy;
|
|
42
46
|
icon?: React.ReactNode;
|
|
43
47
|
title: string;
|
|
44
48
|
description?: string;
|
|
45
49
|
iosInstructions?: React.ReactNode;
|
|
46
50
|
platform: InstallPlatform;
|
|
47
51
|
dataTestId?: string;
|
|
48
|
-
}> = ({ icon, title, description, iosInstructions, platform, dataTestId }) => (
|
|
52
|
+
}> = ({ copy, icon, title, description, iosInstructions, platform, dataTestId }) => (
|
|
49
53
|
<>
|
|
50
54
|
<Box className="install-prompt-icon" aria-hidden="true">
|
|
51
55
|
{icon ?? <InstallMobile />}
|
|
@@ -73,7 +77,7 @@ const InstallPromptBody: React.FC<{
|
|
|
73
77
|
)}
|
|
74
78
|
|
|
75
79
|
{platform === 'ios' && (
|
|
76
|
-
<IosInstructions instructions={iosInstructions} dataTestId={dataTestId} />
|
|
80
|
+
<IosInstructions copy={copy} instructions={iosInstructions} dataTestId={dataTestId} />
|
|
77
81
|
)}
|
|
78
82
|
</Box>
|
|
79
83
|
</>
|
|
@@ -118,17 +122,17 @@ const InstallPromptActions: React.FC<{
|
|
|
118
122
|
* browser with no install route at all — so it is safe to mount unconditionally
|
|
119
123
|
* in a layout rather than gating it at the call site.
|
|
120
124
|
*
|
|
121
|
-
*
|
|
122
|
-
* locale-neutral and the consuming app supplies its own wording.
|
|
125
|
+
* Every string is REQUIRED host config (`copy`): this package stays
|
|
126
|
+
* locale-neutral and the consuming app supplies its own wording. There is no
|
|
127
|
+
* English default to fall through to, so a missing word is a typecheck failure
|
|
128
|
+
* rather than an English sentence in a pt-BR store.
|
|
123
129
|
*/
|
|
124
130
|
export const InstallPrompt = React.forwardRef<HTMLDivElement, InstallPromptProps>(
|
|
125
131
|
(
|
|
126
132
|
{
|
|
127
|
-
|
|
133
|
+
copy,
|
|
128
134
|
description,
|
|
129
|
-
installLabel = 'Install',
|
|
130
135
|
iosInstructions,
|
|
131
|
-
dismissLabel = 'Dismiss install prompt',
|
|
132
136
|
icon,
|
|
133
137
|
onInstall,
|
|
134
138
|
onDismiss,
|
|
@@ -163,13 +167,14 @@ export const InstallPrompt = React.forwardRef<HTMLDivElement, InstallPromptProps
|
|
|
163
167
|
ref={ref}
|
|
164
168
|
className={className}
|
|
165
169
|
role="region"
|
|
166
|
-
aria-label={title}
|
|
170
|
+
aria-label={copy.title}
|
|
167
171
|
data-testid={dataTestId}
|
|
168
172
|
{...props}
|
|
169
173
|
>
|
|
170
174
|
<InstallPromptBody
|
|
171
175
|
icon={icon}
|
|
172
|
-
|
|
176
|
+
copy={copy}
|
|
177
|
+
title={copy.title}
|
|
173
178
|
description={description}
|
|
174
179
|
iosInstructions={iosInstructions}
|
|
175
180
|
platform={platform}
|
|
@@ -178,8 +183,8 @@ export const InstallPrompt = React.forwardRef<HTMLDivElement, InstallPromptProps
|
|
|
178
183
|
|
|
179
184
|
<InstallPromptActions
|
|
180
185
|
platform={platform}
|
|
181
|
-
installLabel={installLabel}
|
|
182
|
-
dismissLabel={dismissLabel}
|
|
186
|
+
installLabel={copy.installLabel}
|
|
187
|
+
dismissLabel={copy.dismissLabel}
|
|
183
188
|
onInstallClick={handleInstall}
|
|
184
189
|
onDismissClick={handleDismiss}
|
|
185
190
|
dataTestId={dataTestId}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
2
|
|
|
3
|
+
import type { InstallPromptCopy } from '../../../copy';
|
|
4
|
+
|
|
3
5
|
/**
|
|
4
6
|
* The Chromium-only event that makes a PWA installable from inside the page.
|
|
5
7
|
* It is NOT in TypeScript's DOM lib because it is not a standard: Safari and
|
|
@@ -70,16 +72,16 @@ export interface PwaInstallState {
|
|
|
70
72
|
}
|
|
71
73
|
|
|
72
74
|
export interface InstallPromptProps {
|
|
73
|
-
/**
|
|
74
|
-
|
|
75
|
+
/**
|
|
76
|
+
* Every word this prompt renders. REQUIRED: this package ships no default
|
|
77
|
+
* copy, and the iOS half is a GESTURE instruction — a shopper who cannot
|
|
78
|
+
* read it cannot install the app at all.
|
|
79
|
+
*/
|
|
80
|
+
copy: InstallPromptCopy;
|
|
75
81
|
/** Supporting line under the title. */
|
|
76
82
|
description?: string;
|
|
77
|
-
/**
|
|
78
|
-
installLabel?: string;
|
|
79
|
-
/** Replaces the built-in iOS Share → Add to Home Screen wording. */
|
|
83
|
+
/** Replaces the built-in iOS Share → Add to Home Screen wording outright. */
|
|
80
84
|
iosInstructions?: ReactNode;
|
|
81
|
-
/** Accessible label for the dismiss button. */
|
|
82
|
-
dismissLabel?: string;
|
|
83
85
|
/** Leading icon. Defaults to an install glyph. */
|
|
84
86
|
icon?: ReactNode;
|
|
85
87
|
/** Called with the outcome after the native prompt resolves. */
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The display family's words — the lightbox and map viewers, the carousel,
|
|
3
|
+
* the timing diagram, and the shared empty/error states.
|
|
4
|
+
*
|
|
5
|
+
* Split out of `copy.ts`, which is a barrel over this folder: one file
|
|
6
|
+
* listing every family is the file that grows on every port, and it stopped
|
|
7
|
+
* fitting the 400-line budget the rest of this package holds itself to.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* The lightbox's controls, every one of them a glyph with no text.
|
|
12
|
+
*
|
|
13
|
+
* So this object IS what a screen-reader user hears for the whole viewer —
|
|
14
|
+
* which is why it shipped as English literals for so long without anyone
|
|
15
|
+
* noticing: the sighted path renders identically either way.
|
|
16
|
+
*/
|
|
17
|
+
export interface LightboxCopy {
|
|
18
|
+
close: string;
|
|
19
|
+
previous: string;
|
|
20
|
+
next: string;
|
|
21
|
+
zoomIn: string;
|
|
22
|
+
zoomOut: string;
|
|
23
|
+
resetZoom: string;
|
|
24
|
+
/** The slideshow toggle, in its two states. */
|
|
25
|
+
play: string;
|
|
26
|
+
pause: string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** The map preview's control bar — same shape, same reason, as the lightbox. */
|
|
30
|
+
export interface MapPreviewCopy {
|
|
31
|
+
zoomIn: string;
|
|
32
|
+
zoomOut: string;
|
|
33
|
+
center: string;
|
|
34
|
+
mapType: string;
|
|
35
|
+
fullscreen: string;
|
|
36
|
+
search: string;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** The carousel's two arrows, which carry a glyph and nothing else. */
|
|
40
|
+
export interface CarouselCopy {
|
|
41
|
+
previous: string;
|
|
42
|
+
next: string;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** The request-timing diagram's own two strings. */
|
|
46
|
+
export interface TimingDiagramCopy {
|
|
47
|
+
regionLabel: string;
|
|
48
|
+
heading: string;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export interface DataStateCopy {
|
|
52
|
+
/** No rows at all — distinct from "no rows for these filters". */
|
|
53
|
+
empty: string;
|
|
54
|
+
loading: string;
|
|
55
|
+
/** The infinite scroller reached the end. */
|
|
56
|
+
endOfList: string;
|
|
57
|
+
/** An alert's and a banner's dismiss, neither of which has a visible label. */
|
|
58
|
+
dismissAlert: string;
|
|
59
|
+
dismissBanner: string;
|
|
60
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The feedback family's words — the tutorial overlay and the app chrome it
|
|
3
|
+
* points at.
|
|
4
|
+
*
|
|
5
|
+
* Split out of `copy.ts`, which is a barrel over this folder: one file
|
|
6
|
+
* listing every family is the file that grows on every port, and it stopped
|
|
7
|
+
* fitting the 400-line budget the rest of this package holds itself to.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* The states a data surface can be in with nothing to draw, and the dismiss
|
|
12
|
+
* every banner-like surface carries.
|
|
13
|
+
*
|
|
14
|
+
* One object rather than six, because these are the same four sentences the
|
|
15
|
+
* table, the grid, the async container, the hover card and the infinite
|
|
16
|
+
* scroller each rendered their own copy of.
|
|
17
|
+
*/
|
|
18
|
+
/** The guided tour's four controls, and the toast/modal chrome around it. */
|
|
19
|
+
export interface TutorialCopy {
|
|
20
|
+
skip: string;
|
|
21
|
+
previous: string;
|
|
22
|
+
next: string;
|
|
23
|
+
restart: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** Chrome that carries a glyph and no text, across several small surfaces. */
|
|
27
|
+
export interface ChromeCopy {
|
|
28
|
+
/** The toast's dismiss, and the stacked modal's step-back arrow. */
|
|
29
|
+
dismissToast: string;
|
|
30
|
+
goBack: string;
|
|
31
|
+
/** A dashboard panel's close, and a tab's. */
|
|
32
|
+
closePanel: string;
|
|
33
|
+
closeTab: string;
|
|
34
|
+
/** The scroll region itself, and the button that returns to its top. */
|
|
35
|
+
scrollRegion: string;
|
|
36
|
+
scrollToTop: string;
|
|
37
|
+
/** The share affordance in the install prompt. */
|
|
38
|
+
share: string;
|
|
39
|
+
}
|
package/src/copy/form.ts
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The form family's words. The largest group, and the one where the leak was
|
|
3
|
+
* least visible: half of these are tooltips and announcements that only a
|
|
4
|
+
* screen reader ever receives, so a language pass over the rendered text
|
|
5
|
+
* walked straight past them.
|
|
6
|
+
*
|
|
7
|
+
* Split out of `copy.ts`, which is a barrel over this folder: one file
|
|
8
|
+
* listing every family is the file that grows on every port, and it stopped
|
|
9
|
+
* fitting the 400-line budget the rest of this package holds itself to.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* The address field's three sentences. Two of them are about Google Maps
|
|
14
|
+
* failing to arrive — read by the shopper while the field is unusable, which
|
|
15
|
+
* is the worst moment to be spoken to in the wrong language.
|
|
16
|
+
*/
|
|
17
|
+
export interface AddressAutocompleteCopy {
|
|
18
|
+
/** Placeholder while the Maps script is still loading. */
|
|
19
|
+
loadingMaps: string;
|
|
20
|
+
/** The alert shown when the script never arrived. */
|
|
21
|
+
mapsLoadFailed: string;
|
|
22
|
+
/** The pin button's tooltip, which is also its accessible name. */
|
|
23
|
+
useCurrentLocation: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** What an `Autocomplete` renders that is not one of the host's own options. */
|
|
27
|
+
export interface AutocompleteCopy {
|
|
28
|
+
/** The two rows shown in place of options: fetching, and came back empty. */
|
|
29
|
+
loading: string;
|
|
30
|
+
noResults: string;
|
|
31
|
+
/** The input's own prompt, used when the host does not override it. */
|
|
32
|
+
placeholder: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The code editor's chrome. Every one of the four action buttons is a glyph
|
|
37
|
+
* whose tooltip IS its accessible name, so this object is the whole of what a
|
|
38
|
+
* screen reader reads out for the toolbar.
|
|
39
|
+
*/
|
|
40
|
+
export interface CodeEditorCopy {
|
|
41
|
+
/** Shown while the editor bundle is still arriving. */
|
|
42
|
+
loading: string;
|
|
43
|
+
/** The badge beside the language when the buffer cannot be edited. */
|
|
44
|
+
readOnly: string;
|
|
45
|
+
/** The format button's tooltip. Carries its own keyboard shortcut. */
|
|
46
|
+
formatCode: string;
|
|
47
|
+
/** The wrap toggle, in its two states. */
|
|
48
|
+
enableWrap: string;
|
|
49
|
+
disableWrap: string;
|
|
50
|
+
/** The copy button, before and after it has been pressed. */
|
|
51
|
+
copyToClipboard: string;
|
|
52
|
+
copied: string;
|
|
53
|
+
/** The fullscreen toggle, in its two states. */
|
|
54
|
+
enterFullscreen: string;
|
|
55
|
+
exitFullscreen: string;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** The five strength bands, weakest first. */
|
|
59
|
+
export interface PasswordStrengthBandCopy {
|
|
60
|
+
veryWeak: string;
|
|
61
|
+
weak: string;
|
|
62
|
+
fair: string;
|
|
63
|
+
good: string;
|
|
64
|
+
strong: string;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* One line per requirement. `minLength` takes the configured count because the
|
|
69
|
+
* number is part of the sentence, and a language may not put it where English
|
|
70
|
+
* does.
|
|
71
|
+
*/
|
|
72
|
+
export interface PasswordRequirementCopy {
|
|
73
|
+
minLength(count: number): string;
|
|
74
|
+
uppercase: string;
|
|
75
|
+
lowercase: string;
|
|
76
|
+
numbers: string;
|
|
77
|
+
special: string;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** Everything the password meter renders. */
|
|
81
|
+
export interface PasswordStrengthCopy {
|
|
82
|
+
/** The three headings: the meter, the checklist, the tips. */
|
|
83
|
+
strengthHeading: string;
|
|
84
|
+
requirementsHeading: string;
|
|
85
|
+
suggestionsHeading: string;
|
|
86
|
+
bands: PasswordStrengthBandCopy;
|
|
87
|
+
/** The checklist rows, and the tip shown for each unmet one. */
|
|
88
|
+
requirements: PasswordRequirementCopy;
|
|
89
|
+
suggestions: PasswordRequirementCopy;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* The rich-text toolbar. Ten glyph buttons, every one of them named ONLY by
|
|
94
|
+
* its tooltip — so this object is the whole of what a screen reader reads out
|
|
95
|
+
* for the editor's controls.
|
|
96
|
+
*/
|
|
97
|
+
export interface RichEditorToolbarCopy {
|
|
98
|
+
bold: string;
|
|
99
|
+
italic: string;
|
|
100
|
+
underline: string;
|
|
101
|
+
bulletList: string;
|
|
102
|
+
numberedList: string;
|
|
103
|
+
quote: string;
|
|
104
|
+
code: string;
|
|
105
|
+
insertLink: string;
|
|
106
|
+
textColor: string;
|
|
107
|
+
backgroundColor: string;
|
|
108
|
+
/** The browser prompt the link button opens, asking for the URL. */
|
|
109
|
+
linkPrompt: string;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* What the phone field says on its own account. The picker's name is the whole
|
|
114
|
+
* of what a screen reader gets for a control rendered as a flag and a dial
|
|
115
|
+
* code, and the invalid sentence is read by the shopper at the checkout.
|
|
116
|
+
*/
|
|
117
|
+
export interface PhoneInputCopy {
|
|
118
|
+
/** The country picker's accessible name. */
|
|
119
|
+
selectCountry: string;
|
|
120
|
+
/**
|
|
121
|
+
* The number does not validate for the chosen country. Takes the country's
|
|
122
|
+
* own name, because a language may not place it where English does.
|
|
123
|
+
*/
|
|
124
|
+
invalidNumber(countryName: string): string;
|
|
125
|
+
/** Stands in for the country's name before one has been resolved. */
|
|
126
|
+
unknownCountry: string;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* What the upload control says beyond the host's own button label. Three of
|
|
131
|
+
* the four are announcements a screen reader reads and nothing renders — which
|
|
132
|
+
* is why they stayed English through every language pass.
|
|
133
|
+
*/
|
|
134
|
+
export interface UploadButtonCopy {
|
|
135
|
+
/** The control's own label, used when the host does not override it. */
|
|
136
|
+
buttonLabel: string;
|
|
137
|
+
/** The dropzone's second line, under the host's own label. */
|
|
138
|
+
dropzoneHint: string;
|
|
139
|
+
/**
|
|
140
|
+
* The dropzone's accessible name, which prefixes the host's label — it says
|
|
141
|
+
* what KIND of control this is before saying what it uploads.
|
|
142
|
+
*/
|
|
143
|
+
dropzoneRole(label: string): string;
|
|
144
|
+
/** The button's label while an upload is in flight. */
|
|
145
|
+
uploading: string;
|
|
146
|
+
/** Announced when a dragged file is over the zone and would be accepted. */
|
|
147
|
+
dropReady: string;
|
|
148
|
+
/** The caption under the progress bar. */
|
|
149
|
+
percentUploaded(percent: number): string;
|
|
150
|
+
/** The same progress, announced rather than shown. */
|
|
151
|
+
uploadInProgress(percent: number): string;
|
|
152
|
+
/** The component's own error, announced. Takes the message it wraps. */
|
|
153
|
+
errorAnnouncement(message: string): string;
|
|
154
|
+
}
|