@carto/meridian-ds 2.1.0 → 2.1.1-alpha-copiable-input-text.4

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 (40) hide show
  1. package/CHANGELOG.md +7 -1
  2. package/dist/{Alert-yL5uEg4Z.js → Link-D5fKicEY.js} +129 -129
  3. package/dist/{Alert-oGAW_syG.cjs → Link-_lzRY1Ay.cjs} +129 -129
  4. package/dist/{MenuItem-CyIdh2wX.cjs → MenuItem-BY6fuF5U.cjs} +1 -1
  5. package/dist/{MenuItem-C8x-GasJ.js → MenuItem-CKrhDizf.js} +1 -1
  6. package/dist/{TablePaginationActions-BWer8cmX.js → TablePaginationActions-CCDi-BO-.js} +6 -6
  7. package/dist/{TablePaginationActions-MwqZJoRm.cjs → TablePaginationActions-D2K26kdR.cjs} +6 -6
  8. package/dist/components/index.cjs +845 -741
  9. package/dist/components/index.js +812 -708
  10. package/dist/theme/index.cjs +2 -2
  11. package/dist/theme/index.js +3 -3
  12. package/dist/types/components/atoms/Copy/CopiableComponent.d.ts +4 -0
  13. package/dist/types/components/atoms/Copy/CopiableComponent.d.ts.map +1 -0
  14. package/dist/types/components/atoms/Copy/CopiableInputText.d.ts +18 -0
  15. package/dist/types/components/atoms/Copy/CopiableInputText.d.ts.map +1 -0
  16. package/dist/types/components/atoms/Copy/copyString.d.ts.map +1 -0
  17. package/dist/types/components/{molecules → atoms}/Copy/index.d.ts +2 -1
  18. package/dist/types/components/atoms/Copy/index.d.ts.map +1 -0
  19. package/dist/types/components/{molecules/Copy/CopiableComponent.d.ts → atoms/Copy/types.d.ts} +11 -5
  20. package/dist/types/components/atoms/Copy/types.d.ts.map +1 -0
  21. package/dist/types/components/atoms/Copy/useCopyValue.d.ts.map +1 -0
  22. package/dist/types/components/atoms/index.d.ts +2 -0
  23. package/dist/types/components/atoms/index.d.ts.map +1 -1
  24. package/dist/types/components/molecules/MultipleSelectField/useMultipleSelectField.d.ts.map +1 -1
  25. package/dist/types/components/molecules/index.d.ts +0 -2
  26. package/dist/types/components/molecules/index.d.ts.map +1 -1
  27. package/dist/types/components/organisms/CodeArea/CodeAreaHeader.d.ts.map +1 -1
  28. package/dist/types/localization/en.d.ts +2 -2
  29. package/dist/types/localization/es.d.ts +2 -2
  30. package/dist/types/localization/id.d.ts +2 -2
  31. package/dist/types/localization/index.d.ts +6 -6
  32. package/dist/widgets/index.cjs +8 -8
  33. package/dist/widgets/index.js +2 -2
  34. package/package.json +1 -1
  35. package/dist/types/components/molecules/Copy/CopiableComponent.d.ts.map +0 -1
  36. package/dist/types/components/molecules/Copy/copyString.d.ts.map +0 -1
  37. package/dist/types/components/molecules/Copy/index.d.ts.map +0 -1
  38. package/dist/types/components/molecules/Copy/useCopyValue.d.ts.map +0 -1
  39. /package/dist/types/components/{molecules → atoms}/Copy/copyString.d.ts +0 -0
  40. /package/dist/types/components/{molecules → atoms}/Copy/useCopyValue.d.ts +0 -0
@@ -5,12 +5,12 @@ const React = require("react");
5
5
  const reactIntl = require("react-intl");
6
6
  const material = require("@mui/material");
7
7
  const iconsMaterial = require("@mui/icons-material");
8
- const TablePaginationActions = require("../TablePaginationActions-MwqZJoRm.cjs");
9
- const Alert$1 = require("../Alert-oGAW_syG.cjs");
8
+ const TablePaginationActions = require("../TablePaginationActions-D2K26kdR.cjs");
9
+ const Link = require("../Link-_lzRY1Ay.cjs");
10
10
  const ArrowDown = require("../ArrowDown-DJ0vhbsw.cjs");
11
11
  const OpenDiagonallyRight = require("../OpenDiagonallyRight-CpL4ROwg.cjs");
12
12
  require("cartocolor");
13
- const MenuItem = require("../MenuItem-CyIdh2wX.cjs");
13
+ const MenuItem = require("../MenuItem-BY6fuF5U.cjs");
14
14
  const reactWindow = require("react-window");
15
15
  const DatePicker$1 = require("@mui/x-date-pickers/DatePicker");
16
16
  const xDatePickers = require("@mui/x-date-pickers");
@@ -41,307 +41,195 @@ require("codemirror/addon/fold/indent-fold.js");
41
41
  require("codemirror/addon/fold/markdown-fold.js");
42
42
  require("codemirror/addon/fold/comment-fold.js");
43
43
  const ClickAwayListener = require("@mui/material/ClickAwayListener");
44
- const IndicatorIcon = material.styled(material.Box)({
45
- position: "absolute",
46
- top: 0,
47
- left: 0,
48
- right: 0,
49
- bottom: 0,
50
- display: "flex",
51
- alignItems: "center",
52
- justifyContent: "center"
53
- });
54
- const HiddenText = material.styled(material.Box)({
55
- visibility: "hidden",
56
- pointerEvents: "none"
57
- });
58
- function _Button({
59
- children,
60
- loading,
61
- disabled,
62
- startIcon,
63
- endIcon,
64
- loadingPosition,
65
- external,
66
- showExternalIcon = true,
67
- "aria-describedby": ariaDescribedby,
68
- ...otherProps
69
- }, ref) {
70
- const intl = reactIntl.useIntl();
71
- const intlConfig = TablePaginationActions.useImperativeIntl(intl);
72
- const defaultIconLoader = /* @__PURE__ */ jsxRuntime.jsx(material.CircularProgress, { size: 18, color: "inherit" });
73
- const isDefaultLoading = loading && loadingPosition === void 0;
74
- const isExternalLink = otherProps.href && external;
75
- const renderContent = () => {
76
- if (isDefaultLoading) {
77
- return /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { position: "relative" }, children: [
78
- /* @__PURE__ */ jsxRuntime.jsx(IndicatorIcon, { children: defaultIconLoader }),
79
- /* @__PURE__ */ jsxRuntime.jsx(HiddenText, { children })
80
- ] });
44
+ const StyledMenu = material.styled(material.Menu, {
45
+ shouldForwardProp: (prop) => !["extended", "width", "height"].includes(prop)
46
+ })(({ extended, width, height }) => ({
47
+ ...extended && {
48
+ ".MuiMenuItem-root": {
49
+ minHeight: TablePaginationActions.MENU_ITEM_SIZE_EXTENDED
81
50
  }
82
- if (isExternalLink) {
83
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
84
- children,
85
- /* @__PURE__ */ jsxRuntime.jsx(Alert$1.ScreenReaderOnly, { id: "external-hint", children: `(${intlConfig.formatMessage({
86
- id: "c4r.button.opensInNewTab"
87
- })})` })
88
- ] });
51
+ },
52
+ ...width && {
53
+ ".MuiList-root": {
54
+ width,
55
+ minWidth: width
89
56
  }
90
- return children;
91
- };
92
- const getIconForPosition = (position) => {
93
- if (isDefaultLoading) {
94
- return void 0;
57
+ },
58
+ ...height && {
59
+ ".MuiMenu-paper": {
60
+ overflow: "hidden"
61
+ },
62
+ ".MuiList-root": {
63
+ maxHeight: height
95
64
  }
96
- if (loading && loadingPosition !== void 0) {
97
- if (loadingPosition === position) {
98
- return defaultIconLoader;
65
+ }
66
+ }));
67
+ function _Menu({ extended, width, height, MenuListProps, ...otherProps }, ref) {
68
+ return /* @__PURE__ */ jsxRuntime.jsx(
69
+ StyledMenu,
70
+ {
71
+ ...otherProps,
72
+ ref,
73
+ "data-name": "menu",
74
+ width,
75
+ height,
76
+ extended,
77
+ MenuListProps: {
78
+ ...MenuListProps,
79
+ "data-width": width,
80
+ "data-height": height,
81
+ "data-extended": extended
99
82
  }
100
- return void 0;
101
83
  }
102
- if (position === "start") {
103
- return startIcon;
104
- } else {
105
- return endIcon || (isExternalLink && showExternalIcon ? /* @__PURE__ */ jsxRuntime.jsx(iconsMaterial.OpenInNewOutlined, {}) : void 0);
84
+ );
85
+ }
86
+ const Menu$1 = React.forwardRef(_Menu);
87
+ const StyledMenuList = material.styled(material.MenuList, {
88
+ shouldForwardProp: (prop) => !["extended", "width", "height"].includes(prop)
89
+ })(({ extended, width, height }) => ({
90
+ ...extended && {
91
+ ".MuiMenuItem-root": {
92
+ minHeight: TablePaginationActions.MENU_ITEM_SIZE_EXTENDED
106
93
  }
107
- };
94
+ },
95
+ "&.MuiList-root": {
96
+ ...width && {
97
+ width,
98
+ minWidth: width
99
+ },
100
+ ...height && {
101
+ maxHeight: height
102
+ }
103
+ }
104
+ }));
105
+ function _MenuList({ extended, width, height, ...otherProps }, ref) {
108
106
  return /* @__PURE__ */ jsxRuntime.jsx(
109
- material.Button,
107
+ StyledMenuList,
110
108
  {
111
- disabled: loading || disabled,
112
- startIcon: getIconForPosition("start"),
113
- endIcon: getIconForPosition("end"),
114
109
  ...otherProps,
115
- role: otherProps.href ? "link" : "button",
116
- ...isExternalLink && {
117
- target: "_blank",
118
- rel: "noopener noreferrer"
119
- },
120
110
  ref,
121
- "aria-describedby": isExternalLink ? "external-hint" : ariaDescribedby,
122
- children: /* @__PURE__ */ jsxRuntime.jsx(TablePaginationActions.Typography, { variant: "inherit", color: "inherit", noWrap: true, component: "span", children: renderContent() })
111
+ width,
112
+ height,
113
+ extended,
114
+ "data-name": "menu-list",
115
+ "data-width": width,
116
+ "data-height": height,
117
+ "data-extended": extended
123
118
  }
124
119
  );
125
120
  }
126
- const Button = React.forwardRef(_Button);
127
- const ButtonGroup = material.styled(material.ButtonGroup)(({ theme, size }) => ({
128
- "& .MuiButton-root:last-child": {
129
- padding: 0,
130
- minWidth: size === "small" ? theme.spacing(3) : size === "large" ? theme.spacing(6) : theme.spacing(4)
121
+ const MenuList = React.forwardRef(_MenuList);
122
+ const StyledMenuItem$1 = material.styled(MenuItem.MenuItem)(() => ({
123
+ marginTop: "0 !important",
124
+ marginBottom: "0 !important"
125
+ }));
126
+ const LinkFilter = material.styled(material.Link)(
127
+ ({ disabled, theme }) => ({
128
+ display: "flex",
129
+ alignItems: "center",
130
+ gap: theme.spacing(1),
131
+ width: "100%",
132
+ textAlign: "initial",
133
+ ...disabled && {
134
+ pointerEvents: "none",
135
+ color: theme.palette.text.disabled
136
+ }
137
+ })
138
+ );
139
+ function _MenuItemFilter({
140
+ areAllSelected,
141
+ areAnySelected,
142
+ selectAll,
143
+ selectAllDisabled,
144
+ "aria-label": ariaLabel,
145
+ "data-testid": dataTestId
146
+ }, ref) {
147
+ const intl = reactIntl.useIntl();
148
+ const intlConfig = TablePaginationActions.useImperativeIntl(intl);
149
+ return /* @__PURE__ */ jsxRuntime.jsx(
150
+ StyledMenuItem$1,
151
+ {
152
+ ref,
153
+ fixed: true,
154
+ "data-name": "menu-filter",
155
+ "aria-label": ariaLabel,
156
+ "data-testid": dataTestId,
157
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
158
+ LinkFilter,
159
+ {
160
+ variant: "body2",
161
+ color: "textPrimary",
162
+ component: "button",
163
+ underline: "none",
164
+ disabled: !!selectAllDisabled,
165
+ onClick: selectAll,
166
+ tabIndex: 0,
167
+ children: [
168
+ /* @__PURE__ */ jsxRuntime.jsx(
169
+ material.Checkbox,
170
+ {
171
+ checked: areAllSelected,
172
+ indeterminate: areAnySelected && !areAllSelected,
173
+ disabled: selectAllDisabled
174
+ }
175
+ ),
176
+ intlConfig.formatMessage({ id: "c4r.form.selectAll" })
177
+ ]
178
+ }
179
+ )
180
+ }
181
+ );
182
+ }
183
+ const MenuItemFilter = React.forwardRef(_MenuItemFilter);
184
+ const idCounter = {};
185
+ function uniqueId(prefix = "$lodash$") {
186
+ if (!idCounter[prefix]) {
187
+ idCounter[prefix] = 0;
188
+ }
189
+ const id = ++idCounter[prefix];
190
+ if (prefix === "$lodash$") {
191
+ return `${id}`;
192
+ }
193
+ return `${prefix}${id}`;
194
+ }
195
+ const StyledSelect = material.styled(material.Select)(({ theme }) => ({
196
+ "& .MuiInputAdornment-positionStart": {
197
+ paddingLeft: theme.spacing(2),
198
+ "&.MuiInputAdornment-sizeSmall": {
199
+ paddingLeft: theme.spacing(1.5)
200
+ }
201
+ },
202
+ "& .MuiInputBase-inputAdornedStart": {
203
+ paddingLeft: "0px !important"
204
+ },
205
+ "& .MuiSelect-select .MuiMenuItem-root:hover": {
206
+ backgroundColor: "transparent"
207
+ },
208
+ "&.MuiInputBase-root .MuiSelect-select.MuiSelect-multiple": {
209
+ paddingRight: theme.spacing(7)
131
210
  }
132
211
  }));
133
- function SplitButton({
134
- options,
212
+ const PlaceholderItem = material.styled(material.MenuItem)(() => ({
213
+ display: "none"
214
+ }));
215
+ function _SelectField({
216
+ children,
217
+ placeholder,
218
+ size = "small",
219
+ displayEmpty,
220
+ menuProps,
221
+ inputProps,
222
+ labelId,
223
+ label,
224
+ labelSecondary,
225
+ helperText,
226
+ name,
227
+ error,
228
+ focused,
135
229
  disabled,
136
- loading,
137
- loadingPosition,
138
- onClick,
139
- variant,
140
- size,
141
- color,
142
- ...otherProps
143
- }) {
144
- var _a;
145
- const [open, setOpen] = React.useState(false);
146
- const anchorRef = React.useRef(null);
147
- const [selectedIndex, setSelectedIndex] = React.useState(0);
148
- const handleClick = () => {
149
- onClick(options[selectedIndex]);
150
- };
151
- const handleMenuItemClick = (_, index) => {
152
- setSelectedIndex(index);
153
- setOpen(false);
154
- };
155
- const handleToggle = () => {
156
- setOpen((prevOpen) => !prevOpen);
157
- };
158
- const handleClose = (event) => {
159
- var _a2;
160
- if ((_a2 = anchorRef.current) == null ? void 0 : _a2.contains(event.target)) {
161
- return;
162
- }
163
- setOpen(false);
164
- };
165
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
166
- /* @__PURE__ */ jsxRuntime.jsxs(
167
- ButtonGroup,
168
- {
169
- "data-name": "split-button",
170
- ref: anchorRef,
171
- variant,
172
- size,
173
- color,
174
- ...otherProps,
175
- children: [
176
- /* @__PURE__ */ jsxRuntime.jsx(
177
- Button,
178
- {
179
- disabled,
180
- loading,
181
- loadingPosition,
182
- onClick: handleClick,
183
- children: (_a = options[selectedIndex]) == null ? void 0 : _a.label
184
- }
185
- ),
186
- /* @__PURE__ */ jsxRuntime.jsx(Button, { disabled: loading || disabled, onClick: handleToggle, children: open ? /* @__PURE__ */ jsxRuntime.jsx(OpenDiagonallyRight.ArrowUp, {}) : /* @__PURE__ */ jsxRuntime.jsx(ArrowDown.ArrowDown, {}) })
187
- ]
188
- }
189
- ),
190
- /* @__PURE__ */ jsxRuntime.jsx(
191
- material.Popper,
192
- {
193
- sx: { zIndex: 1 },
194
- open,
195
- anchorEl: anchorRef.current,
196
- role: void 0,
197
- transition: true,
198
- disablePortal: true,
199
- placement: "bottom-end",
200
- children: ({ TransitionProps, placement }) => /* @__PURE__ */ jsxRuntime.jsx(
201
- material.Grow,
202
- {
203
- ...TransitionProps,
204
- style: {
205
- transformOrigin: placement === "bottom" ? "center top" : "center bottom"
206
- },
207
- children: /* @__PURE__ */ jsxRuntime.jsx(material.Paper, { elevation: 8, children: /* @__PURE__ */ jsxRuntime.jsx(material.ClickAwayListener, { onClickAway: handleClose, children: /* @__PURE__ */ jsxRuntime.jsx(material.MenuList, { autoFocusItem: true, sx: { paddingY: 1 }, children: options.map((option, index) => /* @__PURE__ */ jsxRuntime.jsx(
208
- material.MenuItem,
209
- {
210
- disabled: option.disabled,
211
- selected: index === selectedIndex,
212
- onClick: (event) => handleMenuItemClick(event, index),
213
- children: option.label
214
- },
215
- option.label
216
- )) }) }) })
217
- }
218
- )
219
- }
220
- )
221
- ] });
222
- }
223
- const Root$5 = material.styled(material.Box)(({ theme }) => ({
224
- display: "flex",
225
- alignItems: "center",
226
- gap: theme.spacing(0.5)
227
- }));
228
- const Indicator = material.styled(TablePaginationActions.Typography)(({ theme }) => ({
229
- ".Mui-disabled &": {
230
- color: theme.palette.text.disabled
231
- }
232
- }));
233
- const Icon = material.styled(material.Box)(({ theme }) => ({
234
- display: "flex",
235
- svg: {
236
- width: TablePaginationActions.ICON_SIZE_SMALL,
237
- height: TablePaginationActions.ICON_SIZE_SMALL,
238
- fontSize: TablePaginationActions.ICON_SIZE_SMALL,
239
- path: {
240
- fill: theme.palette.text.secondary,
241
- ".Mui-disabled &": {
242
- fill: theme.palette.text.disabled
243
- }
244
- }
245
- }
246
- }));
247
- function LabelWithIndicator({
248
- label,
249
- type,
250
- icon,
251
- inheritSize
252
- }) {
253
- return /* @__PURE__ */ jsxRuntime.jsxs(Root$5, { children: [
254
- label,
255
- type && /* @__PURE__ */ jsxRuntime.jsx(
256
- Indicator,
257
- {
258
- component: "span",
259
- variant: inheritSize ? "inherit" : "caption",
260
- color: "textSecondary",
261
- weight: "regular",
262
- children: type === "required" ? "(required)" : "(optional)"
263
- }
264
- ),
265
- icon && /* @__PURE__ */ jsxRuntime.jsx(Icon, { children: icon })
266
- ] });
267
- }
268
- function _PasswordField({ InputProps, size = "small", ...otherProps }, ref) {
269
- const intl = reactIntl.useIntl();
270
- const intlConfig = TablePaginationActions.useImperativeIntl(intl);
271
- const [showPassword, setShowPassword] = React.useState(false);
272
- const handleClickShowPassword = () => setShowPassword(!showPassword);
273
- return /* @__PURE__ */ jsxRuntime.jsx(
274
- material.TextField,
275
- {
276
- ...otherProps,
277
- ref,
278
- type: showPassword ? "text" : "password",
279
- size,
280
- InputProps: {
281
- ...InputProps,
282
- endAdornment: /* @__PURE__ */ jsxRuntime.jsx(material.InputAdornment, { position: "end", children: /* @__PURE__ */ jsxRuntime.jsx(material.IconButton, { size, onClick: handleClickShowPassword, children: /* @__PURE__ */ jsxRuntime.jsx(
283
- material.Tooltip,
284
- {
285
- title: intlConfig.formatMessage({
286
- id: `c4r.form.${showPassword ? "hidePassword" : "showPassword"}`
287
- }),
288
- children: showPassword ? /* @__PURE__ */ jsxRuntime.jsx(iconsMaterial.VisibilityOffOutlined, {}) : /* @__PURE__ */ jsxRuntime.jsx(iconsMaterial.VisibilityOutlined, {})
289
- }
290
- ) }) })
291
- }
292
- }
293
- );
294
- }
295
- const PasswordField = React.forwardRef(_PasswordField);
296
- const idCounter = {};
297
- function uniqueId(prefix = "$lodash$") {
298
- if (!idCounter[prefix]) {
299
- idCounter[prefix] = 0;
300
- }
301
- const id = ++idCounter[prefix];
302
- if (prefix === "$lodash$") {
303
- return `${id}`;
304
- }
305
- return `${prefix}${id}`;
306
- }
307
- const StyledSelect = material.styled(material.Select)(({ theme }) => ({
308
- "& .MuiInputAdornment-positionStart": {
309
- paddingLeft: theme.spacing(2),
310
- "&.MuiInputAdornment-sizeSmall": {
311
- paddingLeft: theme.spacing(1.5)
312
- }
313
- },
314
- "& .MuiInputBase-inputAdornedStart": {
315
- paddingLeft: "0px !important"
316
- },
317
- "& .MuiSelect-select .MuiMenuItem-root:hover": {
318
- backgroundColor: "transparent"
319
- },
320
- "&.MuiInputBase-root .MuiSelect-select.MuiSelect-multiple": {
321
- paddingRight: theme.spacing(7)
322
- }
323
- }));
324
- const PlaceholderItem = material.styled(material.MenuItem)(() => ({
325
- display: "none"
326
- }));
327
- function _SelectField({
328
- children,
329
- placeholder,
330
- size = "small",
331
- displayEmpty,
332
- menuProps,
333
- inputProps,
334
- labelId,
335
- label,
336
- labelSecondary,
337
- helperText,
338
- name,
339
- error,
340
- focused,
341
- disabled,
342
- fullWidth,
343
- required,
344
- "aria-label": ariaLabel,
230
+ fullWidth,
231
+ required,
232
+ "aria-label": ariaLabel,
345
233
  ...otherProps
346
234
  }, ref) {
347
235
  const isSmall = size === "small";
@@ -411,256 +299,39 @@ function _SelectField({
411
299
  );
412
300
  }
413
301
  const SelectField = React.forwardRef(_SelectField);
414
- const StyledToggleButtonGroup = material.styled(material.ToggleButtonGroup, {
415
- shouldForwardProp: (prop) => prop !== "variant" && prop !== "backgroundColor"
416
- })(({ variant, backgroundColor, theme }) => ({
417
- // Variants
418
- ...variant === "contained" && {
419
- boxShadow: "none"
420
- },
421
- ...variant === "unbounded" && {
422
- boxShadow: "none",
423
- borderRadius: theme.spacing(0.5),
424
- "& .MuiDivider-root": {
425
- height: theme.spacing(4),
426
- "&.MuiToggleButtonGroup-groupedHorizontal": {
427
- height: theme.spacing(4)
428
- },
429
- "&.MuiToggleButtonGroup-groupedVertical": {
430
- height: "auto",
431
- width: theme.spacing(4),
432
- margin: `${theme.spacing(0.5, 0, 1)} !important`,
433
- borderRadius: "0 !important"
434
- }
435
- },
436
- "& .MuiToggleButton-sizeSmall": {
437
- margin: 0,
438
- "&.MuiToggleButtonGroup-grouped:not(.MuiDivider-root)": {
439
- margin: 0
440
- },
441
- "& + .MuiDivider-root.MuiToggleButtonGroup-groupedHorizontal": {
442
- height: theme.spacing(3)
443
- },
444
- "& + .MuiDivider-root.MuiToggleButtonGroup-groupedVertical": {
445
- height: "auto",
446
- width: theme.spacing(3)
447
- }
448
- },
449
- ".MuiToggleButtonGroup-grouped:not(.MuiDivider-root)": {
450
- margin: 0,
451
- "&:first-of-type": {
452
- marginLeft: 0
453
- },
454
- "&:not(:last-of-type)": {
455
- marginRight: theme.spacing(0.5)
456
- }
457
- },
458
- "&.MuiToggleButtonGroup-horizontal:not(.MuiDivider-root)": {
459
- ".MuiToggleButtonGroup-grouped": {
460
- margin: theme.spacing(0, 0.5)
461
- }
462
- },
463
- "&.MuiToggleButtonGroup-vertical:not(.MuiDivider-root)": {
464
- ".MuiToggleButtonGroup-grouped": {
465
- margin: theme.spacing(0, 0, 0.5),
466
- "&:not(:last-of-type)": {
467
- marginRight: 0
468
- },
469
- "&:last-of-type": {
470
- marginBottom: 0
471
- }
472
- }
473
- }
474
- },
475
- // Colors
476
- ...backgroundColor === "primary" && {
477
- backgroundColor: theme.palette.background.paper
478
- },
479
- ...backgroundColor === "secondary" && {
480
- backgroundColor: theme.palette.background.default
481
- },
482
- ...backgroundColor === "transparent" && {
483
- backgroundColor: "transparent"
484
- }
485
- }));
486
- function ToggleButtonGroup({
487
- children,
488
- variant = "floating",
489
- backgroundColor,
490
- ...rest
491
- }) {
492
- const isUnbounded = variant === "unbounded";
493
- const defaultColor = isUnbounded ? "transparent" : "primary";
494
- return /* @__PURE__ */ jsxRuntime.jsx(
495
- StyledToggleButtonGroup,
496
- {
497
- ...rest,
498
- variant,
499
- backgroundColor: backgroundColor ?? defaultColor,
500
- children
501
- }
502
- );
503
- }
504
- const StyledMenu = material.styled(material.Menu, {
505
- shouldForwardProp: (prop) => !["extended", "width", "height"].includes(prop)
506
- })(({ extended, width, height }) => ({
507
- ...extended && {
508
- ".MuiMenuItem-root": {
509
- minHeight: TablePaginationActions.MENU_ITEM_SIZE_EXTENDED
510
- }
511
- },
512
- ...width && {
513
- ".MuiList-root": {
514
- width,
515
- minWidth: width
516
- }
517
- },
518
- ...height && {
519
- ".MuiMenu-paper": {
520
- overflow: "hidden"
521
- },
522
- ".MuiList-root": {
523
- maxHeight: height
524
- }
525
- }
526
- }));
527
- function _Menu({ extended, width, height, MenuListProps, ...otherProps }, ref) {
528
- return /* @__PURE__ */ jsxRuntime.jsx(
529
- StyledMenu,
530
- {
531
- ...otherProps,
532
- ref,
533
- "data-name": "menu",
534
- width,
535
- height,
536
- extended,
537
- MenuListProps: {
538
- ...MenuListProps,
539
- "data-width": width,
540
- "data-height": height,
541
- "data-extended": extended
542
- }
543
- }
544
- );
545
- }
546
- const Menu$1 = React.forwardRef(_Menu);
547
- const StyledMenuList = material.styled(material.MenuList, {
548
- shouldForwardProp: (prop) => !["extended", "width", "height"].includes(prop)
549
- })(({ extended, width, height }) => ({
550
- ...extended && {
551
- ".MuiMenuItem-root": {
552
- minHeight: TablePaginationActions.MENU_ITEM_SIZE_EXTENDED
553
- }
554
- },
555
- "&.MuiList-root": {
556
- ...width && {
557
- width,
558
- minWidth: width
559
- },
560
- ...height && {
561
- maxHeight: height
562
- }
563
- }
564
- }));
565
- function _MenuList({ extended, width, height, ...otherProps }, ref) {
566
- return /* @__PURE__ */ jsxRuntime.jsx(
567
- StyledMenuList,
568
- {
569
- ...otherProps,
570
- ref,
571
- width,
572
- height,
573
- extended,
574
- "data-name": "menu-list",
575
- "data-width": width,
576
- "data-height": height,
577
- "data-extended": extended
578
- }
579
- );
580
- }
581
- const MenuList = React.forwardRef(_MenuList);
582
- const StyledMenuItem$1 = material.styled(MenuItem.MenuItem)(() => ({
583
- marginTop: "0 !important",
584
- marginBottom: "0 !important"
585
- }));
586
- const LinkFilter = material.styled(material.Link)(
587
- ({ disabled, theme }) => ({
588
- display: "flex",
589
- alignItems: "center",
590
- gap: theme.spacing(1),
591
- width: "100%",
592
- textAlign: "initial",
593
- ...disabled && {
594
- pointerEvents: "none",
595
- color: theme.palette.text.disabled
596
- }
597
- })
598
- );
599
- function _MenuItemFilter({
600
- areAllSelected,
601
- areAnySelected,
602
- selectAll,
603
- selectAllDisabled,
604
- "aria-label": ariaLabel,
605
- "data-testid": dataTestId
606
- }, ref) {
607
- const intl = reactIntl.useIntl();
608
- const intlConfig = TablePaginationActions.useImperativeIntl(intl);
609
- return /* @__PURE__ */ jsxRuntime.jsx(
610
- StyledMenuItem$1,
611
- {
612
- ref,
613
- fixed: true,
614
- "data-name": "menu-filter",
615
- "aria-label": ariaLabel,
616
- "data-testid": dataTestId,
617
- children: /* @__PURE__ */ jsxRuntime.jsxs(
618
- LinkFilter,
619
- {
620
- variant: "body2",
621
- color: "textPrimary",
622
- component: "button",
623
- underline: "none",
624
- disabled: !!selectAllDisabled,
625
- onClick: selectAll,
626
- tabIndex: 0,
627
- children: [
628
- /* @__PURE__ */ jsxRuntime.jsx(
629
- material.Checkbox,
630
- {
631
- checked: areAllSelected,
632
- indeterminate: areAnySelected && !areAllSelected,
633
- disabled: selectAllDisabled
634
- }
635
- ),
636
- intlConfig.formatMessage({ id: "c4r.form.selectAll" })
637
- ]
638
- }
639
- )
640
- }
641
- );
642
- }
643
- const MenuItemFilter = React.forwardRef(_MenuItemFilter);
644
302
  function useMultipleSelectField({
645
303
  selectedOptions,
646
304
  options,
647
305
  onChange
648
306
  }) {
649
307
  const [currentOptions, setCurrentOptions] = React.useState(selectedOptions ?? []);
650
- const areAllSelected = options.length === currentOptions.length;
651
- const areAnySelected = currentOptions.length > 0;
308
+ const isInternalUpdate = React.useRef(false);
652
309
  React.useEffect(() => {
653
- if (currentOptions !== selectedOptions) {
654
- setCurrentOptions(currentOptions);
310
+ if (!isInternalUpdate.current) {
311
+ setCurrentOptions(selectedOptions ?? []);
655
312
  }
313
+ isInternalUpdate.current = false;
656
314
  }, [selectedOptions]);
315
+ const enabledOptions = React.useMemo(
316
+ () => options.filter(({ disabled }) => !disabled),
317
+ [options]
318
+ );
319
+ const enabledOptionValues = React.useMemo(
320
+ () => enabledOptions.map(({ value }) => value),
321
+ [enabledOptions]
322
+ );
323
+ const areAllSelected = enabledOptionValues.length > 0 && enabledOptionValues.every((value) => currentOptions.includes(value));
324
+ const areAnySelected = currentOptions.length > 0;
657
325
  const handleChange = (event) => {
326
+ if (isInternalUpdate.current) {
327
+ return;
328
+ }
658
329
  const {
659
330
  target: { value }
660
331
  } = event;
661
- const options2 = typeof value === "string" ? value.split(",") : value.filter((v) => v !== void 0);
662
- setCurrentOptions(options2);
663
- onChange(options2);
332
+ const newOptions = typeof value === "string" ? value.split(",") : value.filter((v) => v !== void 0);
333
+ setCurrentOptions(newOptions);
334
+ onChange(newOptions);
664
335
  };
665
336
  const selectAll = () => {
666
337
  const optionsValues = options == null ? void 0 : options.filter(({ disabled }) => !disabled).map(({ value }) => value);
@@ -668,18 +339,17 @@ function useMultipleSelectField({
668
339
  const allSelected = optionsValues.every(
669
340
  (value) => currentOptions.includes(value)
670
341
  );
671
- if (allSelected) {
672
- setCurrentOptions([]);
673
- onChange([]);
674
- } else {
675
- setCurrentOptions(optionsValues);
676
- onChange(optionsValues);
677
- }
342
+ const newValue = allSelected ? [] : optionsValues;
343
+ isInternalUpdate.current = true;
344
+ setCurrentOptions(newValue);
345
+ onChange(newValue);
678
346
  }
679
347
  };
680
348
  const unselectAll = () => {
681
- setCurrentOptions([]);
682
- onChange([]);
349
+ const newValue = [];
350
+ isInternalUpdate.current = true;
351
+ setCurrentOptions(newValue);
352
+ onChange(newValue);
683
353
  };
684
354
  return {
685
355
  areAllSelected,
@@ -1859,120 +1529,30 @@ function useAutocomplete({
1859
1529
  getOptionLabel: internalGetOptionLabel
1860
1530
  };
1861
1531
  }
1862
- const _CopiableComponent = ({
1863
- children,
1864
- disabled,
1865
- value,
1866
- onCopied,
1867
- copyText = "c4r.button.copy",
1868
- copiedText = "c4r.notifications.copiedToClipboard",
1869
- button,
1870
- buttonLabel,
1871
- buttonProps,
1872
- ariaLabel,
1873
- dataTestId,
1874
- tooltipPlacement = "top",
1875
- ...props
1876
- }, ref) => {
1877
- const intl = reactIntl.useIntl();
1878
- const intlConfig = TablePaginationActions.useImperativeIntl(intl);
1879
- const [open, setOpen] = React.useState(false);
1880
- const { copy } = useCopyValue(copyText, copiedText);
1881
- const handleClick = (e) => {
1882
- e.preventDefault();
1883
- copy(value).then(() => {
1884
- onCopied == null ? void 0 : onCopied();
1885
- setOpen(true);
1886
- }).catch(console.error);
1887
- };
1888
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1889
- /* @__PURE__ */ jsxRuntime.jsx(
1890
- material.Tooltip,
1891
- {
1892
- title: intlConfig.formatMessage({ id: copyText }),
1893
- leaveDelay: 0,
1894
- placement: tooltipPlacement,
1895
- children: /* @__PURE__ */ jsxRuntime.jsxs(
1896
- material.Box,
1897
- {
1898
- ...props,
1899
- sx: { cursor: disabled ? void 0 : "pointer" },
1900
- onClick: handleClick,
1901
- "data-name": "copiable",
1902
- ref,
1903
- children: [
1904
- children,
1905
- button && /* @__PURE__ */ jsxRuntime.jsx(
1906
- Alert$1.IconButton,
1907
- {
1908
- ...buttonProps,
1909
- disabled,
1910
- icon: /* @__PURE__ */ jsxRuntime.jsx(iconsMaterial.ContentCopyOutlined, {}),
1911
- "data-testid": dataTestId,
1912
- "aria-label": ariaLabel || buttonLabel,
1913
- sx: {
1914
- display: "flex"
1915
- }
1916
- }
1917
- )
1918
- ]
1919
- }
1920
- )
1921
- }
1922
- ),
1923
- /* @__PURE__ */ jsxRuntime.jsx(
1924
- Snackbar,
1925
- {
1926
- open,
1927
- autoWidth: true,
1928
- closeable: false,
1929
- autoHideDuration: 4e3,
1930
- onClose: () => setOpen(false),
1931
- children: intlConfig.formatMessage({ id: copiedText })
1932
- }
1933
- )
1934
- ] });
1935
- };
1936
- const CopiableComponent = React.forwardRef(_CopiableComponent);
1937
- async function copyString(value) {
1938
- return await navigator.clipboard.writeText(value);
1939
- }
1940
- const useCopyValue = (msg = "c4r.button.copy", copiedMsg = "c4r.notifications.copiedToClipboard") => {
1941
- const [message, setMessage] = React.useState(msg);
1942
- const copy = async (text) => {
1943
- await copyString(text);
1944
- setMessage(copiedMsg);
1945
- setTimeout(() => setMessage(msg), 1e3);
1946
- };
1947
- return {
1948
- message,
1949
- copy
1950
- };
1951
- };
1952
- const AccordionContainer = material.styled("div", {
1953
- shouldForwardProp: (prop) => prop !== "variant"
1954
- })(({ variant, theme }) => ({
1955
- width: "100%",
1956
- borderRadius: theme.spacing(0.5),
1957
- ...variant === "outlined" && {
1958
- backgroundColor: theme.palette.background.paper,
1959
- boxShadow: `inset 0 0 0 1px ${theme.palette.divider}`
1960
- }
1961
- }));
1962
- function AccordionGroup({
1963
- variant = "standard",
1964
- items,
1965
- ...otherProps
1966
- }) {
1967
- return /* @__PURE__ */ jsxRuntime.jsx(AccordionContainer, { ...otherProps, variant, children: items.map((item, index) => /* @__PURE__ */ jsxRuntime.jsxs(
1968
- material.Accordion,
1969
- {
1970
- disabled: item.disabled,
1971
- defaultExpanded: item.defaultExpanded,
1972
- onChange: item.onChange,
1973
- children: [
1974
- /* @__PURE__ */ jsxRuntime.jsx(
1975
- material.AccordionSummary,
1532
+ const AccordionContainer = material.styled("div", {
1533
+ shouldForwardProp: (prop) => prop !== "variant"
1534
+ })(({ variant, theme }) => ({
1535
+ width: "100%",
1536
+ borderRadius: theme.spacing(0.5),
1537
+ ...variant === "outlined" && {
1538
+ backgroundColor: theme.palette.background.paper,
1539
+ boxShadow: `inset 0 0 0 1px ${theme.palette.divider}`
1540
+ }
1541
+ }));
1542
+ function AccordionGroup({
1543
+ variant = "standard",
1544
+ items,
1545
+ ...otherProps
1546
+ }) {
1547
+ return /* @__PURE__ */ jsxRuntime.jsx(AccordionContainer, { ...otherProps, variant, children: items.map((item, index) => /* @__PURE__ */ jsxRuntime.jsxs(
1548
+ material.Accordion,
1549
+ {
1550
+ disabled: item.disabled,
1551
+ defaultExpanded: item.defaultExpanded,
1552
+ onChange: item.onChange,
1553
+ children: [
1554
+ /* @__PURE__ */ jsxRuntime.jsx(
1555
+ material.AccordionSummary,
1976
1556
  {
1977
1557
  "aria-controls": `${index}-content`,
1978
1558
  id: `${index}-header`,
@@ -2048,7 +1628,7 @@ const Content$4 = material.styled(material.Box, {
2048
1628
  }
2049
1629
  }
2050
1630
  }));
2051
- const Alert = material.styled(Alert$1.Alert, {
1631
+ const Alert = material.styled(Link.Alert, {
2052
1632
  shouldForwardProp: (prop) => !["hasActions", "closeable"].includes(prop)
2053
1633
  })(({ hasActions, closeable, icon, theme }) => ({
2054
1634
  position: "relative",
@@ -2162,7 +1742,7 @@ function Snackbar({
2162
1742
  }
2163
1743
  ),
2164
1744
  closeable && /* @__PURE__ */ jsxRuntime.jsx(CloseButtonWrapper, { children: /* @__PURE__ */ jsxRuntime.jsx(
2165
- Alert$1.IconButton,
1745
+ Link.IconButton,
2166
1746
  {
2167
1747
  color: "default",
2168
1748
  onClick: (e) => onClose(e, "timeout"),
@@ -2267,106 +1847,629 @@ function colorProps(color, variant, theme, disabled) {
2267
1847
  borderColor: theme.palette.error.main
2268
1848
  };
2269
1849
  }
2270
- return {
2271
- color: theme.palette.primary.contrastText,
2272
- backgroundColor: theme.palette.error.main,
2273
- borderColor: "transparent"
2274
- };
2275
- }
1850
+ return {
1851
+ color: theme.palette.primary.contrastText,
1852
+ backgroundColor: theme.palette.error.main,
1853
+ borderColor: "transparent"
1854
+ };
1855
+ }
1856
+ }
1857
+ const TagRoot = material.styled("div", {
1858
+ shouldForwardProp: (prop) => !["color", "variant", "disabled"].includes(prop)
1859
+ })(({
1860
+ color,
1861
+ variant,
1862
+ disabled,
1863
+ theme
1864
+ }) => {
1865
+ return {
1866
+ display: "inline-flex",
1867
+ flexDirection: "row",
1868
+ flexWrap: "nowrap",
1869
+ alignItems: "center",
1870
+ padding: theme.spacing(0, 0.5),
1871
+ borderRadius: theme.spacing(0.25),
1872
+ gap: theme.spacing(0.5),
1873
+ height: theme.spacing(2),
1874
+ borderWidth: "1px",
1875
+ borderStyle: "solid",
1876
+ ...colorProps(color ?? "primary", variant ?? "filled", theme, disabled),
1877
+ '.Mui-selected &, [aria-selected="true"] &': {
1878
+ borderColor: theme.palette.primary.main,
1879
+ backgroundColor: theme.palette.primary.background,
1880
+ ".MuiTypography-root": {
1881
+ color: theme.palette.primary.main
1882
+ }
1883
+ }
1884
+ };
1885
+ });
1886
+ const TagIcon = material.styled("div")(({ theme }) => ({
1887
+ display: "flex",
1888
+ justifyContent: "center",
1889
+ alignItems: "center",
1890
+ "& svg": {
1891
+ width: theme.spacing(TablePaginationActions.ICON_SIZE_SMALL),
1892
+ height: theme.spacing(TablePaginationActions.ICON_SIZE_SMALL),
1893
+ "& g": {
1894
+ fill: "currentColor"
1895
+ }
1896
+ }
1897
+ }));
1898
+ const TagLabel = material.styled("div", {
1899
+ shouldForwardProp: (prop) => !["type"].includes(prop)
1900
+ })(({ type, theme }) => ({
1901
+ display: "flex",
1902
+ alignItems: "center",
1903
+ paddingTop: type === "code" ? theme.spacing(0.25) : void 0
1904
+ }));
1905
+ function _Tag({
1906
+ label,
1907
+ color = "primary",
1908
+ variant = "filled",
1909
+ icon,
1910
+ type = "default",
1911
+ typographyProps,
1912
+ noWrap = true,
1913
+ disabled,
1914
+ ...otherProps
1915
+ }, ref) {
1916
+ const typeCode = type === "code";
1917
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1918
+ TagRoot,
1919
+ {
1920
+ ref,
1921
+ className: "CartoTag-root",
1922
+ color,
1923
+ variant,
1924
+ disabled,
1925
+ "aria-disabled": disabled,
1926
+ "data-color": color,
1927
+ "data-variant": variant,
1928
+ "data-type": type,
1929
+ "data-name": "tag",
1930
+ ...otherProps,
1931
+ children: [
1932
+ icon && /* @__PURE__ */ jsxRuntime.jsx(TagIcon, { children: icon }),
1933
+ /* @__PURE__ */ jsxRuntime.jsx(TagLabel, { type, children: /* @__PURE__ */ jsxRuntime.jsx(
1934
+ TablePaginationActions.Typography,
1935
+ {
1936
+ component: "span",
1937
+ color: "inherit",
1938
+ variant: typeCode ? "code3" : "caption",
1939
+ weight: typeCode ? "strong" : "medium",
1940
+ noWrap,
1941
+ ...typographyProps,
1942
+ children: label
1943
+ }
1944
+ ) })
1945
+ ]
1946
+ }
1947
+ );
1948
+ }
1949
+ const Tag = React.forwardRef(_Tag);
1950
+ const _CopiableComponent = ({
1951
+ children,
1952
+ disabled,
1953
+ value,
1954
+ onCopied,
1955
+ copyText,
1956
+ copiedText,
1957
+ button,
1958
+ buttonLabel,
1959
+ buttonProps,
1960
+ ariaLabel,
1961
+ dataTestId,
1962
+ tooltipPlacement = "top",
1963
+ ...props
1964
+ }, ref) => {
1965
+ const [open, setOpen] = React.useState(false);
1966
+ const intl = reactIntl.useIntl();
1967
+ const intlConfig = TablePaginationActions.useImperativeIntl(intl);
1968
+ const copyTooltipText = copyText || intlConfig.formatMessage({ id: "c4r.button.copy" });
1969
+ const copySuccessMessage = copiedText || intlConfig.formatMessage({
1970
+ id: "c4r.notifications.copiedToClipboard"
1971
+ });
1972
+ const { copy } = useCopyValue(copyTooltipText, copySuccessMessage);
1973
+ const handleClick = (e) => {
1974
+ e.preventDefault();
1975
+ copy(value).then(() => {
1976
+ onCopied == null ? void 0 : onCopied();
1977
+ setOpen(true);
1978
+ }).catch(console.error);
1979
+ };
1980
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1981
+ /* @__PURE__ */ jsxRuntime.jsx(
1982
+ material.Tooltip,
1983
+ {
1984
+ title: copyTooltipText,
1985
+ leaveDelay: 0,
1986
+ placement: tooltipPlacement,
1987
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
1988
+ material.Box,
1989
+ {
1990
+ ...props,
1991
+ sx: { cursor: disabled ? void 0 : "pointer" },
1992
+ onClick: handleClick,
1993
+ "data-name": "copiable",
1994
+ ref,
1995
+ children: [
1996
+ children,
1997
+ button && /* @__PURE__ */ jsxRuntime.jsx(
1998
+ Link.IconButton,
1999
+ {
2000
+ ...buttonProps,
2001
+ disabled,
2002
+ icon: /* @__PURE__ */ jsxRuntime.jsx(iconsMaterial.ContentCopyOutlined, {}),
2003
+ "data-testid": dataTestId,
2004
+ "aria-label": ariaLabel || buttonLabel || copyTooltipText,
2005
+ sx: {
2006
+ display: "flex"
2007
+ }
2008
+ }
2009
+ )
2010
+ ]
2011
+ }
2012
+ )
2013
+ }
2014
+ ),
2015
+ /* @__PURE__ */ jsxRuntime.jsx(
2016
+ Snackbar,
2017
+ {
2018
+ open,
2019
+ autoWidth: true,
2020
+ closeable: false,
2021
+ autoHideDuration: 4e3,
2022
+ onClose: () => setOpen(false),
2023
+ children: copySuccessMessage
2024
+ }
2025
+ )
2026
+ ] });
2027
+ };
2028
+ const CopiableComponent = React.forwardRef(_CopiableComponent);
2029
+ const StyledTextField = material.styled(material.TextField)(() => ({
2030
+ "& input": {
2031
+ textOverflow: "unset"
2032
+ // This is needed to avoid scrolling issues in the input
2033
+ }
2034
+ }));
2035
+ const AdornmentWrapper = material.styled(material.Box, {
2036
+ shouldForwardProp: (prop) => !["size", "variant"].includes(prop)
2037
+ })(({ variant, size, theme }) => ({
2038
+ width: theme.spacing(3),
2039
+ ...variant === "standard" ? {
2040
+ marginLeft: theme.spacing(-0.25)
2041
+ } : {
2042
+ marginRight: theme.spacing(-1)
2043
+ },
2044
+ ...size === "medium" && {
2045
+ width: theme.spacing(4),
2046
+ ...variant === "standard" ? {
2047
+ marginLeft: theme.spacing(-0.5)
2048
+ } : {
2049
+ marginLeft: theme.spacing(1)
2050
+ }
2051
+ }
2052
+ }));
2053
+ function _CopiableInputText({
2054
+ value,
2055
+ variant,
2056
+ InputProps,
2057
+ extraEndAdornment,
2058
+ onCopied,
2059
+ password,
2060
+ size = "small",
2061
+ ...rest
2062
+ }, ref) {
2063
+ const intl = reactIntl.useIntl();
2064
+ const intlConfig = TablePaginationActions.useImperativeIntl(intl);
2065
+ const [showText, setShowText] = React.useState(false);
2066
+ const inputType = !password ? "text" : showText ? "text" : "password";
2067
+ const showTextLabel = intlConfig.formatMessage({
2068
+ id: showText ? "c4r.button.hide" : "c4r.button.show"
2069
+ });
2070
+ const passwordAdornment = /* @__PURE__ */ jsxRuntime.jsx(material.InputAdornment, { position: "end", children: /* @__PURE__ */ jsxRuntime.jsx(
2071
+ Link.IconButton,
2072
+ {
2073
+ edge: variant !== "standard" ? "end" : void 0,
2074
+ onClick: () => setShowText(!showText),
2075
+ size,
2076
+ icon: showText ? /* @__PURE__ */ jsxRuntime.jsx(iconsMaterial.VisibilityOutlined, {}) : /* @__PURE__ */ jsxRuntime.jsx(iconsMaterial.VisibilityOffOutlined, {}),
2077
+ tooltip: showTextLabel,
2078
+ "aria-label": showTextLabel
2079
+ }
2080
+ ) });
2081
+ return /* @__PURE__ */ jsxRuntime.jsx(
2082
+ StyledTextField,
2083
+ {
2084
+ ...rest,
2085
+ size,
2086
+ value,
2087
+ variant,
2088
+ InputProps: {
2089
+ readOnly: true,
2090
+ endAdornment: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2091
+ password ? passwordAdornment : extraEndAdornment,
2092
+ /* @__PURE__ */ jsxRuntime.jsx(material.InputAdornment, { position: "end", children: /* @__PURE__ */ jsxRuntime.jsx(AdornmentWrapper, { size, variant, children: /* @__PURE__ */ jsxRuntime.jsx(
2093
+ CopiableComponent,
2094
+ {
2095
+ value,
2096
+ onCopied,
2097
+ button: true,
2098
+ buttonProps: {
2099
+ size
2100
+ }
2101
+ }
2102
+ ) }) })
2103
+ ] }),
2104
+ ...variant === "filled" && {
2105
+ disableUnderline: true
2106
+ },
2107
+ ...InputProps
2108
+ },
2109
+ type: inputType,
2110
+ "data-name": "copiable-input-text",
2111
+ ref
2112
+ }
2113
+ );
2114
+ }
2115
+ const CopiableInputText = React.forwardRef(_CopiableInputText);
2116
+ async function copyString(value) {
2117
+ return await navigator.clipboard.writeText(value);
2118
+ }
2119
+ const useCopyValue = (msg = "c4r.button.copy", copiedMsg = "c4r.notifications.copiedToClipboard") => {
2120
+ const [message, setMessage] = React.useState(msg);
2121
+ const copy = async (text) => {
2122
+ await copyString(text);
2123
+ setMessage(copiedMsg);
2124
+ setTimeout(() => setMessage(msg), 1e3);
2125
+ };
2126
+ return {
2127
+ message,
2128
+ copy
2129
+ };
2130
+ };
2131
+ const IndicatorIcon = material.styled(material.Box)({
2132
+ position: "absolute",
2133
+ top: 0,
2134
+ left: 0,
2135
+ right: 0,
2136
+ bottom: 0,
2137
+ display: "flex",
2138
+ alignItems: "center",
2139
+ justifyContent: "center"
2140
+ });
2141
+ const HiddenText = material.styled(material.Box)({
2142
+ visibility: "hidden",
2143
+ pointerEvents: "none"
2144
+ });
2145
+ function _Button({
2146
+ children,
2147
+ loading,
2148
+ disabled,
2149
+ startIcon,
2150
+ endIcon,
2151
+ loadingPosition,
2152
+ external,
2153
+ showExternalIcon = true,
2154
+ "aria-describedby": ariaDescribedby,
2155
+ ...otherProps
2156
+ }, ref) {
2157
+ const intl = reactIntl.useIntl();
2158
+ const intlConfig = TablePaginationActions.useImperativeIntl(intl);
2159
+ const defaultIconLoader = /* @__PURE__ */ jsxRuntime.jsx(material.CircularProgress, { size: 18, color: "inherit" });
2160
+ const isDefaultLoading = loading && loadingPosition === void 0;
2161
+ const isExternalLink = otherProps.href && external;
2162
+ const renderContent = () => {
2163
+ if (isDefaultLoading) {
2164
+ return /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { position: "relative" }, children: [
2165
+ /* @__PURE__ */ jsxRuntime.jsx(IndicatorIcon, { children: defaultIconLoader }),
2166
+ /* @__PURE__ */ jsxRuntime.jsx(HiddenText, { children })
2167
+ ] });
2168
+ }
2169
+ if (isExternalLink) {
2170
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2171
+ children,
2172
+ /* @__PURE__ */ jsxRuntime.jsx(Link.ScreenReaderOnly, { id: "external-hint", children: `(${intlConfig.formatMessage({
2173
+ id: "c4r.button.opensInNewTab"
2174
+ })})` })
2175
+ ] });
2176
+ }
2177
+ return children;
2178
+ };
2179
+ const getIconForPosition = (position) => {
2180
+ if (isDefaultLoading) {
2181
+ return void 0;
2182
+ }
2183
+ if (loading && loadingPosition !== void 0) {
2184
+ if (loadingPosition === position) {
2185
+ return defaultIconLoader;
2186
+ }
2187
+ return void 0;
2188
+ }
2189
+ if (position === "start") {
2190
+ return startIcon;
2191
+ } else {
2192
+ return endIcon || (isExternalLink && showExternalIcon ? /* @__PURE__ */ jsxRuntime.jsx(iconsMaterial.OpenInNewOutlined, {}) : void 0);
2193
+ }
2194
+ };
2195
+ return /* @__PURE__ */ jsxRuntime.jsx(
2196
+ material.Button,
2197
+ {
2198
+ disabled: loading || disabled,
2199
+ startIcon: getIconForPosition("start"),
2200
+ endIcon: getIconForPosition("end"),
2201
+ ...otherProps,
2202
+ role: otherProps.href ? "link" : "button",
2203
+ ...isExternalLink && {
2204
+ target: "_blank",
2205
+ rel: "noopener noreferrer"
2206
+ },
2207
+ ref,
2208
+ "aria-describedby": isExternalLink ? "external-hint" : ariaDescribedby,
2209
+ children: /* @__PURE__ */ jsxRuntime.jsx(TablePaginationActions.Typography, { variant: "inherit", color: "inherit", noWrap: true, component: "span", children: renderContent() })
2210
+ }
2211
+ );
2212
+ }
2213
+ const Button = React.forwardRef(_Button);
2214
+ const ButtonGroup = material.styled(material.ButtonGroup)(({ theme, size }) => ({
2215
+ "& .MuiButton-root:last-child": {
2216
+ padding: 0,
2217
+ minWidth: size === "small" ? theme.spacing(3) : size === "large" ? theme.spacing(6) : theme.spacing(4)
2218
+ }
2219
+ }));
2220
+ function SplitButton({
2221
+ options,
2222
+ disabled,
2223
+ loading,
2224
+ loadingPosition,
2225
+ onClick,
2226
+ variant,
2227
+ size,
2228
+ color,
2229
+ ...otherProps
2230
+ }) {
2231
+ var _a;
2232
+ const [open, setOpen] = React.useState(false);
2233
+ const anchorRef = React.useRef(null);
2234
+ const [selectedIndex, setSelectedIndex] = React.useState(0);
2235
+ const handleClick = () => {
2236
+ onClick(options[selectedIndex]);
2237
+ };
2238
+ const handleMenuItemClick = (_, index) => {
2239
+ setSelectedIndex(index);
2240
+ setOpen(false);
2241
+ };
2242
+ const handleToggle = () => {
2243
+ setOpen((prevOpen) => !prevOpen);
2244
+ };
2245
+ const handleClose = (event) => {
2246
+ var _a2;
2247
+ if ((_a2 = anchorRef.current) == null ? void 0 : _a2.contains(event.target)) {
2248
+ return;
2249
+ }
2250
+ setOpen(false);
2251
+ };
2252
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2253
+ /* @__PURE__ */ jsxRuntime.jsxs(
2254
+ ButtonGroup,
2255
+ {
2256
+ "data-name": "split-button",
2257
+ ref: anchorRef,
2258
+ variant,
2259
+ size,
2260
+ color,
2261
+ ...otherProps,
2262
+ children: [
2263
+ /* @__PURE__ */ jsxRuntime.jsx(
2264
+ Button,
2265
+ {
2266
+ disabled,
2267
+ loading,
2268
+ loadingPosition,
2269
+ onClick: handleClick,
2270
+ children: (_a = options[selectedIndex]) == null ? void 0 : _a.label
2271
+ }
2272
+ ),
2273
+ /* @__PURE__ */ jsxRuntime.jsx(Button, { disabled: loading || disabled, onClick: handleToggle, children: open ? /* @__PURE__ */ jsxRuntime.jsx(OpenDiagonallyRight.ArrowUp, {}) : /* @__PURE__ */ jsxRuntime.jsx(ArrowDown.ArrowDown, {}) })
2274
+ ]
2275
+ }
2276
+ ),
2277
+ /* @__PURE__ */ jsxRuntime.jsx(
2278
+ material.Popper,
2279
+ {
2280
+ sx: { zIndex: 1 },
2281
+ open,
2282
+ anchorEl: anchorRef.current,
2283
+ role: void 0,
2284
+ transition: true,
2285
+ disablePortal: true,
2286
+ placement: "bottom-end",
2287
+ children: ({ TransitionProps, placement }) => /* @__PURE__ */ jsxRuntime.jsx(
2288
+ material.Grow,
2289
+ {
2290
+ ...TransitionProps,
2291
+ style: {
2292
+ transformOrigin: placement === "bottom" ? "center top" : "center bottom"
2293
+ },
2294
+ children: /* @__PURE__ */ jsxRuntime.jsx(material.Paper, { elevation: 8, children: /* @__PURE__ */ jsxRuntime.jsx(material.ClickAwayListener, { onClickAway: handleClose, children: /* @__PURE__ */ jsxRuntime.jsx(material.MenuList, { autoFocusItem: true, sx: { paddingY: 1 }, children: options.map((option, index) => /* @__PURE__ */ jsxRuntime.jsx(
2295
+ material.MenuItem,
2296
+ {
2297
+ disabled: option.disabled,
2298
+ selected: index === selectedIndex,
2299
+ onClick: (event) => handleMenuItemClick(event, index),
2300
+ children: option.label
2301
+ },
2302
+ option.label
2303
+ )) }) }) })
2304
+ }
2305
+ )
2306
+ }
2307
+ )
2308
+ ] });
2276
2309
  }
2277
- const TagRoot = material.styled("div", {
2278
- shouldForwardProp: (prop) => !["color", "variant", "disabled"].includes(prop)
2279
- })(({
2280
- color,
2281
- variant,
2282
- disabled,
2283
- theme
2284
- }) => {
2285
- return {
2286
- display: "inline-flex",
2287
- flexDirection: "row",
2288
- flexWrap: "nowrap",
2289
- alignItems: "center",
2290
- padding: theme.spacing(0, 0.5),
2291
- borderRadius: theme.spacing(0.25),
2292
- gap: theme.spacing(0.5),
2293
- height: theme.spacing(2),
2294
- borderWidth: "1px",
2295
- borderStyle: "solid",
2296
- ...colorProps(color ?? "primary", variant ?? "filled", theme, disabled),
2297
- '.Mui-selected &, [aria-selected="true"] &': {
2298
- borderColor: theme.palette.primary.main,
2299
- backgroundColor: theme.palette.primary.background,
2300
- ".MuiTypography-root": {
2301
- color: theme.palette.primary.main
2302
- }
2303
- }
2304
- };
2305
- });
2306
- const TagIcon = material.styled("div")(({ theme }) => ({
2310
+ const Root$5 = material.styled(material.Box)(({ theme }) => ({
2307
2311
  display: "flex",
2308
- justifyContent: "center",
2309
2312
  alignItems: "center",
2310
- "& svg": {
2311
- width: theme.spacing(TablePaginationActions.ICON_SIZE_SMALL),
2312
- height: theme.spacing(TablePaginationActions.ICON_SIZE_SMALL),
2313
- "& g": {
2314
- fill: "currentColor"
2315
- }
2313
+ gap: theme.spacing(0.5)
2314
+ }));
2315
+ const Indicator = material.styled(TablePaginationActions.Typography)(({ theme }) => ({
2316
+ ".Mui-disabled &": {
2317
+ color: theme.palette.text.disabled
2316
2318
  }
2317
2319
  }));
2318
- const TagLabel = material.styled("div", {
2319
- shouldForwardProp: (prop) => !["type"].includes(prop)
2320
- })(({ type, theme }) => ({
2320
+ const Icon = material.styled(material.Box)(({ theme }) => ({
2321
2321
  display: "flex",
2322
- alignItems: "center",
2323
- paddingTop: type === "code" ? theme.spacing(0.25) : void 0
2322
+ svg: {
2323
+ width: TablePaginationActions.ICON_SIZE_SMALL,
2324
+ height: TablePaginationActions.ICON_SIZE_SMALL,
2325
+ fontSize: TablePaginationActions.ICON_SIZE_SMALL,
2326
+ path: {
2327
+ fill: theme.palette.text.secondary,
2328
+ ".Mui-disabled &": {
2329
+ fill: theme.palette.text.disabled
2330
+ }
2331
+ }
2332
+ }
2324
2333
  }));
2325
- function _Tag({
2334
+ function LabelWithIndicator({
2326
2335
  label,
2327
- color = "primary",
2328
- variant = "filled",
2336
+ type,
2329
2337
  icon,
2330
- type = "default",
2331
- typographyProps,
2332
- noWrap = true,
2333
- disabled,
2334
- ...otherProps
2335
- }, ref) {
2336
- const typeCode = type === "code";
2337
- return /* @__PURE__ */ jsxRuntime.jsxs(
2338
- TagRoot,
2338
+ inheritSize
2339
+ }) {
2340
+ return /* @__PURE__ */ jsxRuntime.jsxs(Root$5, { children: [
2341
+ label,
2342
+ type && /* @__PURE__ */ jsxRuntime.jsx(
2343
+ Indicator,
2344
+ {
2345
+ component: "span",
2346
+ variant: inheritSize ? "inherit" : "caption",
2347
+ color: "textSecondary",
2348
+ weight: "regular",
2349
+ children: type === "required" ? "(required)" : "(optional)"
2350
+ }
2351
+ ),
2352
+ icon && /* @__PURE__ */ jsxRuntime.jsx(Icon, { children: icon })
2353
+ ] });
2354
+ }
2355
+ function _PasswordField({ InputProps, size = "small", ...otherProps }, ref) {
2356
+ const intl = reactIntl.useIntl();
2357
+ const intlConfig = TablePaginationActions.useImperativeIntl(intl);
2358
+ const [showPassword, setShowPassword] = React.useState(false);
2359
+ const handleClickShowPassword = () => setShowPassword(!showPassword);
2360
+ return /* @__PURE__ */ jsxRuntime.jsx(
2361
+ material.TextField,
2339
2362
  {
2340
- ref,
2341
- className: "CartoTag-root",
2342
- color,
2343
- variant,
2344
- disabled,
2345
- "aria-disabled": disabled,
2346
- "data-color": color,
2347
- "data-variant": variant,
2348
- "data-type": type,
2349
- "data-name": "tag",
2350
2363
  ...otherProps,
2351
- children: [
2352
- icon && /* @__PURE__ */ jsxRuntime.jsx(TagIcon, { children: icon }),
2353
- /* @__PURE__ */ jsxRuntime.jsx(TagLabel, { type, children: /* @__PURE__ */ jsxRuntime.jsx(
2354
- TablePaginationActions.Typography,
2364
+ ref,
2365
+ type: showPassword ? "text" : "password",
2366
+ size,
2367
+ InputProps: {
2368
+ ...InputProps,
2369
+ endAdornment: /* @__PURE__ */ jsxRuntime.jsx(material.InputAdornment, { position: "end", children: /* @__PURE__ */ jsxRuntime.jsx(material.IconButton, { size, onClick: handleClickShowPassword, children: /* @__PURE__ */ jsxRuntime.jsx(
2370
+ material.Tooltip,
2355
2371
  {
2356
- component: "span",
2357
- color: "inherit",
2358
- variant: typeCode ? "code3" : "caption",
2359
- weight: typeCode ? "strong" : "medium",
2360
- noWrap,
2361
- ...typographyProps,
2362
- children: label
2372
+ title: intlConfig.formatMessage({
2373
+ id: `c4r.form.${showPassword ? "hidePassword" : "showPassword"}`
2374
+ }),
2375
+ children: showPassword ? /* @__PURE__ */ jsxRuntime.jsx(iconsMaterial.VisibilityOffOutlined, {}) : /* @__PURE__ */ jsxRuntime.jsx(iconsMaterial.VisibilityOutlined, {})
2363
2376
  }
2364
- ) })
2365
- ]
2377
+ ) }) })
2378
+ }
2379
+ }
2380
+ );
2381
+ }
2382
+ const PasswordField = React.forwardRef(_PasswordField);
2383
+ const StyledToggleButtonGroup = material.styled(material.ToggleButtonGroup, {
2384
+ shouldForwardProp: (prop) => prop !== "variant" && prop !== "backgroundColor"
2385
+ })(({ variant, backgroundColor, theme }) => ({
2386
+ // Variants
2387
+ ...variant === "contained" && {
2388
+ boxShadow: "none"
2389
+ },
2390
+ ...variant === "unbounded" && {
2391
+ boxShadow: "none",
2392
+ borderRadius: theme.spacing(0.5),
2393
+ "& .MuiDivider-root": {
2394
+ height: theme.spacing(4),
2395
+ "&.MuiToggleButtonGroup-groupedHorizontal": {
2396
+ height: theme.spacing(4)
2397
+ },
2398
+ "&.MuiToggleButtonGroup-groupedVertical": {
2399
+ height: "auto",
2400
+ width: theme.spacing(4),
2401
+ margin: `${theme.spacing(0.5, 0, 1)} !important`,
2402
+ borderRadius: "0 !important"
2403
+ }
2404
+ },
2405
+ "& .MuiToggleButton-sizeSmall": {
2406
+ margin: 0,
2407
+ "&.MuiToggleButtonGroup-grouped:not(.MuiDivider-root)": {
2408
+ margin: 0
2409
+ },
2410
+ "& + .MuiDivider-root.MuiToggleButtonGroup-groupedHorizontal": {
2411
+ height: theme.spacing(3)
2412
+ },
2413
+ "& + .MuiDivider-root.MuiToggleButtonGroup-groupedVertical": {
2414
+ height: "auto",
2415
+ width: theme.spacing(3)
2416
+ }
2417
+ },
2418
+ ".MuiToggleButtonGroup-grouped:not(.MuiDivider-root)": {
2419
+ margin: 0,
2420
+ "&:first-of-type": {
2421
+ marginLeft: 0
2422
+ },
2423
+ "&:not(:last-of-type)": {
2424
+ marginRight: theme.spacing(0.5)
2425
+ }
2426
+ },
2427
+ "&.MuiToggleButtonGroup-horizontal:not(.MuiDivider-root)": {
2428
+ ".MuiToggleButtonGroup-grouped": {
2429
+ margin: theme.spacing(0, 0.5)
2430
+ }
2431
+ },
2432
+ "&.MuiToggleButtonGroup-vertical:not(.MuiDivider-root)": {
2433
+ ".MuiToggleButtonGroup-grouped": {
2434
+ margin: theme.spacing(0, 0, 0.5),
2435
+ "&:not(:last-of-type)": {
2436
+ marginRight: 0
2437
+ },
2438
+ "&:last-of-type": {
2439
+ marginBottom: 0
2440
+ }
2441
+ }
2442
+ }
2443
+ },
2444
+ // Colors
2445
+ ...backgroundColor === "primary" && {
2446
+ backgroundColor: theme.palette.background.paper
2447
+ },
2448
+ ...backgroundColor === "secondary" && {
2449
+ backgroundColor: theme.palette.background.default
2450
+ },
2451
+ ...backgroundColor === "transparent" && {
2452
+ backgroundColor: "transparent"
2453
+ }
2454
+ }));
2455
+ function ToggleButtonGroup({
2456
+ children,
2457
+ variant = "floating",
2458
+ backgroundColor,
2459
+ ...rest
2460
+ }) {
2461
+ const isUnbounded = variant === "unbounded";
2462
+ const defaultColor = isUnbounded ? "transparent" : "primary";
2463
+ return /* @__PURE__ */ jsxRuntime.jsx(
2464
+ StyledToggleButtonGroup,
2465
+ {
2466
+ ...rest,
2467
+ variant,
2468
+ backgroundColor: backgroundColor ?? defaultColor,
2469
+ children
2366
2470
  }
2367
2471
  );
2368
2472
  }
2369
- const Tag = React.forwardRef(_Tag);
2370
2473
  const Menu = material.styled("div")(({ theme }) => ({
2371
2474
  display: "flex",
2372
2475
  alignItems: "center",
@@ -3412,7 +3515,7 @@ function CodeAreaHeader({
3412
3515
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3413
3516
  /* @__PURE__ */ jsxRuntime.jsxs(Header, { size, "data-size": size, "data-name": "code-area-header", children: [
3414
3517
  /* @__PURE__ */ jsxRuntime.jsx(
3415
- Alert$1.IconButton,
3518
+ Link.IconButton,
3416
3519
  {
3417
3520
  color: "default",
3418
3521
  size,
@@ -3476,7 +3579,7 @@ function CodeAreaHeader({
3476
3579
  }
3477
3580
  ),
3478
3581
  showExpandButton && /* @__PURE__ */ jsxRuntime.jsx(
3479
- Alert$1.IconButton,
3582
+ Link.IconButton,
3480
3583
  {
3481
3584
  color: "default",
3482
3585
  size,
@@ -4648,7 +4751,7 @@ const DialogContentPadded = material.styled(DialogContent, {
4648
4751
  paddingBottom: `${theme.spacing(3)} !important`
4649
4752
  }
4650
4753
  }));
4651
- const StyledAlert = material.styled(Alert$1.Alert)(({ theme }) => ({
4754
+ const StyledAlert = material.styled(Link.Alert)(({ theme }) => ({
4652
4755
  minHeight: "auto",
4653
4756
  padding: 0,
4654
4757
  backgroundColor: "transparent",
@@ -5080,10 +5183,10 @@ function CodeAreaDialog({
5080
5183
  }
5081
5184
  exports.TablePaginationActions = TablePaginationActions.TablePaginationActions;
5082
5185
  exports.Typography = TablePaginationActions.Typography;
5083
- exports.Alert = Alert$1.Alert;
5084
- exports.IconButton = Alert$1.IconButton;
5085
- exports.Link = Alert$1.Link;
5086
- exports.ScreenReaderOnly = Alert$1.ScreenReaderOnly;
5186
+ exports.Alert = Link.Alert;
5187
+ exports.IconButton = Link.IconButton;
5188
+ exports.Link = Link.Link;
5189
+ exports.ScreenReaderOnly = Link.ScreenReaderOnly;
5087
5190
  exports.MenuItem = MenuItem.MenuItem;
5088
5191
  exports.AUTOCOMPLETE_GROUP_HEADER_PROPERTY = AUTOCOMPLETE_GROUP_HEADER_PROPERTY;
5089
5192
  exports.AccordionGroup = AccordionGroup;
@@ -5102,6 +5205,7 @@ exports.CodeAreaHeader = CodeAreaHeader;
5102
5205
  exports.CodeAreaInput = CodeAreaInput;
5103
5206
  exports.CodeAreaMarkTextPattern = CodeAreaMarkTextPattern;
5104
5207
  exports.CopiableComponent = CopiableComponent;
5208
+ exports.CopiableInputText = CopiableInputText;
5105
5209
  exports.CreatableAutocomplete = CreatableAutocomplete;
5106
5210
  exports.DatePicker = DatePicker;
5107
5211
  exports.DateRangePicker = DateRangePicker;