@jobber/components 9.3.0 → 9.4.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.
Files changed (42) hide show
  1. package/dist/DataDump/DataDump.d.ts +1 -1
  2. package/dist/DataDump/DataDump.messages.d.ts +6 -0
  3. package/dist/DataDump/index.cjs +2 -2
  4. package/dist/DataDump/index.mjs +2 -2
  5. package/dist/DataDump-cjs.js +11 -1
  6. package/dist/DataDump-es.js +11 -1
  7. package/dist/DataTable/DataTable.messages.d.ts +22 -0
  8. package/dist/DataTable/index.cjs +2 -2
  9. package/dist/DataTable/index.mjs +2 -2
  10. package/dist/DataTable-cjs.js +34 -5
  11. package/dist/DataTable-es.js +34 -5
  12. package/dist/FeatureSwitch/FeatureSwitch.messages.d.ts +10 -0
  13. package/dist/FeatureSwitch/index.cjs +2 -0
  14. package/dist/FeatureSwitch/index.mjs +2 -0
  15. package/dist/FeatureSwitch-cjs.js +15 -2
  16. package/dist/FeatureSwitch-es.js +15 -2
  17. package/dist/FormatFile/FormatFile.messages.d.ts +18 -0
  18. package/dist/FormatFile/index.cjs +2 -2
  19. package/dist/FormatFile/index.mjs +2 -2
  20. package/dist/FormatFile-cjs.js +24 -2
  21. package/dist/FormatFile-es.js +24 -2
  22. package/dist/Menu-cjs.js +1 -0
  23. package/dist/Menu-es.js +1 -1
  24. package/dist/Page/index.cjs +12 -12
  25. package/dist/Page/index.mjs +12 -12
  26. package/dist/Page-cjs.js +6 -3
  27. package/dist/Page-es.js +6 -3
  28. package/dist/ProgressBar/ProgressBar.messages.d.ts +6 -0
  29. package/dist/ProgressBar/index.cjs +2 -0
  30. package/dist/ProgressBar/index.mjs +2 -0
  31. package/dist/ProgressBar-cjs.js +13 -1
  32. package/dist/ProgressBar-es.js +13 -1
  33. package/dist/Toast/Toast.messages.d.ts +6 -0
  34. package/dist/Toast/index.cjs +3 -1
  35. package/dist/Toast/index.mjs +3 -1
  36. package/dist/Toast/showToast.d.ts +12 -1
  37. package/dist/docs/DataDump/DataDump.md +1 -1
  38. package/dist/docs/Page/Page.md +1 -1
  39. package/dist/sharedHelpers/i18n/renderWithLocale.d.ts +11 -0
  40. package/dist/showToast-cjs.js +20 -6
  41. package/dist/showToast-es.js +20 -6
  42. package/package.json +2 -2
@@ -17,5 +17,5 @@ interface DataDebuggerProps {
17
17
  */
18
18
  readonly data: unknown;
19
19
  }
20
- export declare function DataDump({ label, defaultOpen, data, }: DataDebuggerProps): React.JSX.Element;
20
+ export declare function DataDump({ label: labelProp, defaultOpen, data, }: DataDebuggerProps): React.JSX.Element;
21
21
  export {};
@@ -0,0 +1,6 @@
1
+ export declare const dataDumpMessages: {
2
+ rawData: {
3
+ en: string;
4
+ es: string;
5
+ };
6
+ };
@@ -2,6 +2,8 @@
2
2
 
3
3
  var DataDump = require('../DataDump-cjs.js');
4
4
  require('react');
5
+ require('../useAtlantisI18n-cjs.js');
6
+ require('../AtlantisContext-cjs.js');
5
7
  require('../Card-cjs.js');
6
8
  require('classnames');
7
9
  require('../Heading-cjs.js');
@@ -20,8 +22,6 @@ require('../floating-ui.utils-cjs.js');
20
22
  require('react/jsx-runtime');
21
23
  require('react-dom');
22
24
  require('../floating-ui.react-dom-cjs.js');
23
- require('../useAtlantisI18n-cjs.js');
24
- require('../AtlantisContext-cjs.js');
25
25
  require('../useFormFieldFocus-cjs.js');
26
26
  require('../maxHeight-cjs.js');
27
27
  require('../useRenderElement-cjs.js');
@@ -1,5 +1,7 @@
1
1
  export { D as DataDump } from '../DataDump-es.js';
2
2
  import 'react';
3
+ import '../useAtlantisI18n-es.js';
4
+ import '../AtlantisContext-es.js';
3
5
  import '../Card-es.js';
4
6
  import 'classnames';
5
7
  import '../Heading-es.js';
@@ -18,8 +20,6 @@ import '../floating-ui.utils-es.js';
18
20
  import 'react/jsx-runtime';
19
21
  import 'react-dom';
20
22
  import '../floating-ui.react-dom-es.js';
21
- import '../useAtlantisI18n-es.js';
22
- import '../AtlantisContext-es.js';
23
23
  import '../useFormFieldFocus-es.js';
24
24
  import '../maxHeight-es.js';
25
25
  import '../useRenderElement-es.js';
@@ -1,11 +1,21 @@
1
1
  'use strict';
2
2
 
3
3
  var React = require('react');
4
+ var useAtlantisI18n = require('./useAtlantisI18n-cjs.js');
4
5
  var Card = require('./Card-cjs.js');
5
6
  var Content = require('./Content-cjs.js');
6
7
  var Emphasis = require('./Emphasis-cjs.js');
7
8
 
8
- function DataDump({ label = "Raw Data", defaultOpen = false, data, }) {
9
+ const dataDumpMessages = useAtlantisI18n.defineMessages({
10
+ rawData: {
11
+ en: "Raw Data",
12
+ es: "Datos en bruto",
13
+ },
14
+ });
15
+
16
+ function DataDump({ label: labelProp, defaultOpen = false, data, }) {
17
+ const { t } = useAtlantisI18n.useAtlantisI18n(dataDumpMessages);
18
+ const label = labelProp !== null && labelProp !== void 0 ? labelProp : t("rawData");
9
19
  return (React.createElement(Card.Card, { accent: "yellow" },
10
20
  React.createElement(Content.Content, null,
11
21
  React.createElement("details", { open: defaultOpen },
@@ -1,9 +1,19 @@
1
1
  import React__default from 'react';
2
+ import { d as defineMessages, u as useAtlantisI18n } from './useAtlantisI18n-es.js';
2
3
  import { C as Card } from './Card-es.js';
3
4
  import { C as Content } from './Content-es.js';
4
5
  import { E as Emphasis } from './Emphasis-es.js';
5
6
 
6
- function DataDump({ label = "Raw Data", defaultOpen = false, data, }) {
7
+ const dataDumpMessages = defineMessages({
8
+ rawData: {
9
+ en: "Raw Data",
10
+ es: "Datos en bruto",
11
+ },
12
+ });
13
+
14
+ function DataDump({ label: labelProp, defaultOpen = false, data, }) {
15
+ const { t } = useAtlantisI18n(dataDumpMessages);
16
+ const label = labelProp !== null && labelProp !== void 0 ? labelProp : t("rawData");
7
17
  return (React__default.createElement(Card, { accent: "yellow" },
8
18
  React__default.createElement(Content, null,
9
19
  React__default.createElement("details", { open: defaultOpen },
@@ -0,0 +1,22 @@
1
+ export declare const dataTableMessages: {
2
+ noItems: {
3
+ en: string;
4
+ es: string;
5
+ };
6
+ "Showing {first}-{last} of {total} items": {
7
+ en: string;
8
+ es: string;
9
+ };
10
+ perPage: {
11
+ en: string;
12
+ es: string;
13
+ };
14
+ previousPage: {
15
+ en: string;
16
+ es: string;
17
+ };
18
+ nextPage: {
19
+ en: string;
20
+ es: string;
21
+ };
22
+ };
@@ -10,6 +10,8 @@ require('@jobber/hooks');
10
10
  require('../Glimmer-cjs.js');
11
11
  require('../tslib.es6-cjs.js');
12
12
  require('../Content-cjs.js');
13
+ require('../useAtlantisI18n-cjs.js');
14
+ require('../AtlantisContext-cjs.js');
13
15
  require('../LegacySelect-cjs.js');
14
16
  require('../useAtlantisFormFieldName-cjs.js');
15
17
  require('../FormFieldWrapper-cjs.js');
@@ -20,8 +22,6 @@ require('react-router-dom');
20
22
  require('../Icon-cjs.js');
21
23
  require('../Typography-cjs.js');
22
24
  require('../Text-cjs.js');
23
- require('../useAtlantisI18n-cjs.js');
24
- require('../AtlantisContext-cjs.js');
25
25
  require('../useFormFieldFocus-cjs.js');
26
26
  require('../InputValidation-cjs.js');
27
27
  require('../FormFieldPostFix-cjs.js');
@@ -8,6 +8,8 @@ import '@jobber/hooks';
8
8
  import '../Glimmer-es.js';
9
9
  import '../tslib.es6-es.js';
10
10
  import '../Content-es.js';
11
+ import '../useAtlantisI18n-es.js';
12
+ import '../AtlantisContext-es.js';
11
13
  import '../LegacySelect-es.js';
12
14
  import '../useAtlantisFormFieldName-es.js';
13
15
  import '../FormFieldWrapper-es.js';
@@ -18,8 +20,6 @@ import 'react-router-dom';
18
20
  import '../Icon-es.js';
19
21
  import '../Typography-es.js';
20
22
  import '../Text-es.js';
21
- import '../useAtlantisI18n-es.js';
22
- import '../AtlantisContext-es.js';
23
23
  import '../useFormFieldFocus-es.js';
24
24
  import '../InputValidation-es.js';
25
25
  import '../FormFieldPostFix-es.js';
@@ -6,6 +6,7 @@ var React = require('react');
6
6
  var jobberHooks = require('@jobber/hooks');
7
7
  var Glimmer = require('./Glimmer-cjs.js');
8
8
  var tslib_es6 = require('./tslib.es6-cjs.js');
9
+ var useAtlantisI18n = require('./useAtlantisI18n-cjs.js');
9
10
  var LegacySelect = require('./LegacySelect-cjs.js');
10
11
  var Button = require('./Button-cjs.js');
11
12
  var Text = require('./Text-cjs.js');
@@ -99,28 +100,56 @@ function getSortingSettings(sorting) {
99
100
 
100
101
  var styles$1 = {"pagination":"_5TLZRabskzI-","paginationInfo":"k8VFFgHUPZ4-","paginationNav":"SfaHBP7KC3Y-","paginationSelect":"E4zFf5oEm-Y-","paginationSelectLabel":"N4LhT5occ94-","paginationButtons":"HQPsyRjssL0-","spinning":"YHT2Mg0618I-"};
101
102
 
103
+ const dataTableMessages = useAtlantisI18n.defineMessages({
104
+ noItems: {
105
+ en: "No items",
106
+ es: "Sin elementos",
107
+ },
108
+ "Showing {first}-{last} of {total} items": {
109
+ en: "Showing {first}-{last} of {total} items",
110
+ es: "Mostrando {first}-{last} de {total} elementos",
111
+ },
112
+ perPage: {
113
+ en: "per page",
114
+ es: "por página",
115
+ },
116
+ previousPage: {
117
+ en: "Previous page",
118
+ es: "Página anterior",
119
+ },
120
+ nextPage: {
121
+ en: "Next page",
122
+ es: "Página siguiente",
123
+ },
124
+ });
125
+
102
126
  const defaultItemsPerPageOptions = ["10", "20", "30", "40", "50"];
103
127
  function Pagination({ table, itemsPerPage, totalItems, loading, onPageChange, }) {
128
+ const { t } = useAtlantisI18n.useAtlantisI18n(dataTableMessages);
104
129
  const { pageIndex, pageSize } = table.getState().pagination;
105
130
  const totalRows = totalItems;
106
131
  const firstPosition = pageIndex * pageSize + 1;
107
132
  const secondPosition = Math.min(totalRows, pageSize * (pageIndex + 1));
108
133
  const itemsPerPageOptions = React.useMemo(() => { var _a; return (_a = itemsPerPage === null || itemsPerPage === void 0 ? void 0 : itemsPerPage.map(item => String(item))) !== null && _a !== void 0 ? _a : defaultItemsPerPageOptions; }, [itemsPerPage]);
109
134
  return secondPosition <= 0 ? (React.createElement("div", { className: styles$1.pagination },
110
- React.createElement("div", { className: styles$1.paginationInfo }, !loading ? React.createElement(Text.Text, null, "No items") : React.createElement(Glimmer.Glimmer, { width: 200 })))) : (React.createElement("div", { className: styles$1.pagination },
111
- React.createElement("div", { className: styles$1.paginationInfo }, `Showing ${firstPosition}-${secondPosition} of ${totalRows} items`),
135
+ React.createElement("div", { className: styles$1.paginationInfo }, !loading ? React.createElement(Text.Text, null, t("noItems")) : React.createElement(Glimmer.Glimmer, { width: 200 })))) : (React.createElement("div", { className: styles$1.pagination },
136
+ React.createElement("div", { className: styles$1.paginationInfo }, t("Showing {first}-{last} of {total} items", {
137
+ first: firstPosition,
138
+ last: secondPosition,
139
+ total: totalRows,
140
+ })),
112
141
  React.createElement("div", { className: styles$1.paginationNav },
113
142
  React.createElement("div", { className: styles$1.paginationSelect },
114
143
  React.createElement(LegacySelect.LegacySelect, { value: table.getState().pagination.pageSize, onChange: value => {
115
144
  table.setPageSize(Number(value));
116
145
  }, size: "small" }, itemsPerPageOptions.map(numOfPages => (React.createElement(LegacySelect.SelectOption, { key: numOfPages, value: numOfPages }, numOfPages)))),
117
- React.createElement("span", { className: styles$1.paginationSelectLabel }, "per page")),
146
+ React.createElement("span", { className: styles$1.paginationSelectLabel }, t("perPage"))),
118
147
  React.createElement("div", { className: styles$1.paginationButtons },
119
- React.createElement(Button.Button, { type: "secondary", variation: "subtle", icon: "arrowLeft", ariaLabel: "arrowLeft", onClick: () => {
148
+ React.createElement(Button.Button, { type: "secondary", variation: "subtle", icon: "arrowLeft", ariaLabel: t("previousPage"), onClick: () => {
120
149
  table.previousPage();
121
150
  onPageChange();
122
151
  }, disabled: !table.getCanPreviousPage() }),
123
- React.createElement(Button.Button, { type: "secondary", variation: "subtle", icon: "arrowRight", ariaLabel: "arrowRight", onClick: () => {
152
+ React.createElement(Button.Button, { type: "secondary", variation: "subtle", icon: "arrowRight", ariaLabel: t("nextPage"), onClick: () => {
124
153
  table.nextPage();
125
154
  onPageChange();
126
155
  }, disabled: !table.getCanNextPage() })))));
@@ -4,6 +4,7 @@ import React__default, { useCallback, useMemo } from 'react';
4
4
  import { useResizeObserver, Breakpoints } from '@jobber/hooks';
5
5
  import { G as Glimmer } from './Glimmer-es.js';
6
6
  import { _ as __rest } from './tslib.es6-es.js';
7
+ import { d as defineMessages, u as useAtlantisI18n } from './useAtlantisI18n-es.js';
7
8
  import { L as LegacySelect, S as SelectOption } from './LegacySelect-es.js';
8
9
  import { B as Button } from './Button-es.js';
9
10
  import { T as Text } from './Text-es.js';
@@ -97,28 +98,56 @@ function getSortingSettings(sorting) {
97
98
 
98
99
  var styles$1 = {"pagination":"_5TLZRabskzI-","paginationInfo":"k8VFFgHUPZ4-","paginationNav":"SfaHBP7KC3Y-","paginationSelect":"E4zFf5oEm-Y-","paginationSelectLabel":"N4LhT5occ94-","paginationButtons":"HQPsyRjssL0-","spinning":"YHT2Mg0618I-"};
99
100
 
101
+ const dataTableMessages = defineMessages({
102
+ noItems: {
103
+ en: "No items",
104
+ es: "Sin elementos",
105
+ },
106
+ "Showing {first}-{last} of {total} items": {
107
+ en: "Showing {first}-{last} of {total} items",
108
+ es: "Mostrando {first}-{last} de {total} elementos",
109
+ },
110
+ perPage: {
111
+ en: "per page",
112
+ es: "por página",
113
+ },
114
+ previousPage: {
115
+ en: "Previous page",
116
+ es: "Página anterior",
117
+ },
118
+ nextPage: {
119
+ en: "Next page",
120
+ es: "Página siguiente",
121
+ },
122
+ });
123
+
100
124
  const defaultItemsPerPageOptions = ["10", "20", "30", "40", "50"];
101
125
  function Pagination({ table, itemsPerPage, totalItems, loading, onPageChange, }) {
126
+ const { t } = useAtlantisI18n(dataTableMessages);
102
127
  const { pageIndex, pageSize } = table.getState().pagination;
103
128
  const totalRows = totalItems;
104
129
  const firstPosition = pageIndex * pageSize + 1;
105
130
  const secondPosition = Math.min(totalRows, pageSize * (pageIndex + 1));
106
131
  const itemsPerPageOptions = useMemo(() => { var _a; return (_a = itemsPerPage === null || itemsPerPage === void 0 ? void 0 : itemsPerPage.map(item => String(item))) !== null && _a !== void 0 ? _a : defaultItemsPerPageOptions; }, [itemsPerPage]);
107
132
  return secondPosition <= 0 ? (React__default.createElement("div", { className: styles$1.pagination },
108
- React__default.createElement("div", { className: styles$1.paginationInfo }, !loading ? React__default.createElement(Text, null, "No items") : React__default.createElement(Glimmer, { width: 200 })))) : (React__default.createElement("div", { className: styles$1.pagination },
109
- React__default.createElement("div", { className: styles$1.paginationInfo }, `Showing ${firstPosition}-${secondPosition} of ${totalRows} items`),
133
+ React__default.createElement("div", { className: styles$1.paginationInfo }, !loading ? React__default.createElement(Text, null, t("noItems")) : React__default.createElement(Glimmer, { width: 200 })))) : (React__default.createElement("div", { className: styles$1.pagination },
134
+ React__default.createElement("div", { className: styles$1.paginationInfo }, t("Showing {first}-{last} of {total} items", {
135
+ first: firstPosition,
136
+ last: secondPosition,
137
+ total: totalRows,
138
+ })),
110
139
  React__default.createElement("div", { className: styles$1.paginationNav },
111
140
  React__default.createElement("div", { className: styles$1.paginationSelect },
112
141
  React__default.createElement(LegacySelect, { value: table.getState().pagination.pageSize, onChange: value => {
113
142
  table.setPageSize(Number(value));
114
143
  }, size: "small" }, itemsPerPageOptions.map(numOfPages => (React__default.createElement(SelectOption, { key: numOfPages, value: numOfPages }, numOfPages)))),
115
- React__default.createElement("span", { className: styles$1.paginationSelectLabel }, "per page")),
144
+ React__default.createElement("span", { className: styles$1.paginationSelectLabel }, t("perPage"))),
116
145
  React__default.createElement("div", { className: styles$1.paginationButtons },
117
- React__default.createElement(Button, { type: "secondary", variation: "subtle", icon: "arrowLeft", ariaLabel: "arrowLeft", onClick: () => {
146
+ React__default.createElement(Button, { type: "secondary", variation: "subtle", icon: "arrowLeft", ariaLabel: t("previousPage"), onClick: () => {
118
147
  table.previousPage();
119
148
  onPageChange();
120
149
  }, disabled: !table.getCanPreviousPage() }),
121
- React__default.createElement(Button, { type: "secondary", variation: "subtle", icon: "arrowRight", ariaLabel: "arrowRight", onClick: () => {
150
+ React__default.createElement(Button, { type: "secondary", variation: "subtle", icon: "arrowRight", ariaLabel: t("nextPage"), onClick: () => {
122
151
  table.nextPage();
123
152
  onPageChange();
124
153
  }, disabled: !table.getCanNextPage() })))));
@@ -0,0 +1,10 @@
1
+ export declare const featureSwitchMessages: {
2
+ edit: {
3
+ en: string;
4
+ es: string;
5
+ };
6
+ saved: {
7
+ en: string;
8
+ es: string;
9
+ };
10
+ };
@@ -4,6 +4,8 @@ var FeatureSwitch = require('../FeatureSwitch-cjs.js');
4
4
  require('react');
5
5
  require('framer-motion');
6
6
  require('classnames');
7
+ require('../useAtlantisI18n-cjs.js');
8
+ require('../AtlantisContext-cjs.js');
7
9
  require('../Heading-cjs.js');
8
10
  require('../Typography-cjs.js');
9
11
  require('../Text-cjs.js');
@@ -2,6 +2,8 @@ export { F as FeatureSwitch } from '../FeatureSwitch-es.js';
2
2
  import 'react';
3
3
  import 'framer-motion';
4
4
  import 'classnames';
5
+ import '../useAtlantisI18n-es.js';
6
+ import '../AtlantisContext-es.js';
5
7
  import '../Heading-es.js';
6
8
  import '../Typography-es.js';
7
9
  import '../Text-es.js';
@@ -3,6 +3,7 @@
3
3
  var React = require('react');
4
4
  var framerMotion = require('framer-motion');
5
5
  var classnames = require('classnames');
6
+ var useAtlantisI18n = require('./useAtlantisI18n-cjs.js');
6
7
  var Heading = require('./Heading-cjs.js');
7
8
  var Text = require('./Text-cjs.js');
8
9
  var Content = require('./Content-cjs.js');
@@ -13,7 +14,19 @@ var Markdown = require('./Markdown-cjs.js');
13
14
 
14
15
  var styles = {"container":"o-b2tWQIZvw-","content":"NZtPT-dXFeQ-","action":"tDW-yhISuqQ-","savedIndicator":"Y-aeIDV1dL4-","featureContent":"iXr88Nr7vpk-","enabled":"GSDyu-sASro-","spinning":"gzT5ooqpZG4-"};
15
16
 
17
+ const featureSwitchMessages = useAtlantisI18n.defineMessages({
18
+ edit: {
19
+ en: "Edit",
20
+ es: "Editar",
21
+ },
22
+ saved: {
23
+ en: "Saved",
24
+ es: "Guardado",
25
+ },
26
+ });
27
+
16
28
  function FeatureSwitch({ children, description, disabled = false, enabled, externalLink = false, onEdit, onSwitch, hasSaveIndicator = false, title, }) {
29
+ const { t } = useAtlantisI18n.useAtlantisI18n(featureSwitchMessages);
17
30
  const [savedIndicator, setSavedIndicator] = React.useState(false);
18
31
  const featureContentClassnames = classnames(styles.featureContent, styles.content, enabled && styles.enabled);
19
32
  shouldShowSavedIndicator();
@@ -33,11 +46,11 @@ function FeatureSwitch({ children, description, disabled = false, enabled, exter
33
46
  stiffness: 300,
34
47
  }, onAnimationComplete: handleAnimationComplete },
35
48
  React.createElement(Text.Text, { variation: "success" },
36
- React.createElement(Emphasis.Emphasis, { variation: "italic" }, "Saved")))))))),
49
+ React.createElement(Emphasis.Emphasis, { variation: "italic" }, t("saved"))))))))),
37
50
  (children || onEdit) && (React.createElement("div", { className: styles.container },
38
51
  children && (React.createElement("div", { className: featureContentClassnames }, children)),
39
52
  onEdit && (React.createElement("div", { className: styles.action },
40
- React.createElement(Button.Button, { label: "Edit", type: "tertiary", onClick: onEdit })))))));
53
+ React.createElement(Button.Button, { label: t("edit"), type: "tertiary", onClick: onEdit })))))));
41
54
  function shouldShowSavedIndicator() {
42
55
  // Check if the component is mounted
43
56
  const [didMount, setDidMount] = React.useState(false);
@@ -1,6 +1,7 @@
1
1
  import React__default, { useState, useEffect } from 'react';
2
2
  import { AnimatePresence, motion } from 'framer-motion';
3
3
  import classnames from 'classnames';
4
+ import { d as defineMessages, u as useAtlantisI18n } from './useAtlantisI18n-es.js';
4
5
  import { H as Heading } from './Heading-es.js';
5
6
  import { T as Text } from './Text-es.js';
6
7
  import { C as Content } from './Content-es.js';
@@ -11,7 +12,19 @@ import { M as Markdown } from './Markdown-es.js';
11
12
 
12
13
  var styles = {"container":"o-b2tWQIZvw-","content":"NZtPT-dXFeQ-","action":"tDW-yhISuqQ-","savedIndicator":"Y-aeIDV1dL4-","featureContent":"iXr88Nr7vpk-","enabled":"GSDyu-sASro-","spinning":"gzT5ooqpZG4-"};
13
14
 
15
+ const featureSwitchMessages = defineMessages({
16
+ edit: {
17
+ en: "Edit",
18
+ es: "Editar",
19
+ },
20
+ saved: {
21
+ en: "Saved",
22
+ es: "Guardado",
23
+ },
24
+ });
25
+
14
26
  function FeatureSwitch({ children, description, disabled = false, enabled, externalLink = false, onEdit, onSwitch, hasSaveIndicator = false, title, }) {
27
+ const { t } = useAtlantisI18n(featureSwitchMessages);
15
28
  const [savedIndicator, setSavedIndicator] = useState(false);
16
29
  const featureContentClassnames = classnames(styles.featureContent, styles.content, enabled && styles.enabled);
17
30
  shouldShowSavedIndicator();
@@ -31,11 +44,11 @@ function FeatureSwitch({ children, description, disabled = false, enabled, exter
31
44
  stiffness: 300,
32
45
  }, onAnimationComplete: handleAnimationComplete },
33
46
  React__default.createElement(Text, { variation: "success" },
34
- React__default.createElement(Emphasis, { variation: "italic" }, "Saved")))))))),
47
+ React__default.createElement(Emphasis, { variation: "italic" }, t("saved"))))))))),
35
48
  (children || onEdit) && (React__default.createElement("div", { className: styles.container },
36
49
  children && (React__default.createElement("div", { className: featureContentClassnames }, children)),
37
50
  onEdit && (React__default.createElement("div", { className: styles.action },
38
- React__default.createElement(Button, { label: "Edit", type: "tertiary", onClick: onEdit })))))));
51
+ React__default.createElement(Button, { label: t("edit"), type: "tertiary", onClick: onEdit })))))));
39
52
  function shouldShowSavedIndicator() {
40
53
  // Check if the component is mounted
41
54
  const [didMount, setDidMount] = useState(false);
@@ -0,0 +1,18 @@
1
+ export declare const formatFileMessages: {
2
+ deleteFile: {
3
+ en: string;
4
+ es: string;
5
+ };
6
+ confirmDeletion: {
7
+ en: string;
8
+ es: string;
9
+ };
10
+ confirmDeletionMessage: {
11
+ en: string;
12
+ es: string;
13
+ };
14
+ delete: {
15
+ en: string;
16
+ es: string;
17
+ };
18
+ };
@@ -4,6 +4,8 @@ var FormatFile = require('../FormatFile-cjs.js');
4
4
  require('react');
5
5
  require('filesize');
6
6
  require('classnames');
7
+ require('../useAtlantisI18n-cjs.js');
8
+ require('../AtlantisContext-cjs.js');
7
9
  require('../Thumbnail-cjs.js');
8
10
  require('../Glimmer-cjs.js');
9
11
  require('../tslib.es6-cjs.js');
@@ -21,8 +23,6 @@ require('../Modal/index.cjs');
21
23
  require('react-dom');
22
24
  require('framer-motion');
23
25
  require('../nestedEscape-cjs.js');
24
- require('../useAtlantisI18n-cjs.js');
25
- require('../AtlantisContext-cjs.js');
26
26
  require('../Heading-cjs.js');
27
27
  require('../ButtonDismiss-cjs.js');
28
28
  require('../noop-cjs.js');
@@ -2,6 +2,8 @@ export { F as FormatFile, u as useFormatFile, a as useFormatFileStyles } from '.
2
2
  import 'react';
3
3
  import 'filesize';
4
4
  import 'classnames';
5
+ import '../useAtlantisI18n-es.js';
6
+ import '../AtlantisContext-es.js';
5
7
  import '../Thumbnail-es.js';
6
8
  import '../Glimmer-es.js';
7
9
  import '../tslib.es6-es.js';
@@ -19,8 +21,6 @@ import '../Modal/index.mjs';
19
21
  import 'react-dom';
20
22
  import 'framer-motion';
21
23
  import '../nestedEscape-es.js';
22
- import '../useAtlantisI18n-es.js';
23
- import '../AtlantisContext-es.js';
24
24
  import '../Heading-es.js';
25
25
  import '../ButtonDismiss-es.js';
26
26
  import '../noop-es.js';
@@ -3,6 +3,7 @@
3
3
  var React = require('react');
4
4
  var getHumanReadableFileSize = require('filesize');
5
5
  var classnames = require('classnames');
6
+ var useAtlantisI18n = require('./useAtlantisI18n-cjs.js');
6
7
  var Thumbnail = require('./Thumbnail-cjs.js');
7
8
  var Text = require('./Text-cjs.js');
8
9
  var ProgressBar = require('./ProgressBar-cjs.js');
@@ -49,8 +50,28 @@ function isHoverable({ display, isComplete, onClick, onDelete, }) {
49
50
  return false;
50
51
  }
51
52
 
53
+ const formatFileMessages = useAtlantisI18n.defineMessages({
54
+ deleteFile: {
55
+ en: "Delete File",
56
+ es: "Eliminar archivo",
57
+ },
58
+ confirmDeletion: {
59
+ en: "Confirm Deletion",
60
+ es: "Confirmar eliminación",
61
+ },
62
+ confirmDeletionMessage: {
63
+ en: "Are you sure you want to delete this file?",
64
+ es: "¿Estás seguro de que deseas eliminar este archivo?",
65
+ },
66
+ delete: {
67
+ en: "Delete",
68
+ es: "Eliminar",
69
+ },
70
+ });
71
+
52
72
  function FormatFile({ file, display = "expanded", displaySize = "base", onDelete, onClick, }) {
53
73
  const [deleteConfirmationOpen, setDeleteConfirmationOpen] = React.useState(false);
74
+ const { t } = useAtlantisI18n.useAtlantisI18n(formatFileMessages);
54
75
  const { isComplete, fileSize } = useFormatFile({
55
76
  file,
56
77
  display,
@@ -76,7 +97,7 @@ function FormatFile({ file, display = "expanded", displaySize = "base", onDelete
76
97
  React.createElement(FormatFile.DeleteButton, { onDelete: () => {
77
98
  setDeleteConfirmationOpen(true);
78
99
  } },
79
- React.createElement(ConfirmationModal.ConfirmationModal, { title: "Confirm Deletion", message: `Are you sure you want to delete this file?`, confirmLabel: "Delete", variation: "destructive", open: deleteConfirmationOpen, onConfirm: () => onDelete === null || onDelete === void 0 ? void 0 : onDelete(), onRequestClose: () => setDeleteConfirmationOpen(false) })))));
100
+ React.createElement(ConfirmationModal.ConfirmationModal, { title: t("confirmDeletion"), message: t("confirmDeletionMessage"), confirmLabel: t("delete"), variation: "destructive", open: deleteConfirmationOpen, onConfirm: () => onDelete === null || onDelete === void 0 ? void 0 : onDelete(), onRequestClose: () => setDeleteConfirmationOpen(false) })))));
80
101
  }
81
102
  FormatFile.DeleteButtonContainer = function FormatFileDeleteButtonContainer({ children, className, isHidden, }) {
82
103
  if (isHidden)
@@ -106,10 +127,11 @@ FormatFile.Wrapper = function FormatFileWrapper({ children, className, }) {
106
127
  return React.createElement("div", { className: className }, children);
107
128
  };
108
129
  FormatFile.DeleteButton = function FormatFileDeleteButton({ onDelete, children, }) {
130
+ const { t } = useAtlantisI18n.useAtlantisI18n(formatFileMessages);
109
131
  return (React.createElement(React.Fragment, null,
110
132
  React.createElement(Button.Button, { UNSAFE_className: {
111
133
  container: styles.customDeleteButton,
112
- }, onClick: onDelete, variation: "destructive", type: "tertiary", icon: "trash", ariaLabel: "Delete File", size: "small" }),
134
+ }, onClick: onDelete, variation: "destructive", type: "tertiary", icon: "trash", ariaLabel: t("deleteFile"), size: "small" }),
113
135
  children));
114
136
  };
115
137
 
@@ -1,6 +1,7 @@
1
1
  import React__default, { useState } from 'react';
2
2
  import getHumanReadableFileSize from 'filesize';
3
3
  import classnames from 'classnames';
4
+ import { d as defineMessages, u as useAtlantisI18n } from './useAtlantisI18n-es.js';
4
5
  import { T as Thumbnail } from './Thumbnail-es.js';
5
6
  import { T as Text } from './Text-es.js';
6
7
  import { P as ProgressBar } from './ProgressBar-es.js';
@@ -47,8 +48,28 @@ function isHoverable({ display, isComplete, onClick, onDelete, }) {
47
48
  return false;
48
49
  }
49
50
 
51
+ const formatFileMessages = defineMessages({
52
+ deleteFile: {
53
+ en: "Delete File",
54
+ es: "Eliminar archivo",
55
+ },
56
+ confirmDeletion: {
57
+ en: "Confirm Deletion",
58
+ es: "Confirmar eliminación",
59
+ },
60
+ confirmDeletionMessage: {
61
+ en: "Are you sure you want to delete this file?",
62
+ es: "¿Estás seguro de que deseas eliminar este archivo?",
63
+ },
64
+ delete: {
65
+ en: "Delete",
66
+ es: "Eliminar",
67
+ },
68
+ });
69
+
50
70
  function FormatFile({ file, display = "expanded", displaySize = "base", onDelete, onClick, }) {
51
71
  const [deleteConfirmationOpen, setDeleteConfirmationOpen] = useState(false);
72
+ const { t } = useAtlantisI18n(formatFileMessages);
52
73
  const { isComplete, fileSize } = useFormatFile({
53
74
  file,
54
75
  display,
@@ -74,7 +95,7 @@ function FormatFile({ file, display = "expanded", displaySize = "base", onDelete
74
95
  React__default.createElement(FormatFile.DeleteButton, { onDelete: () => {
75
96
  setDeleteConfirmationOpen(true);
76
97
  } },
77
- React__default.createElement(ConfirmationModal, { title: "Confirm Deletion", message: `Are you sure you want to delete this file?`, confirmLabel: "Delete", variation: "destructive", open: deleteConfirmationOpen, onConfirm: () => onDelete === null || onDelete === void 0 ? void 0 : onDelete(), onRequestClose: () => setDeleteConfirmationOpen(false) })))));
98
+ React__default.createElement(ConfirmationModal, { title: t("confirmDeletion"), message: t("confirmDeletionMessage"), confirmLabel: t("delete"), variation: "destructive", open: deleteConfirmationOpen, onConfirm: () => onDelete === null || onDelete === void 0 ? void 0 : onDelete(), onRequestClose: () => setDeleteConfirmationOpen(false) })))));
78
99
  }
79
100
  FormatFile.DeleteButtonContainer = function FormatFileDeleteButtonContainer({ children, className, isHidden, }) {
80
101
  if (isHidden)
@@ -104,10 +125,11 @@ FormatFile.Wrapper = function FormatFileWrapper({ children, className, }) {
104
125
  return React__default.createElement("div", { className: className }, children);
105
126
  };
106
127
  FormatFile.DeleteButton = function FormatFileDeleteButton({ onDelete, children, }) {
128
+ const { t } = useAtlantisI18n(formatFileMessages);
107
129
  return (React__default.createElement(React__default.Fragment, null,
108
130
  React__default.createElement(Button, { UNSAFE_className: {
109
131
  container: styles.customDeleteButton,
110
- }, onClick: onDelete, variation: "destructive", type: "tertiary", icon: "trash", ariaLabel: "Delete File", size: "small" }),
132
+ }, onClick: onDelete, variation: "destructive", type: "tertiary", icon: "trash", ariaLabel: t("deleteFile"), size: "small" }),
111
133
  children));
112
134
  };
113
135
 
package/dist/Menu-cjs.js CHANGED
@@ -1025,3 +1025,4 @@ Menu.ItemPrefix = MenuItemPrefix;
1025
1025
  Menu.ItemSuffix = MenuItemSuffix;
1026
1026
 
1027
1027
  exports.Menu = Menu;
1028
+ exports.menuMessages = menuMessages;
package/dist/Menu-es.js CHANGED
@@ -1022,4 +1022,4 @@ Menu.ItemLabel = MenuItemLabel;
1022
1022
  Menu.ItemPrefix = MenuItemPrefix;
1023
1023
  Menu.ItemSuffix = MenuItemSuffix;
1024
1024
 
1025
- export { Menu as M };
1025
+ export { Menu as M, menuMessages as m };
@@ -5,27 +5,21 @@ require('../tslib.es6-cjs.js');
5
5
  require('react');
6
6
  require('classnames');
7
7
  require('@jobber/hooks');
8
- require('../Heading-cjs.js');
9
- require('../Typography-cjs.js');
10
- require('../Text-cjs.js');
11
- require('../Content-cjs.js');
12
- require('../Markdown-cjs.js');
13
- require('../Emphasis-cjs.js');
14
- require('react/jsx-runtime');
15
- require('../_commonjsHelpers-cjs.js');
16
- require('../Button-cjs.js');
17
- require('react-router-dom');
18
- require('../Icon-cjs.js');
19
- require('@jobber/design');
20
8
  require('../Menu-cjs.js');
21
9
  require('framer-motion');
22
10
  require('../floating-ui.react-cjs.js');
23
11
  require('../floating-ui.utils.dom-cjs.js');
24
12
  require('../floating-ui.utils-cjs.js');
13
+ require('react/jsx-runtime');
25
14
  require('react-dom');
26
15
  require('../floating-ui.react-dom-cjs.js');
27
16
  require('../useAtlantisI18n-cjs.js');
28
17
  require('../AtlantisContext-cjs.js');
18
+ require('../Button-cjs.js');
19
+ require('react-router-dom');
20
+ require('../Icon-cjs.js');
21
+ require('@jobber/design');
22
+ require('../Typography-cjs.js');
29
23
  require('../useFormFieldFocus-cjs.js');
30
24
  require('../maxHeight-cjs.js');
31
25
  require('../useRenderElement-cjs.js');
@@ -42,6 +36,12 @@ require('../DrawerTitle-cjs.js');
42
36
  require('../MenuSubmenuTrigger-cjs.js');
43
37
  require('../useCompositeListItem-cjs.js');
44
38
  require('../isElementDisabled-cjs.js');
39
+ require('../Heading-cjs.js');
40
+ require('../Text-cjs.js');
41
+ require('../Content-cjs.js');
42
+ require('../Markdown-cjs.js');
43
+ require('../Emphasis-cjs.js');
44
+ require('../_commonjsHelpers-cjs.js');
45
45
  require('../filterDataAttributes-cjs.js');
46
46
 
47
47
 
@@ -3,27 +3,21 @@ import '../tslib.es6-es.js';
3
3
  import 'react';
4
4
  import 'classnames';
5
5
  import '@jobber/hooks';
6
- import '../Heading-es.js';
7
- import '../Typography-es.js';
8
- import '../Text-es.js';
9
- import '../Content-es.js';
10
- import '../Markdown-es.js';
11
- import '../Emphasis-es.js';
12
- import 'react/jsx-runtime';
13
- import '../_commonjsHelpers-es.js';
14
- import '../Button-es.js';
15
- import 'react-router-dom';
16
- import '../Icon-es.js';
17
- import '@jobber/design';
18
6
  import '../Menu-es.js';
19
7
  import 'framer-motion';
20
8
  import '../floating-ui.react-es.js';
21
9
  import '../floating-ui.utils.dom-es.js';
22
10
  import '../floating-ui.utils-es.js';
11
+ import 'react/jsx-runtime';
23
12
  import 'react-dom';
24
13
  import '../floating-ui.react-dom-es.js';
25
14
  import '../useAtlantisI18n-es.js';
26
15
  import '../AtlantisContext-es.js';
16
+ import '../Button-es.js';
17
+ import 'react-router-dom';
18
+ import '../Icon-es.js';
19
+ import '@jobber/design';
20
+ import '../Typography-es.js';
27
21
  import '../useFormFieldFocus-es.js';
28
22
  import '../maxHeight-es.js';
29
23
  import '../useRenderElement-es.js';
@@ -40,4 +34,10 @@ import '../DrawerTitle-es.js';
40
34
  import '../MenuSubmenuTrigger-es.js';
41
35
  import '../useCompositeListItem-es.js';
42
36
  import '../isElementDisabled-es.js';
37
+ import '../Heading-es.js';
38
+ import '../Text-es.js';
39
+ import '../Content-es.js';
40
+ import '../Markdown-es.js';
41
+ import '../Emphasis-es.js';
42
+ import '../_commonjsHelpers-es.js';
43
43
  import '../filterDataAttributes-es.js';
package/dist/Page-cjs.js CHANGED
@@ -4,14 +4,15 @@ var tslib_es6 = require('./tslib.es6-cjs.js');
4
4
  var React = require('react');
5
5
  var classnames = require('classnames');
6
6
  var jobberHooks = require('@jobber/hooks');
7
+ var Menu = require('./Menu-cjs.js');
7
8
  var Heading = require('./Heading-cjs.js');
8
9
  var Text = require('./Text-cjs.js');
9
10
  var Content = require('./Content-cjs.js');
10
11
  var Markdown = require('./Markdown-cjs.js');
11
12
  var Button = require('./Button-cjs.js');
12
- var Menu = require('./Menu-cjs.js');
13
13
  var Emphasis = require('./Emphasis-cjs.js');
14
14
  var filterDataAttributes = require('./filterDataAttributes-cjs.js');
15
+ var useAtlantisI18n = require('./useAtlantisI18n-cjs.js');
15
16
 
16
17
  var styles = {"page":"BLYnKItuM3c-","fill":"n5WRRhMkoLs-","standard":"WziKEWW9nA8-","narrow":"qgGzgDyS2NY-","titleBar":"lbmoDvdtQO4-","titleRow":"k9y5NuqTcks-","actionGroup":"_7t53-bnzh98-","large":"SH0aNOLVhE8-","medium":"Lc7Z0FsBa6w-","small":"iF5IA1SYKoA-","primaryAction":"g-H7CKkX-LA-","actionButton":"RSP7jHjP-mw-","subtitle":"EqsNMrZVL-8-","spinning":"MJZVhEmx6h4-"};
17
18
 
@@ -167,14 +168,16 @@ function PageSecondaryButton(_a) {
167
168
  * e.g. wrapping Menu.Item with createLink() from TanStack Router).
168
169
  */
169
170
  function PageMenu(_a) {
170
- var { children, triggerLabel = "More Actions" } = _a, rest = tslib_es6.__rest(_a, ["children", "triggerLabel"]);
171
+ var { children, triggerLabel } = _a, rest = tslib_es6.__rest(_a, ["children", "triggerLabel"]);
172
+ const { t } = useAtlantisI18n.useAtlantisI18n(Menu.menuMessages);
171
173
  const dataAttrs = filterDataAttributes.filterDataAttributes(rest);
172
174
  const { width } = usePageContext();
173
175
  const preferredPlacement = width === "fill" ? "bottom end" : undefined;
176
+ const resolvedTriggerLabel = triggerLabel !== null && triggerLabel !== void 0 ? triggerLabel : t("moreActions");
174
177
  return (React.createElement("div", Object.assign({}, dataAttrs),
175
178
  React.createElement(Menu.Menu, null,
176
179
  React.createElement(Menu.Menu.Trigger, null,
177
- React.createElement(Button.Button, { icon: "more", label: triggerLabel, type: "secondary", fullWidth: true })),
180
+ React.createElement(Button.Button, { icon: "more", label: resolvedTriggerLabel, type: "secondary", fullWidth: true })),
178
181
  React.createElement(Menu.Menu.Content, { preferredPlacement: preferredPlacement }, children))));
179
182
  }
180
183
  /** Main content area of the page. */
package/dist/Page-es.js CHANGED
@@ -2,14 +2,15 @@ import { _ as __rest } from './tslib.es6-es.js';
2
2
  import React__default, { createContext, useContext } from 'react';
3
3
  import classnames from 'classnames';
4
4
  import { useResizeObserver, Breakpoints } from '@jobber/hooks';
5
+ import { M as Menu, m as menuMessages } from './Menu-es.js';
5
6
  import { H as Heading } from './Heading-es.js';
6
7
  import { T as Text } from './Text-es.js';
7
8
  import { C as Content } from './Content-es.js';
8
9
  import { M as Markdown } from './Markdown-es.js';
9
10
  import { B as Button } from './Button-es.js';
10
- import { M as Menu } from './Menu-es.js';
11
11
  import { E as Emphasis } from './Emphasis-es.js';
12
12
  import { f as filterDataAttributes } from './filterDataAttributes-es.js';
13
+ import { u as useAtlantisI18n } from './useAtlantisI18n-es.js';
13
14
 
14
15
  var styles = {"page":"BLYnKItuM3c-","fill":"n5WRRhMkoLs-","standard":"WziKEWW9nA8-","narrow":"qgGzgDyS2NY-","titleBar":"lbmoDvdtQO4-","titleRow":"k9y5NuqTcks-","actionGroup":"_7t53-bnzh98-","large":"SH0aNOLVhE8-","medium":"Lc7Z0FsBa6w-","small":"iF5IA1SYKoA-","primaryAction":"g-H7CKkX-LA-","actionButton":"RSP7jHjP-mw-","subtitle":"EqsNMrZVL-8-","spinning":"MJZVhEmx6h4-"};
15
16
 
@@ -165,14 +166,16 @@ function PageSecondaryButton(_a) {
165
166
  * e.g. wrapping Menu.Item with createLink() from TanStack Router).
166
167
  */
167
168
  function PageMenu(_a) {
168
- var { children, triggerLabel = "More Actions" } = _a, rest = __rest(_a, ["children", "triggerLabel"]);
169
+ var { children, triggerLabel } = _a, rest = __rest(_a, ["children", "triggerLabel"]);
170
+ const { t } = useAtlantisI18n(menuMessages);
169
171
  const dataAttrs = filterDataAttributes(rest);
170
172
  const { width } = usePageContext();
171
173
  const preferredPlacement = width === "fill" ? "bottom end" : undefined;
174
+ const resolvedTriggerLabel = triggerLabel !== null && triggerLabel !== void 0 ? triggerLabel : t("moreActions");
172
175
  return (React__default.createElement("div", Object.assign({}, dataAttrs),
173
176
  React__default.createElement(Menu, null,
174
177
  React__default.createElement(Menu.Trigger, null,
175
- React__default.createElement(Button, { icon: "more", label: triggerLabel, type: "secondary", fullWidth: true })),
178
+ React__default.createElement(Button, { icon: "more", label: resolvedTriggerLabel, type: "secondary", fullWidth: true })),
176
179
  React__default.createElement(Menu.Content, { preferredPlacement: preferredPlacement }, children))));
177
180
  }
178
181
  /** Main content area of the page. */
@@ -0,0 +1,6 @@
1
+ export declare const progressBarMessages: {
2
+ steppedProgress: {
3
+ en: string;
4
+ es: string;
5
+ };
6
+ };
@@ -3,6 +3,8 @@
3
3
  var ProgressBar = require('../ProgressBar-cjs.js');
4
4
  require('react');
5
5
  require('classnames');
6
+ require('../useAtlantisI18n-cjs.js');
7
+ require('../AtlantisContext-cjs.js');
6
8
 
7
9
 
8
10
 
@@ -1,3 +1,5 @@
1
1
  export { P as ProgressBar } from '../ProgressBar-es.js';
2
2
  import 'react';
3
3
  import 'classnames';
4
+ import '../useAtlantisI18n-es.js';
5
+ import '../AtlantisContext-es.js';
@@ -2,14 +2,26 @@
2
2
 
3
3
  var React = require('react');
4
4
  var classnames = require('classnames');
5
+ var useAtlantisI18n = require('./useAtlantisI18n-cjs.js');
5
6
 
6
7
  var styles = {"ProgressBar":"p9AgTzIbTwY-","SteppedProgressBar":"w8NAw4ZMB6g-","wrapper":"d4oS-DGtcKA-","spinning":"f58JiDXlkHA-"};
7
8
 
8
9
  var sizes = {"smaller":"dylWWgubHwM-","small":"z92YJQrscvI-","base":"DKfNM1to61A-","spinning":"GHfs7cB4nQQ-"};
9
10
 
11
+ const progressBarMessages = useAtlantisI18n.defineMessages({
12
+ steppedProgress: {
13
+ en: "progress, {current} out of {total}",
14
+ es: "progreso, {current} de {total}",
15
+ },
16
+ });
17
+
10
18
  function ProgressBarStepped({ currentStep, totalSteps, percentage, size = "base", UNSAFE_className, UNSAFE_style, }) {
19
+ const { t } = useAtlantisI18n.useAtlantisI18n(progressBarMessages);
11
20
  const steppedProgressBarClassName = classnames(styles.ProgressBar, styles.SteppedProgressBar, sizes[size]);
12
- const ariaLabel = `progress, ${currentStep} out of ${totalSteps}`;
21
+ const ariaLabel = t("steppedProgress", {
22
+ current: currentStep,
23
+ total: totalSteps,
24
+ });
13
25
  return (React.createElement("div", { role: "progressbar", className: classnames(styles.wrapper, UNSAFE_className), "data-testid": "progressbar-wrapper", style: UNSAFE_style, "aria-valuenow": percentage, "aria-valuetext": ariaLabel }, Array.from({ length: totalSteps }).map((_, index) => {
14
26
  const step = index + 1;
15
27
  const value = step <= currentStep ? 100 : 0;
@@ -1,13 +1,25 @@
1
1
  import React__default from 'react';
2
2
  import classnames from 'classnames';
3
+ import { d as defineMessages, u as useAtlantisI18n } from './useAtlantisI18n-es.js';
3
4
 
4
5
  var styles = {"ProgressBar":"p9AgTzIbTwY-","SteppedProgressBar":"w8NAw4ZMB6g-","wrapper":"d4oS-DGtcKA-","spinning":"f58JiDXlkHA-"};
5
6
 
6
7
  var sizes = {"smaller":"dylWWgubHwM-","small":"z92YJQrscvI-","base":"DKfNM1to61A-","spinning":"GHfs7cB4nQQ-"};
7
8
 
9
+ const progressBarMessages = defineMessages({
10
+ steppedProgress: {
11
+ en: "progress, {current} out of {total}",
12
+ es: "progreso, {current} de {total}",
13
+ },
14
+ });
15
+
8
16
  function ProgressBarStepped({ currentStep, totalSteps, percentage, size = "base", UNSAFE_className, UNSAFE_style, }) {
17
+ const { t } = useAtlantisI18n(progressBarMessages);
9
18
  const steppedProgressBarClassName = classnames(styles.ProgressBar, styles.SteppedProgressBar, sizes[size]);
10
- const ariaLabel = `progress, ${currentStep} out of ${totalSteps}`;
19
+ const ariaLabel = t("steppedProgress", {
20
+ current: currentStep,
21
+ total: totalSteps,
22
+ });
11
23
  return (React__default.createElement("div", { role: "progressbar", className: classnames(styles.wrapper, UNSAFE_className), "data-testid": "progressbar-wrapper", style: UNSAFE_style, "aria-valuenow": percentage, "aria-valuetext": ariaLabel }, Array.from({ length: totalSteps }).map((_, index) => {
12
24
  const step = index + 1;
13
25
  const value = step <= currentStep ? 100 : 0;
@@ -0,0 +1,6 @@
1
+ export declare const toastMessages: {
2
+ hideNotification: {
3
+ en: string;
4
+ es: string;
5
+ };
6
+ };
@@ -1,13 +1,15 @@
1
1
  'use strict';
2
2
 
3
3
  var showToast = require('../showToast-cjs.js');
4
+ require('../tslib.es6-cjs.js');
4
5
  require('react');
5
6
  require('react-dom/client');
6
7
  require('framer-motion');
8
+ require('../useAtlantisI18n-cjs.js');
9
+ require('../AtlantisContext-cjs.js');
7
10
  require('../Icon-cjs.js');
8
11
  require('@jobber/design');
9
12
  require('../Button-cjs.js');
10
- require('../tslib.es6-cjs.js');
11
13
  require('react-router-dom');
12
14
  require('classnames');
13
15
  require('../Typography-cjs.js');
@@ -1,11 +1,13 @@
1
1
  export { T as Toast, s as showToast } from '../showToast-es.js';
2
+ import '../tslib.es6-es.js';
2
3
  import 'react';
3
4
  import 'react-dom/client';
4
5
  import 'framer-motion';
6
+ import '../useAtlantisI18n-es.js';
7
+ import '../AtlantisContext-es.js';
5
8
  import '../Icon-es.js';
6
9
  import '@jobber/design';
7
10
  import '../Button-es.js';
8
- import '../tslib.es6-es.js';
9
11
  import 'react-router-dom';
10
12
  import 'classnames';
11
13
  import '../Typography-es.js';
@@ -1,2 +1,13 @@
1
1
  import type { ToastProps } from "./Toast";
2
- export declare function showToast(props: ToastProps): void;
2
+ interface ShowToastOptions {
3
+ /**
4
+ * The locale to use for translated strings inside the toast (e.g. the
5
+ * dismiss button aria-label). Defaults to `"en"`.
6
+ *
7
+ * Pass the same locale you provide to `AtlantisContext.Provider` in your
8
+ * app so that toast strings stay consistent with the rest of the UI.
9
+ */
10
+ readonly locale?: string;
11
+ }
12
+ export declare function showToast(props: ToastProps, options?: ShowToastOptions): void;
13
+ export {};
@@ -17,4 +17,4 @@ users.
17
17
  |------|------|----------|---------|-------------|
18
18
  | `data` | `unknown` | Yes | — | Data to display. |
19
19
  | `defaultOpen` | `boolean` | No | `false` | Should the `DataDump` default to open? |
20
- | `label` | `string` | No | `Raw Data` | Label for the DataDump |
20
+ | `label` | `string` | No | `"Raw Data"` | Label for the DataDump |
@@ -337,7 +337,7 @@ composable actions, this is the simplest way to use Page:
337
337
 
338
338
  | Prop | Type | Required | Default | Description |
339
339
  |------|------|----------|---------|-------------|
340
- | `triggerLabel` | `string` | No | `More Actions` | |
340
+ | `triggerLabel` | `string` | No | | |
341
341
 
342
342
  #### Page.PrimaryButton
343
343
 
@@ -0,0 +1,11 @@
1
+ import React from "react";
2
+ import type { RenderResult } from "@testing-library/react";
3
+ /**
4
+ * Test utility that renders a component wrapped in `AtlantisContext.Provider`
5
+ * with the given locale. Use this in i18n tests instead of manually wrapping
6
+ * in the provider.
7
+ *
8
+ * @example
9
+ * renderWithLocale(<MyComponent />, "es");
10
+ */
11
+ export declare function renderWithLocale(ui: React.ReactElement, locale: string): RenderResult;
@@ -1,17 +1,28 @@
1
1
  'use strict';
2
2
 
3
+ var tslib_es6 = require('./tslib.es6-cjs.js');
3
4
  var React = require('react');
4
5
  var client = require('react-dom/client');
5
6
  var framerMotion = require('framer-motion');
7
+ var useAtlantisI18n = require('./useAtlantisI18n-cjs.js');
6
8
  var Icon = require('./Icon-cjs.js');
7
9
  var Button = require('./Button-cjs.js');
8
10
  require('classnames');
9
11
  var Typography = require('./Typography-cjs.js');
12
+ var AtlantisContext = require('./AtlantisContext-cjs.js');
10
13
 
11
14
  var styles = {"wrapper":"_0Tvq24WjeX8-","container":"GznHKPkdb1s-","toast":"W8zgWZqmIlk-","slice":"ol3srk7PviM-","button":"ibhpdUt9YLo-","spinning":"_5Wy5Wra20Vk-"};
12
15
 
16
+ const toastMessages = useAtlantisI18n.defineMessages({
17
+ hideNotification: {
18
+ en: "Hide Notification",
19
+ es: "Ocultar notificación",
20
+ },
21
+ });
22
+
13
23
  function Toast({ message, variation = "success", action, actionLabel, }) {
14
24
  const [visible, setVisible] = React.useState(true);
25
+ const { t } = useAtlantisI18n.useAtlantisI18n(toastMessages);
15
26
  const icon = getIcon();
16
27
  let timer;
17
28
  React.useEffect(() => startTimer(), []);
@@ -26,7 +37,7 @@ function Toast({ message, variation = "success", action, actionLabel, }) {
26
37
  React.createElement(Typography.Typography, { element: "span", size: "large" }, message),
27
38
  action && (React.createElement(Button.Button, { label: `${actionLabel}`, onClick: action, type: "tertiary" })),
28
39
  React.createElement("div", { className: styles.button },
29
- React.createElement(Button.Button, { icon: "cross", ariaLabel: "Hide Notification", onClick: handleToastClose, type: "tertiary", variation: "subtle" })))))));
40
+ React.createElement(Button.Button, { icon: "cross", ariaLabel: t("hideNotification"), onClick: handleToastClose, type: "tertiary", variation: "subtle" })))))));
30
41
  function startTimer() {
31
42
  timer = setTimeout(() => handleToastClose(), getTimeout());
32
43
  }
@@ -62,7 +73,8 @@ function Toast({ message, variation = "success", action, actionLabel, }) {
62
73
 
63
74
  const targetId = "atlantis-toast-element";
64
75
  let root;
65
- function showToast(props) {
76
+ function showToast(props, options = {}) {
77
+ const { locale = "en" } = options;
66
78
  // Ensure target and body is still there when rendering the toast. This is due
67
79
  // to an issue with ReactDOM createRoot assuming document is always there and
68
80
  // Jest taking the document down.
@@ -79,14 +91,16 @@ function showToast(props) {
79
91
  root = client.createRoot(target);
80
92
  }
81
93
  if (root && target && globalThis.document.body.contains(target)) {
82
- root.render(React.createElement(ToasterOven, Object.assign({}, props)));
94
+ root.render(React.createElement(ToasterOven, Object.assign({ locale: locale }, props)));
83
95
  }
84
96
  }
85
97
  const ToastContainer = React.forwardRef(ToastInternal);
86
- function ToasterOven(props) {
98
+ function ToasterOven(_a) {
99
+ var { locale } = _a, toastProps = tslib_es6.__rest(_a, ["locale"]);
87
100
  const toastRef = React.useRef(null);
88
- React.useEffect(() => { var _a; return (_a = toastRef.current) === null || _a === void 0 ? void 0 : _a.add(props); });
89
- return React.createElement(ToastContainer, { ref: toastRef });
101
+ React.useEffect(() => { var _a; return (_a = toastRef.current) === null || _a === void 0 ? void 0 : _a.add(toastProps); });
102
+ return (React.createElement(AtlantisContext.AtlantisContext.Provider, { value: Object.assign(Object.assign({}, AtlantisContext.atlantisContextDefaultValues), { locale }) },
103
+ React.createElement(ToastContainer, { ref: toastRef })));
90
104
  }
91
105
  function ToastInternal(_, ref) {
92
106
  const [toastKey, setToastKey] = React.useState(0);
@@ -1,15 +1,26 @@
1
+ import { _ as __rest } from './tslib.es6-es.js';
1
2
  import React__default, { useState, useEffect, forwardRef, useImperativeHandle, useRef } from 'react';
2
3
  import { createRoot } from 'react-dom/client';
3
4
  import { AnimatePresence, motion } from 'framer-motion';
5
+ import { d as defineMessages, u as useAtlantisI18n } from './useAtlantisI18n-es.js';
4
6
  import { I as Icon } from './Icon-es.js';
5
7
  import { B as Button } from './Button-es.js';
6
8
  import 'classnames';
7
9
  import { T as Typography } from './Typography-es.js';
10
+ import { A as AtlantisContext, a as atlantisContextDefaultValues } from './AtlantisContext-es.js';
8
11
 
9
12
  var styles = {"wrapper":"_0Tvq24WjeX8-","container":"GznHKPkdb1s-","toast":"W8zgWZqmIlk-","slice":"ol3srk7PviM-","button":"ibhpdUt9YLo-","spinning":"_5Wy5Wra20Vk-"};
10
13
 
14
+ const toastMessages = defineMessages({
15
+ hideNotification: {
16
+ en: "Hide Notification",
17
+ es: "Ocultar notificación",
18
+ },
19
+ });
20
+
11
21
  function Toast({ message, variation = "success", action, actionLabel, }) {
12
22
  const [visible, setVisible] = useState(true);
23
+ const { t } = useAtlantisI18n(toastMessages);
13
24
  const icon = getIcon();
14
25
  let timer;
15
26
  useEffect(() => startTimer(), []);
@@ -24,7 +35,7 @@ function Toast({ message, variation = "success", action, actionLabel, }) {
24
35
  React__default.createElement(Typography, { element: "span", size: "large" }, message),
25
36
  action && (React__default.createElement(Button, { label: `${actionLabel}`, onClick: action, type: "tertiary" })),
26
37
  React__default.createElement("div", { className: styles.button },
27
- React__default.createElement(Button, { icon: "cross", ariaLabel: "Hide Notification", onClick: handleToastClose, type: "tertiary", variation: "subtle" })))))));
38
+ React__default.createElement(Button, { icon: "cross", ariaLabel: t("hideNotification"), onClick: handleToastClose, type: "tertiary", variation: "subtle" })))))));
28
39
  function startTimer() {
29
40
  timer = setTimeout(() => handleToastClose(), getTimeout());
30
41
  }
@@ -60,7 +71,8 @@ function Toast({ message, variation = "success", action, actionLabel, }) {
60
71
 
61
72
  const targetId = "atlantis-toast-element";
62
73
  let root;
63
- function showToast(props) {
74
+ function showToast(props, options = {}) {
75
+ const { locale = "en" } = options;
64
76
  // Ensure target and body is still there when rendering the toast. This is due
65
77
  // to an issue with ReactDOM createRoot assuming document is always there and
66
78
  // Jest taking the document down.
@@ -77,14 +89,16 @@ function showToast(props) {
77
89
  root = createRoot(target);
78
90
  }
79
91
  if (root && target && globalThis.document.body.contains(target)) {
80
- root.render(React__default.createElement(ToasterOven, Object.assign({}, props)));
92
+ root.render(React__default.createElement(ToasterOven, Object.assign({ locale: locale }, props)));
81
93
  }
82
94
  }
83
95
  const ToastContainer = forwardRef(ToastInternal);
84
- function ToasterOven(props) {
96
+ function ToasterOven(_a) {
97
+ var { locale } = _a, toastProps = __rest(_a, ["locale"]);
85
98
  const toastRef = useRef(null);
86
- useEffect(() => { var _a; return (_a = toastRef.current) === null || _a === void 0 ? void 0 : _a.add(props); });
87
- return React__default.createElement(ToastContainer, { ref: toastRef });
99
+ useEffect(() => { var _a; return (_a = toastRef.current) === null || _a === void 0 ? void 0 : _a.add(toastProps); });
100
+ return (React__default.createElement(AtlantisContext.Provider, { value: Object.assign(Object.assign({}, atlantisContextDefaultValues), { locale }) },
101
+ React__default.createElement(ToastContainer, { ref: toastRef })));
88
102
  }
89
103
  function ToastInternal(_, ref) {
90
104
  const [toastKey, setToastKey] = useState(0);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jobber/components",
3
- "version": "9.3.0",
3
+ "version": "9.4.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",
@@ -545,5 +545,5 @@
545
545
  "> 1%",
546
546
  "IE 10"
547
547
  ],
548
- "gitHead": "bd293888112d04f31748f9df2612954afda103e4"
548
+ "gitHead": "bd5837d81e26f7413b9377c415bc6e03ca199580"
549
549
  }