@cakemail-org/ui-components-v2 2.2.102 → 2.2.104

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 (35) hide show
  1. package/dist/cjs/components/index.d.ts +1 -0
  2. package/dist/cjs/components/scopePicker/index.d.ts +8 -0
  3. package/dist/cjs/components/scopePicker/scopeGroups.d.ts +21 -0
  4. package/dist/cjs/components/scopePicker/types.d.ts +1 -0
  5. package/dist/cjs/components/textField/types.d.ts +1 -1
  6. package/dist/cjs/data/theme/MuiTextField.d.ts +27 -0
  7. package/dist/cjs/factories/index.d.ts +1 -0
  8. package/dist/cjs/factories/personalAccessTokens/index.d.ts +22 -0
  9. package/dist/cjs/factories/personalAccessTokens/types.d.ts +1 -0
  10. package/dist/cjs/index.js +470 -4
  11. package/dist/cjs/models/index.d.ts +1 -0
  12. package/dist/cjs/models/personalAccessToken/index.d.ts +21 -0
  13. package/dist/cjs/models/personalAccessToken/types.d.ts +10 -0
  14. package/dist/cjs/services/index.d.ts +1 -0
  15. package/dist/cjs/services/personalAccessTokens/index.d.ts +24 -0
  16. package/dist/cjs/services/personalAccessTokens/types.d.ts +1 -0
  17. package/dist/cjs/utils/posthog.d.ts +5 -1
  18. package/dist/esm/components/index.d.ts +1 -0
  19. package/dist/esm/components/scopePicker/index.d.ts +8 -0
  20. package/dist/esm/components/scopePicker/scopeGroups.d.ts +21 -0
  21. package/dist/esm/components/scopePicker/types.d.ts +1 -0
  22. package/dist/esm/components/textField/types.d.ts +1 -1
  23. package/dist/esm/data/theme/MuiTextField.d.ts +27 -0
  24. package/dist/esm/factories/index.d.ts +1 -0
  25. package/dist/esm/factories/personalAccessTokens/index.d.ts +22 -0
  26. package/dist/esm/factories/personalAccessTokens/types.d.ts +1 -0
  27. package/dist/esm/index.js +464 -6
  28. package/dist/esm/models/index.d.ts +1 -0
  29. package/dist/esm/models/personalAccessToken/index.d.ts +21 -0
  30. package/dist/esm/models/personalAccessToken/types.d.ts +10 -0
  31. package/dist/esm/services/index.d.ts +1 -0
  32. package/dist/esm/services/personalAccessTokens/index.d.ts +24 -0
  33. package/dist/esm/services/personalAccessTokens/types.d.ts +1 -0
  34. package/dist/esm/utils/posthog.d.ts +5 -1
  35. package/package.json +1 -1
package/dist/esm/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { lighten, Stack as Stack$1, Box, CircularProgress as CircularProgress$1, LinearProgress as LinearProgress$1, Tooltip, Typography as Typography$1, Badge, Avatar as Avatar$1, Dialog as Dialog$1, DialogContent, Checkbox as Checkbox$1, Paper, Chip as Chip$1, ClickAwayListener, useTheme as useTheme$2, FormControl, InputLabel, Link as Link$1, Radio as Radio$1, Divider as Divider$2, InputAdornment, Select as Select$1, MenuItem as MenuItem$1 } from '@mui/material';
2
2
  import classNames from 'classnames';
3
3
  import * as React from 'react';
4
- import React__default, { forwardRef, useRef, useState, useEffect, useLayoutEffect, useImperativeHandle, Component, useCallback, createContext } from 'react';
4
+ import React__default, { forwardRef, useRef, useState, useEffect, useLayoutEffect, useImperativeHandle, Component, useCallback, createContext, useMemo } from 'react';
5
5
  import moment from 'moment';
6
6
  import moment$1 from 'moment/min/moment-with-locales';
7
7
  import posthog from 'posthog-js';
@@ -3875,6 +3875,10 @@ var EEvents;
3875
3875
  EEvents["CUSTOM_DOMAIN_CREATED"] = "CustomDomain.Created";
3876
3876
  EEvents["CUSTOM_DOMAIN_VERIFIED"] = "CustomDomain.Verified";
3877
3877
  EEvents["CUSTOM_DOMAIN_DELETED"] = "CustomDomain.Deleted";
3878
+ EEvents["PAT_CREATED"] = "PAT.Created";
3879
+ EEvents["PAT_UPDATED"] = "PAT.Updated";
3880
+ EEvents["PAT_REVOKED"] = "PAT.Revoked";
3881
+ EEvents["PAT_TOKEN_COPIED"] = "PAT.Token.Copied";
3878
3882
  })(EEvents || (EEvents = {}));
3879
3883
  function eventCondition(type, disabledEvents) {
3880
3884
  if (disabledEvents === void 0) { disabledEvents = []; }
@@ -5718,6 +5722,37 @@ function getMuiTableRow(theme) {
5718
5722
 
5719
5723
  function getMuiTextField(theme) {
5720
5724
  return {
5725
+ variants: [
5726
+ {
5727
+ props: { size: "small" },
5728
+ style: {
5729
+ ".MuiInputBase-root > input, .MuiInputBase-root > textarea": {
5730
+ padding: theme.spacing(3, 3.5),
5731
+ fontSize: theme.typography.body1.fontSize,
5732
+ lineHeight: theme.typography.body1.lineHeight,
5733
+ },
5734
+ ".MuiSvgIcon-root": {
5735
+ top: "1.5rem !important",
5736
+ },
5737
+ },
5738
+ },
5739
+ {
5740
+ props: { size: "medium" },
5741
+ style: {
5742
+ ".MuiInputBase-root > input, .MuiInputBase-root > textarea": {
5743
+ padding: theme.spacing(4, 3.5),
5744
+ }
5745
+ },
5746
+ },
5747
+ {
5748
+ props: { size: "large" },
5749
+ style: {
5750
+ ".MuiInputBase-root > input, .MuiInputBase-root > textarea": {
5751
+ padding: theme.spacing(5, 3.5),
5752
+ }
5753
+ },
5754
+ },
5755
+ ],
5721
5756
  styleOverrides: {
5722
5757
  root: {
5723
5758
  ".MuiInputLabel-root": __assign(__assign({}, theme.typography.body2), { color: theme.palette.body1.main, transform: "translate(14px, -9px)", ">div": {
@@ -7653,11 +7688,11 @@ function LoadingContainer(_a) {
7653
7688
  React__default.createElement(Container, { className: "loadingContainer-component-v2 ".concat(className), sx: { display: "flex", alignItems: "center", justifyContent: "center", width: "100%" } }, loader)));
7654
7689
  }
7655
7690
 
7656
- var css_248z$v = ".textfield-component-v2 {\n position: relative;\n}\n.textfield-component-v2.disabled {\n opacity: 0.65;\n pointer-events: none;\n}\n.textfield-component-v2 .MuiSvgIcon-root ~ .MuiFormControl-root .MuiInputBase-input {\n padding-left: 42px;\n}\n.textfield-component-v2 .MuiSvgIcon-root {\n position: absolute;\n left: 1rem;\n top: 1.65rem;\n transform: translateY(-50%);\n z-index: 1;\n}\n\n.locationTextField-component-v2 {\n position: relative;\n}\n.locationTextField-component-v2 .autocomplete-dropdown-container {\n position: absolute;\n width: 100%;\n z-index: 10000;\n}\n\n.phoneTextField-component-v2 .MuiInputAdornment-root .MuiSelect-select {\n padding-right: 1.75rem !important;\n}\n.phoneTextField-component-v2 .MuiInputAdornment-root .MuiSelect-icon {\n display: inline-block;\n right: 0.5rem;\n}\n\n.react-international-phone-flag-emoji {\n width: 1.5rem;\n height: 1.5rem;\n}\n\n.colorTextField-component-v2 {\n position: relative;\n}\n.colorTextField-component-v2 .boxedColor {\n position: absolute;\n width: 20px;\n height: 20px;\n border-radius: 20px;\n left: 1rem;\n top: 1.65rem;\n transform: translateY(-50%);\n z-index: 1;\n}\n.colorTextField-component-v2 .boxedColor .MuiSvgIcon-root {\n width: unset;\n height: unset;\n}\n.colorTextField-component-v2 .boxedColor::after {\n position: absolute;\n width: 6px;\n height: 6px;\n content: \"\";\n background-color: var(--white, #FFFFFF);\n border-radius: 20px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n}\n.colorTextField-component-v2 .boxedColor ~ .textfield-component-v2 .MuiInputBase-input {\n padding-left: 44px;\n}\n.colorTextField-component-v2.bottom .react-colorful {\n top: 3.5rem;\n}\n.colorTextField-component-v2.top .react-colorful {\n bottom: 4rem;\n}\n.colorTextField-component-v2 .react-colorful {\n width: 100%;\n position: absolute;\n}";
7691
+ var css_248z$v = ".textfield-component-v2 {\n position: relative;\n}\n.textfield-component-v2.small .MuiSvgIcon-root {\n top: 1.4rem !important;\n}\n.textfield-component-v2.disabled {\n opacity: 0.65;\n pointer-events: none;\n}\n.textfield-component-v2 .MuiSvgIcon-root ~ .MuiFormControl-root .MuiInputBase-input {\n padding-left: 42px;\n}\n.textfield-component-v2 .MuiSvgIcon-root {\n position: absolute;\n left: 1rem;\n top: 1.65rem;\n transform: translateY(-50%);\n z-index: 1;\n}\n\n.locationTextField-component-v2 {\n position: relative;\n}\n.locationTextField-component-v2 .autocomplete-dropdown-container {\n position: absolute;\n width: 100%;\n z-index: 10000;\n}\n\n.phoneTextField-component-v2 .MuiInputAdornment-root .MuiSelect-select {\n padding-right: 1.75rem !important;\n}\n.phoneTextField-component-v2 .MuiInputAdornment-root .MuiSelect-icon {\n display: inline-block;\n right: 0.5rem;\n}\n\n.react-international-phone-flag-emoji {\n width: 1.5rem;\n height: 1.5rem;\n}\n\n.colorTextField-component-v2 {\n position: relative;\n}\n.colorTextField-component-v2 .boxedColor {\n position: absolute;\n width: 20px;\n height: 20px;\n border-radius: 20px;\n left: 1rem;\n top: 1.65rem;\n transform: translateY(-50%);\n z-index: 1;\n}\n.colorTextField-component-v2 .boxedColor .MuiSvgIcon-root {\n width: unset;\n height: unset;\n}\n.colorTextField-component-v2 .boxedColor::after {\n position: absolute;\n width: 6px;\n height: 6px;\n content: \"\";\n background-color: var(--white, #FFFFFF);\n border-radius: 20px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n}\n.colorTextField-component-v2 .boxedColor ~ .textfield-component-v2 .MuiInputBase-input {\n padding-left: 44px;\n}\n.colorTextField-component-v2.bottom .react-colorful {\n top: 3.5rem;\n}\n.colorTextField-component-v2.top .react-colorful {\n bottom: 4rem;\n}\n.colorTextField-component-v2 .react-colorful {\n width: 100%;\n position: absolute;\n}";
7657
7692
  styleInject(css_248z$v);
7658
7693
 
7659
7694
  var TextField = forwardRef(function (_a, ref) {
7660
- var _b = _a.className, className = _b === void 0 ? "" : _b, label = _a.label, timeout = _a.timeout, labelTooltipText = _a.labelTooltipText, disabled = _a.disabled; _a.useBareBoneInput; var onChange = _a.onChange, multiline = _a.multiline, inputProps = _a.inputProps, iconName = _a.iconName, onKeyDown = _a.onKeyDown, props = __rest(_a, ["className", "label", "timeout", "labelTooltipText", "disabled", "useBareBoneInput", "onChange", "multiline", "inputProps", "iconName", "onKeyDown"]);
7695
+ var _b = _a.className, className = _b === void 0 ? "" : _b, label = _a.label, timeout = _a.timeout, labelTooltipText = _a.labelTooltipText, disabled = _a.disabled; _a.useBareBoneInput; var onChange = _a.onChange, multiline = _a.multiline, inputProps = _a.inputProps, iconName = _a.iconName, onKeyDown = _a.onKeyDown, size = _a.size, props = __rest(_a, ["className", "label", "timeout", "labelTooltipText", "disabled", "useBareBoneInput", "onChange", "multiline", "inputProps", "iconName", "onKeyDown", "size"]);
7661
7696
  var cLabel = label;
7662
7697
  var timeoutRef = useRef(undefined);
7663
7698
  function onChangeHandler(e) {
@@ -7704,9 +7739,9 @@ var TextField = forwardRef(function (_a, ref) {
7704
7739
  onKeyDown && onKeyDown(event);
7705
7740
  }
7706
7741
  inputProps = __assign({ maxLength: 256 }, inputProps);
7707
- return React__default.createElement(Box$1, { className: "textfield-component-v2 ".concat(className, " ").concat(disabled ? "disabled" : "", " ") },
7742
+ return React__default.createElement(Box$1, { className: "textfield-component-v2 ".concat(className, " ").concat(disabled ? "disabled" : "", " ").concat(size) },
7708
7743
  iconName && React__default.createElement(Icon, { name: iconName }),
7709
- React__default.createElement(MUITextField, __assign({}, props, { inputProps: inputProps, onChange: onChangeHandler, label: cLabel, disabled: disabled, onKeyDown: handleKeyDown, multiline: multiline, inputRef: ref })));
7744
+ React__default.createElement(MUITextField, __assign({}, props, { inputProps: inputProps, onChange: onChangeHandler, label: cLabel, disabled: disabled, onKeyDown: handleKeyDown, multiline: multiline, inputRef: ref, size: size })));
7710
7745
  });
7711
7746
 
7712
7747
  var css_248z$u = ".assetmanager-component-v2 {\n box-shadow: 0 0 15px 0 rgba(0, 0, 0, 0.15);\n background: var(--background-color-1, var(--white, #FFFFFF));\n min-width: 25rem;\n width: 100%;\n}\n.assetmanager-component-v2 .loadingContainer-component-v2 {\n padding: 3rem;\n}\n.assetmanager-component-v2 .container {\n padding: 0.75rem;\n}\n.assetmanager-component-v2 .container > div.textInputContainer {\n display: flex;\n border: solid 1px var(--wild-sand, #dddddd);\n border-radius: 6px;\n justify-content: flex-start;\n align-items: center;\n}\n.assetmanager-component-v2 .container > div.textInputContainer > div .MuiSvgIcon-root {\n display: block;\n cursor: pointer;\n}\n.assetmanager-component-v2 .container > div.textInputContainer > div:first-child {\n padding: 0 0.75rem 0 0.75rem;\n height: 100%;\n}\n.assetmanager-component-v2 .container > div.textInputContainer > div:last-child:not(.textfield-component-v2) {\n padding: 0 0.875rem;\n height: 100%;\n}\n.assetmanager-component-v2 .container > div.textInputContainer .textfield-component-v2 {\n width: 100%;\n}\n.assetmanager-component-v2 .container > div.textInputContainer .textfield-component-v2 fieldset {\n outline: none !important;\n border: none !important;\n}\n.assetmanager-component-v2 .container > div.textInputContainer .textfield-component-v2 input {\n padding: 0.5rem 0 !important;\n}\n.assetmanager-component-v2 .container .optionsListingContainer {\n padding: 0 1.25rem 0.5rem 1.25rem;\n margin: 1.25rem 0 0.5rem 0;\n max-height: 20rem;\n overflow-y: auto;\n}\n.assetmanager-component-v2 .container .optionsListingContainer button {\n text-transform: capitalize;\n}\n.assetmanager-component-v2 .container .optionsListingContainer::-webkit-scrollbar {\n display: block;\n}\n.assetmanager-component-v2 .container .optionsListingContainer::-webkit-scrollbar-track:horizontal {\n position: absolute;\n bottom: -20px;\n}\n.assetmanager-component-v2 .container .optionsListingContainer::-webkit-scrollbar-track:vertical {\n border-bottom-left-radius: 0 !important;\n border-bottom-right-radius: 8px !important;\n border-top-right-radius: 8px !important;\n}\n.assetmanager-component-v2 .container .optionsListingContainer::-webkit-scrollbar-track {\n height: 2.5rem;\n width: 2.5rem;\n padding: 2rem;\n background-clip: content-box;\n border-bottom-left-radius: 8px;\n}\n.assetmanager-component-v2 .container .optionsListingContainer::-webkit-scrollbar-thumb {\n background: var(--body-font-color-2, var(--silver, #9B9B9B));\n border-radius: 24px;\n border-top: 5px solid var(--background-color-1, var(--white, #FFFFFF));\n border-bottom: 5px solid var(--background-color-1, var(--white, #FFFFFF));\n border-right: 5px solid var(--background-color-1, var(--white, #FFFFFF));\n border-left: 5px solid var(--background-color-1, var(--white, #FFFFFF));\n}\n.assetmanager-component-v2 .container .optionsListingContainer > div:first-child:not(.listItem) {\n padding-bottom: 0.75rem;\n text-transform: uppercase;\n font-weight: 700;\n color: var(--body-font-color, var(--dark-matter, #2B2B2B));\n}\n.assetmanager-component-v2 .container .optionsListingContainer > p.h8 {\n margin-bottom: 1rem;\n color: var(--body-font-color, var(--dark-matter, #2B2B2B));\n}\n.assetmanager-component-v2 .container .optionsListingContainer p.h8 {\n flex: 1;\n font-family: proxima-nova, Lucida Grande, Lucida Sans Unicode, Lucida Sans, Geneva, Verdana, sans-serif;\n text-transform: uppercase;\n font-weight: 700;\n line-height: 1rem;\n font-size: 0.75rem;\n}\n.assetmanager-component-v2 .container .optionsListingContainer .listItem {\n display: flex;\n justify-content: space-between;\n align-items: center;\n min-height: 2rem;\n}\n.assetmanager-component-v2 .container .optionsListingContainer .listItem p.h8 {\n color: var(--body-font-color-2, var(--silver, #9B9B9B));\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n}\n.assetmanager-component-v2 .container .optionsListingContainer .listItem > .MuiSvgIcon-root {\n margin-right: 1rem;\n}\n.assetmanager-component-v2 .container .optionsListingContainer .listItem.selected p.h8 {\n color: var(--secondary-brand-color, var(--teal, #0ABDAE));\n padding-right: 1rem;\n max-width: 100%;\n}\n.assetmanager-component-v2 .container .optionsListingContainer .listItem.selected .MuiSvgIcon-root span svg path {\n fill: var(--secondary-brand-color, var(--teal, #0ABDAE));\n}\n.assetmanager-component-v2 .container .optionsListingContainer .listItem .buttonContainer {\n margin-left: 1rem;\n visibility: hidden;\n}\n.assetmanager-component-v2 .container .optionsListingContainer .listItem .buttonContainer button:nth-child(2) {\n margin-left: 0.5rem;\n}\n.assetmanager-component-v2 .container .optionsListingContainer .listItem:hover .buttonContainer {\n visibility: visible;\n}\n.assetmanager-component-v2 > button:last-child {\n width: 100%;\n text-transform: uppercase;\n font-family: proxima-nova, Lucida Grande, Lucida Sans Unicode, Lucida Sans, Geneva, Verdana, sans-serif;\n height: 3rem;\n border-top: 1px solid var(--wild-sand, #dddddd) !important;\n outline: none;\n border-radius: 0;\n font-weight: 700;\n}";
@@ -11691,6 +11726,57 @@ function renderPage(_a) {
11691
11726
  });
11692
11727
  }
11693
11728
 
11729
+ var BASE_URL = function () { return uiKitConfig.GATEWAY_PROXY + "/pats"; };
11730
+ function listPats(_a) {
11731
+ var page = _a.page, perPage = _a.perPage, status = _a.status;
11732
+ return callApi({
11733
+ url: BASE_URL(),
11734
+ query: camelCase({ page: page, per_page: perPage, status: status }),
11735
+ fetchOptions: { method: EMethods.get }
11736
+ });
11737
+ }
11738
+ function getPat(_a) {
11739
+ var keyPrefix = _a.keyPrefix;
11740
+ return callApi({
11741
+ url: "".concat(BASE_URL(), "/").concat(keyPrefix),
11742
+ fetchOptions: { method: EMethods.get }
11743
+ });
11744
+ }
11745
+ function createPat(_a) {
11746
+ var name = _a.name, scopes = _a.scopes, expiresAt = _a.expiresAt, allowedAccountIds = _a.allowedAccountIds;
11747
+ return callApi({
11748
+ url: BASE_URL(),
11749
+ fetchOptions: {
11750
+ method: EMethods.post,
11751
+ body: { name: name, scopes: scopes, expires_at: expiresAt !== null && expiresAt !== void 0 ? expiresAt : null, allowed_account_ids: allowedAccountIds !== null && allowedAccountIds !== void 0 ? allowedAccountIds : null }
11752
+ }
11753
+ });
11754
+ }
11755
+ function updatePat(_a) {
11756
+ var keyPrefix = _a.keyPrefix, name = _a.name, scopes = _a.scopes, allowedAccountIds = _a.allowedAccountIds;
11757
+ var body = {};
11758
+ if (name !== undefined)
11759
+ body.name = name;
11760
+ if (scopes !== undefined)
11761
+ body.scopes = scopes;
11762
+ if (allowedAccountIds !== undefined)
11763
+ body.allowed_account_ids = allowedAccountIds;
11764
+ return callApi({
11765
+ url: "".concat(BASE_URL(), "/").concat(keyPrefix),
11766
+ fetchOptions: {
11767
+ method: EMethods.patch,
11768
+ body: body
11769
+ }
11770
+ });
11771
+ }
11772
+ function revokePat(_a) {
11773
+ var keyPrefix = _a.keyPrefix;
11774
+ return callApi({
11775
+ url: "".concat(BASE_URL(), "/").concat(keyPrefix),
11776
+ fetchOptions: { method: EMethods.delete }
11777
+ });
11778
+ }
11779
+
11694
11780
  function listPopups(_a) {
11695
11781
  return __awaiter(this, void 0, void 0, function () {
11696
11782
  var options = __rest(_a, []);
@@ -12792,6 +12878,47 @@ var PageModel = /** @class */ (function (_super) {
12792
12878
  return PageModel;
12793
12879
  }(ListPageModel));
12794
12880
 
12881
+ var PersonalAccessTokenModel = /** @class */ (function () {
12882
+ function PersonalAccessTokenModel(params) {
12883
+ this.key_prefix = params.key_prefix;
12884
+ this.name = params.name;
12885
+ this.status = params.status;
12886
+ this.scopes = params.scopes;
12887
+ this.allowed_account_ids = params.allowed_account_ids;
12888
+ this.created_at = params.created_at;
12889
+ this.expires_at = params.expires_at;
12890
+ this.revoked_at = params.revoked_at;
12891
+ }
12892
+ PersonalAccessTokenModel.prototype.toJson = function () { return modelToJson(this); };
12893
+ PersonalAccessTokenModel.prototype.set = function (property, value) { modelSet(this, property, value); };
12894
+ PersonalAccessTokenModel.prototype.update = function (_a) {
12895
+ return __awaiter(this, arguments, void 0, function (_b) {
12896
+ var _this = this;
12897
+ var name = _b.name, scopes = _b.scopes, allowedAccountIds = _b.allowedAccountIds;
12898
+ return __generator(this, function (_c) {
12899
+ return [2 /*return*/, updatePat({ keyPrefix: this.key_prefix, name: name, scopes: scopes, allowedAccountIds: allowedAccountIds })
12900
+ .then(function (data) {
12901
+ trackEvent(EEvents.PAT_UPDATED, { key_prefix: _this.key_prefix });
12902
+ return new PersonalAccessTokenModel(data.data);
12903
+ })];
12904
+ });
12905
+ });
12906
+ };
12907
+ PersonalAccessTokenModel.prototype.revoke = function () {
12908
+ return __awaiter(this, void 0, void 0, function () {
12909
+ var _this = this;
12910
+ return __generator(this, function (_a) {
12911
+ return [2 /*return*/, revokePat({ keyPrefix: this.key_prefix })
12912
+ .then(function (data) {
12913
+ trackEvent(EEvents.PAT_REVOKED, { key_prefix: _this.key_prefix });
12914
+ return new PersonalAccessTokenModel(data.data);
12915
+ })];
12916
+ });
12917
+ });
12918
+ };
12919
+ return PersonalAccessTokenModel;
12920
+ }());
12921
+
12795
12922
  var EPopupTriggerType;
12796
12923
  (function (EPopupTriggerType) {
12797
12924
  EPopupTriggerType["on_page_load"] = "on_page_load";
@@ -18888,6 +19015,298 @@ function ResourceEdit(_a) {
18888
19015
  support && React__default.createElement(Box, { className: "resource-support ".concat(!open ? "open" : "hidden") }, support));
18889
19016
  }
18890
19017
 
19018
+ // Scope implication rules
19019
+ var SCOPE_IMPLICATIONS = {
19020
+ "write": ["read"],
19021
+ "delete": ["read"],
19022
+ "send": ["read"],
19023
+ "import": ["read", "write"],
19024
+ "export": ["read"],
19025
+ "admin": ["read", "write", "delete"],
19026
+ };
19027
+ var SCOPE_CATEGORIES = [
19028
+ {
19029
+ id: "audience",
19030
+ label: "Audience",
19031
+ adminOnly: false,
19032
+ resources: [
19033
+ { resource: "lists", label: "Lists", actions: ["read", "write", "delete"] },
19034
+ { resource: "contacts", label: "Contacts", actions: ["read", "write", "delete", "import", "export"] },
19035
+ { resource: "segments", label: "Segments", actions: ["read", "write", "delete"] },
19036
+ { resource: "tags", label: "Tags", actions: ["read", "write", "delete"] },
19037
+ { resource: "custom_attributes", label: "Custom Attributes", actions: ["read", "write", "delete"] },
19038
+ { resource: "interests", label: "Interests", actions: ["read", "write", "delete"] },
19039
+ ]
19040
+ },
19041
+ {
19042
+ id: "suppressions",
19043
+ label: "Suppressions",
19044
+ adminOnly: false,
19045
+ resources: [
19046
+ { resource: "suppressions", label: "Suppressions", actions: ["read", "write", "delete"] },
19047
+ ]
19048
+ },
19049
+ {
19050
+ id: "campaigns",
19051
+ label: "Campaigns",
19052
+ adminOnly: false,
19053
+ resources: [
19054
+ { resource: "campaigns", label: "Campaigns", actions: ["read", "write", "delete", "send"] },
19055
+ { resource: "campaign_blueprints", label: "Campaign Blueprints", actions: ["read", "write", "delete"] },
19056
+ ]
19057
+ },
19058
+ {
19059
+ id: "templates",
19060
+ label: "Templates",
19061
+ adminOnly: false,
19062
+ resources: [
19063
+ { resource: "templates", label: "Templates", actions: ["read", "write", "delete"] },
19064
+ ]
19065
+ },
19066
+ {
19067
+ id: "emailapi",
19068
+ label: "Email API",
19069
+ adminOnly: false,
19070
+ resources: [
19071
+ { resource: "email_api", label: "Email API", actions: ["read", "send"] },
19072
+ ]
19073
+ },
19074
+ {
19075
+ id: "forms",
19076
+ label: "Forms",
19077
+ adminOnly: false,
19078
+ resources: [
19079
+ { resource: "forms", label: "Forms", actions: ["read", "write", "delete"] },
19080
+ { resource: "preference_centers", label: "Preference Centers", actions: ["read", "write", "delete"] },
19081
+ ]
19082
+ },
19083
+ {
19084
+ id: "deliverability",
19085
+ label: "Deliverability",
19086
+ adminOnly: false,
19087
+ resources: [
19088
+ { resource: "senders", label: "Senders", actions: ["read", "write", "delete"] },
19089
+ { resource: "dkim", label: "DKIM", actions: ["read", "write", "delete"] },
19090
+ { resource: "domains", label: "Domains", actions: ["read", "write", "delete"] },
19091
+ { resource: "logos", label: "Logos", actions: ["read", "write", "delete"] },
19092
+ ]
19093
+ },
19094
+ {
19095
+ id: "webhooks",
19096
+ label: "Webhooks",
19097
+ adminOnly: false,
19098
+ resources: [
19099
+ { resource: "webhooks", label: "Webhooks", actions: ["read", "write", "delete"] },
19100
+ ]
19101
+ },
19102
+ {
19103
+ id: "analytics",
19104
+ label: "Analytics",
19105
+ adminOnly: false,
19106
+ resources: [
19107
+ { resource: "reports", label: "Reports", actions: ["read", "export"] },
19108
+ { resource: "logs", label: "Logs", actions: ["read", "export"] },
19109
+ { resource: "links", label: "Links", actions: ["read"] },
19110
+ { resource: "tasks", label: "Tasks", actions: ["read"] },
19111
+ ]
19112
+ },
19113
+ {
19114
+ id: "account",
19115
+ label: "Account",
19116
+ adminOnly: false,
19117
+ resources: [
19118
+ { resource: "account", label: "Account", actions: ["read", "write"] },
19119
+ ]
19120
+ },
19121
+ {
19122
+ id: "users_admin",
19123
+ label: "Users (Admin)",
19124
+ adminOnly: true,
19125
+ resources: [
19126
+ { resource: "users", label: "Users", actions: ["read", "write", "admin"] },
19127
+ ]
19128
+ },
19129
+ {
19130
+ id: "subaccounts_admin",
19131
+ label: "Sub-accounts (Admin)",
19132
+ adminOnly: true,
19133
+ resources: [
19134
+ { resource: "sub_accounts", label: "Sub-accounts", actions: ["read", "write", "admin"] },
19135
+ ]
19136
+ },
19137
+ {
19138
+ id: "tokens_admin",
19139
+ label: "Tokens (Admin)",
19140
+ adminOnly: true,
19141
+ resources: [
19142
+ { resource: "tokens", label: "Access Tokens", actions: ["read", "admin"] },
19143
+ ]
19144
+ },
19145
+ ];
19146
+ // Helper to get all scopes for a category
19147
+ function getCategoryScopes(categoryId) {
19148
+ var cat = SCOPE_CATEGORIES.find(function (c) { return c.id === categoryId; });
19149
+ if (!cat)
19150
+ return [];
19151
+ return cat.resources.flatMap(function (r) { return r.actions.map(function (a) { return "".concat(r.resource, ":").concat(a); }); });
19152
+ }
19153
+ var SCOPE_PRESETS = [
19154
+ {
19155
+ id: "readonly",
19156
+ label: "Read-only (all)",
19157
+ scopes: SCOPE_CATEGORIES
19158
+ .filter(function (c) { return !c.adminOnly; })
19159
+ .flatMap(function (c) { return c.resources.map(function (r) { return "".concat(r.resource, ":read"); }); })
19160
+ },
19161
+ {
19162
+ id: "full",
19163
+ label: "Full access",
19164
+ scopes: SCOPE_CATEGORIES
19165
+ .filter(function (c) { return !c.adminOnly; })
19166
+ .flatMap(function (c) { return c.resources.flatMap(function (r) { return r.actions.map(function (a) { return "".concat(r.resource, ":").concat(a); }); }); })
19167
+ },
19168
+ {
19169
+ id: "campaigns",
19170
+ label: "Campaigns manager",
19171
+ scopes: __spreadArray(__spreadArray(__spreadArray([], getCategoryScopes("campaigns"), true), getCategoryScopes("templates"), true), [
19172
+ "senders:read",
19173
+ "reports:read",
19174
+ ], false)
19175
+ },
19176
+ {
19177
+ id: "contacts",
19178
+ label: "Contact manager",
19179
+ scopes: __spreadArray(__spreadArray([], getCategoryScopes("audience"), true), getCategoryScopes("suppressions"), true)
19180
+ },
19181
+ {
19182
+ id: "developer",
19183
+ label: "Developer",
19184
+ scopes: __spreadArray(__spreadArray(__spreadArray([], getCategoryScopes("emailapi"), true), getCategoryScopes("webhooks"), true), [
19185
+ "reports:read", "logs:read",
19186
+ ], false)
19187
+ },
19188
+ ];
19189
+
19190
+ function getImpliedScopes(scope) {
19191
+ var _a = scope.split(":"), resource = _a[0], action = _a[1];
19192
+ var implied = SCOPE_IMPLICATIONS[action] || [];
19193
+ return implied.map(function (a) { return "".concat(resource, ":").concat(a); });
19194
+ }
19195
+ function ScopePicker(_a) {
19196
+ var value = _a.value, onChange = _a.onChange, _b = _a.isPartner, isPartner = _b === void 0 ? false : _b, _c = _a.disabled, disabled = _c === void 0 ? false : _c;
19197
+ var _d = useState(new Set()), expandedCategories = _d[0], setExpandedCategories = _d[1];
19198
+ var selectedSet = useMemo(function () { return new Set(value); }, [value]);
19199
+ var visibleCategories = useMemo(function () { return SCOPE_CATEGORIES.filter(function (c) { return !c.adminOnly || isPartner; }); }, [isPartner]);
19200
+ var toggleCategory = useCallback(function (categoryId) {
19201
+ setExpandedCategories(function (prev) {
19202
+ var next = new Set(prev);
19203
+ if (next.has(categoryId))
19204
+ next.delete(categoryId);
19205
+ else
19206
+ next.add(categoryId);
19207
+ return next;
19208
+ });
19209
+ }, []);
19210
+ var handleScopeToggle = useCallback(function (scope, checked) {
19211
+ if (disabled)
19212
+ return;
19213
+ var next = new Set(selectedSet);
19214
+ if (checked) {
19215
+ next.add(scope);
19216
+ // Add implied scopes
19217
+ getImpliedScopes(scope).forEach(function (s) { return next.add(s); });
19218
+ }
19219
+ else {
19220
+ next.delete(scope);
19221
+ }
19222
+ onChange(Array.from(next));
19223
+ }, [selectedSet, onChange, disabled]);
19224
+ var handleCategorySelectAll = useCallback(function (categoryId, checked) {
19225
+ if (disabled)
19226
+ return;
19227
+ var cat = SCOPE_CATEGORIES.find(function (c) { return c.id === categoryId; });
19228
+ if (!cat)
19229
+ return;
19230
+ var next = new Set(selectedSet);
19231
+ cat.resources.forEach(function (r) {
19232
+ r.actions.forEach(function (a) {
19233
+ var scope = "".concat(r.resource, ":").concat(a);
19234
+ if (checked) {
19235
+ next.add(scope);
19236
+ getImpliedScopes(scope).forEach(function (s) { return next.add(s); });
19237
+ }
19238
+ else {
19239
+ next.delete(scope);
19240
+ }
19241
+ });
19242
+ });
19243
+ onChange(Array.from(next));
19244
+ }, [selectedSet, onChange, disabled]);
19245
+ var handlePreset = useCallback(function (presetId) {
19246
+ if (disabled)
19247
+ return;
19248
+ var preset = SCOPE_PRESETS.find(function (p) { return p.id === presetId; });
19249
+ if (!preset)
19250
+ return;
19251
+ // Expand all implied scopes
19252
+ var expanded = new Set();
19253
+ preset.scopes.forEach(function (s) {
19254
+ expanded.add(s);
19255
+ getImpliedScopes(s).forEach(function (implied) { return expanded.add(implied); });
19256
+ });
19257
+ onChange(Array.from(expanded));
19258
+ }, [onChange, disabled]);
19259
+ var isCategoryAllSelected = useCallback(function (categoryId) {
19260
+ var cat = SCOPE_CATEGORIES.find(function (c) { return c.id === categoryId; });
19261
+ if (!cat)
19262
+ return false;
19263
+ return cat.resources.every(function (r) { return r.actions.every(function (a) { return selectedSet.has("".concat(r.resource, ":").concat(a)); }); });
19264
+ }, [selectedSet]);
19265
+ var isImplied = useCallback(function (scope) {
19266
+ // Scope is implied (auto-selected due to another scope) if removing it wouldn't break anything
19267
+ var _a = scope.split(":"), resource = _a[0], action = _a[1];
19268
+ // Check if any other selected scope implies this one
19269
+ return Array.from(selectedSet).some(function (s) {
19270
+ if (s === scope)
19271
+ return false;
19272
+ var _a = s.split(":"), r = _a[0], a = _a[1];
19273
+ if (r !== resource)
19274
+ return false;
19275
+ return (SCOPE_IMPLICATIONS[a] || []).includes(action);
19276
+ });
19277
+ }, [selectedSet]);
19278
+ return (React__default.createElement("div", { className: "scopePicker", "aria-label": "Permission scope picker" },
19279
+ React__default.createElement("div", { className: "scopePicker__presets" },
19280
+ React__default.createElement("span", { className: "scopePicker__presetsLabel" }, "Quick presets:"),
19281
+ React__default.createElement("div", { className: "scopePicker__presetButtons" }, SCOPE_PRESETS.map(function (preset) { return (React__default.createElement("button", { key: preset.id, type: "button", className: "scopePicker__presetBtn", onClick: function () { return handlePreset(preset.id); }, disabled: disabled }, preset.label)); }))),
19282
+ React__default.createElement("div", { className: "scopePicker__categories" }, visibleCategories.map(function (category) {
19283
+ var isExpanded = expandedCategories.has(category.id);
19284
+ var allSelected = isCategoryAllSelected(category.id);
19285
+ return (React__default.createElement("div", { key: category.id, className: "scopePicker__category ".concat(category.adminOnly ? "scopePicker__category--admin" : "") },
19286
+ React__default.createElement("div", { className: "scopePicker__categoryHeader" },
19287
+ React__default.createElement("label", { className: "scopePicker__categorySelect" },
19288
+ React__default.createElement("input", { type: "checkbox", checked: allSelected, onChange: function (e) { return handleCategorySelectAll(category.id, e.target.checked); }, disabled: disabled, "aria-label": "Select all ".concat(category.label, " scopes") }),
19289
+ React__default.createElement("span", { className: "scopePicker__categoryLabel" }, category.label)),
19290
+ React__default.createElement("button", { type: "button", className: "scopePicker__categoryToggle", onClick: function () { return toggleCategory(category.id); }, "aria-expanded": isExpanded, "aria-label": "".concat(isExpanded ? "Collapse" : "Expand", " ").concat(category.label) }, isExpanded ? "▲" : "▼")),
19291
+ isExpanded && (React__default.createElement("div", { className: "scopePicker__categoryBody" }, category.resources.map(function (resource) { return (React__default.createElement("div", { key: resource.resource, className: "scopePicker__resource" },
19292
+ React__default.createElement("span", { className: "scopePicker__resourceLabel" }, resource.label),
19293
+ React__default.createElement("div", { className: "scopePicker__actions" }, resource.actions.map(function (action) {
19294
+ var scope = "".concat(resource.resource, ":").concat(action);
19295
+ var checked = selectedSet.has(scope);
19296
+ var implied = isImplied(scope);
19297
+ return (React__default.createElement("label", { key: action, className: "scopePicker__action ".concat(implied ? "scopePicker__action--implied" : ""), title: implied ? "Automatically included by another selected permission" : undefined },
19298
+ React__default.createElement("input", { type: "checkbox", checked: checked, onChange: function (e) { return handleScopeToggle(scope, e.target.checked); }, disabled: disabled || implied, "aria-label": "".concat(resource.label, " ").concat(action) }),
19299
+ React__default.createElement("span", null, action)));
19300
+ })))); })))));
19301
+ })),
19302
+ value.length > 0 && (React__default.createElement("details", { className: "scopePicker__summary" },
19303
+ React__default.createElement("summary", null,
19304
+ "Selected permissions (",
19305
+ value.length,
19306
+ ")"),
19307
+ React__default.createElement("div", { className: "scopePicker__summaryList" }, value.sort().map(function (scope) { return (React__default.createElement("span", { key: scope, className: "scopePicker__summaryChip" }, scope)); }))))));
19308
+ }
19309
+
18891
19310
  var css_248z$2 = ".sideMenu-component-v2 {\n z-index: 8000;\n width: -moz-fit-content;\n width: fit-content;\n}\n.sideMenu-component-v2 .sideMenu-spacer {\n display: none;\n}\n.sideMenu-component-v2.minified:hover .sideMenu-spacer {\n display: block;\n}\n.sideMenu-component-v2 .sideMenu-wrapper {\n z-index: 8000;\n display: flex;\n height: 100%;\n flex-direction: column;\n width: 20rem;\n min-width: 20rem;\n max-width: 20rem;\n padding: 1rem;\n background: var(--shade100, #F3F2F2);\n position: relative;\n box-sizing: border-box;\n}\n.sideMenu-component-v2 .sideMenu-wrapper::-webkit-scrollbar {\n display: block;\n}\n.sideMenu-component-v2 .sideMenu-wrapper::-webkit-scrollbar-track:horizontal {\n position: absolute;\n bottom: -20px;\n}\n.sideMenu-component-v2 .sideMenu-wrapper::-webkit-scrollbar-track:vertical {\n border-bottom-left-radius: 0 !important;\n border-bottom-right-radius: 8px !important;\n border-top-right-radius: 8px !important;\n}\n.sideMenu-component-v2 .sideMenu-wrapper::-webkit-scrollbar-track {\n height: 2.5rem;\n width: 2.5rem;\n padding: 2rem;\n background-clip: content-box;\n border-bottom-left-radius: 8px;\n}\n.sideMenu-component-v2 .sideMenu-wrapper::-webkit-scrollbar-thumb {\n background: var(--body-font-color-2, var(--silver, #9B9B9B));\n border-radius: 24px;\n border-top: 5px solid var(--background-color-1, var(--white, #FFFFFF));\n border-bottom: 5px solid var(--background-color-1, var(--white, #FFFFFF));\n border-right: 5px solid var(--background-color-1, var(--white, #FFFFFF));\n border-left: 5px solid var(--background-color-1, var(--white, #FFFFFF));\n}\n.sideMenu-component-v2 .sideMenu-wrapper.minified:hover {\n box-shadow: 0px 0px 32px 0px rgba(0, 0, 0, 0.15);\n position: absolute !important;\n}\n.sideMenu-component-v2 .sideMenu-wrapper.minified:not(:hover) {\n gap: 1rem;\n max-width: 73px;\n min-width: 73px;\n}\n.sideMenu-component-v2 .sideMenu-wrapper.minified:not(:hover) .sideMenuHeader {\n display: none;\n}\n.sideMenu-component-v2 .sideMenu-wrapper.minified:not(:hover) .subNav-component-v2 button {\n padding: 0.75rem;\n margin-right: 0;\n}\n.sideMenu-component-v2 .sideMenu-wrapper.minified:not(:hover) .subNav-component-v2 button:not(.selected) {\n display: none;\n}\n.sideMenu-component-v2 .sideMenu-wrapper.minified:not(:hover) .sideMenuContainer-component-v2 .menuItemRow .sideMenuItem-component-v2.subItem,\n.sideMenu-component-v2 .sideMenu-wrapper.minified:not(:hover) .sideMenuContainer-component-v2 .menuItemRow .sideMenuItem-component-v2 .chevron {\n display: none;\n}\n.sideMenu-component-v2 .sideMenu-wrapper.minified:not(:hover) .sideMenuContainer-component-v2 .menuItemRow .sideMenuItem-component-v2 a {\n justify-content: center;\n}\n.sideMenu-component-v2 .sideMenu-wrapper.minified:not(:hover) .sideMenuContainer-component-v2 .menuItemRow .sideMenuItem-component-v2 a .MuiStack-root {\n display: none;\n}\n.sideMenu-component-v2 .sideMenu-wrapper.minified:not(:hover) .footer > .avatar-component-v2 {\n display: block;\n}\n.sideMenu-component-v2 .sideMenu-wrapper.minified:not(:hover) .footer button {\n display: none;\n}\n.sideMenu-component-v2 .sideMenu-wrapper .sideMenuHeader {\n margin-bottom: 1.5rem;\n}\n.sideMenu-component-v2 .sideMenu-wrapper .sideMenuHeader .minifyIcon {\n cursor: pointer;\n}\n.sideMenu-component-v2 .sideMenu-wrapper .search-component-v2 {\n margin-top: 1.5rem;\n position: relative;\n}\n.sideMenu-component-v2 .sideMenu-wrapper .search-component-v2 .inputContainer {\n padding: 0.75rem 1rem;\n box-shadow: unset;\n border-radius: 8px;\n border: 1px solid var(--shade200, #DBDADA);\n}\n.sideMenu-component-v2 .sideMenu-wrapper .search-component-v2:after {\n position: absolute;\n left: 0;\n bottom: -1.5rem;\n content: \"\";\n display: block;\n width: 100%;\n height: 1.5rem;\n background: linear-gradient(var(--shade100, #F3F2F2) 0%, transparent 100%);\n}\n.sideMenu-component-v2 .sideMenu-wrapper .subNav-component-v2 {\n width: 100%;\n position: relative;\n justify-content: space-between;\n}\n.sideMenu-component-v2 .sideMenu-wrapper .subNav-component-v2:after {\n position: absolute;\n left: 0;\n bottom: -1.5rem;\n content: \"\";\n display: block;\n width: 100%;\n height: 1.5rem;\n background: linear-gradient(var(--shade100, #F3F2F2) 0%, transparent 100%);\n}\n.sideMenu-component-v2 .sideMenu-wrapper .subNav-component-v2 button {\n flex: 1;\n}\n.sideMenu-component-v2 .sideMenu-wrapper .subNav-component-v2 button:not(.selected):not(:hover) {\n background: none;\n}\n.sideMenu-component-v2 .sideMenu-wrapper .subNav-component-v2 button:not(.selected):not(:hover) svg path:not(.noFill),\n.sideMenu-component-v2 .sideMenu-wrapper .subNav-component-v2 button:not(.selected):not(:hover) svg rect:not(.noFill) {\n fill: var(--secondary-brand-color, var(--teal, #0ABDAE));\n}\n.sideMenu-component-v2 .sideMenu-wrapper .subNav-component-v2 button:not(.selected):not(:hover) svg path.noFill,\n.sideMenu-component-v2 .sideMenu-wrapper .subNav-component-v2 button:not(.selected):not(:hover) svg rect.noFill {\n stroke: var(--secondary-brand-color, var(--teal, #0ABDAE));\n}\n.sideMenu-component-v2 .sideMenu-wrapper .sideMenuContainer-component-v2 {\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n}\n.sideMenu-component-v2 .sideMenu-wrapper .footer {\n position: relative;\n justify-self: flex-end;\n}\n.sideMenu-component-v2 .sideMenu-wrapper .footer:before {\n position: absolute;\n left: 0;\n top: -1.5rem;\n content: \"\";\n display: block;\n width: 100%;\n height: 1.5rem;\n background: linear-gradient(transparent 0, var(--shade100, #F3F2F2) 100%);\n}\n.sideMenu-component-v2 .sideMenu-wrapper .footer > .avatar-component-v2 {\n display: none;\n}\n\n.sideMenuContainer-component-v2 {\n flex: 1;\n overflow-y: auto;\n}\n.sideMenuContainer-component-v2 .menuItemsContainer > .menuItemRow.divider {\n margin-top: 1rem;\n margin-bottom: 1rem;\n}\n.sideMenuContainer-component-v2 .menuItemsContainer > .menuItemRow.withSubItems.openedSubMenu .sideMenuItem-component-v2:nth-child(2) {\n margin-top: calc(0.5rem - 1px);\n}\n.sideMenuContainer-component-v2 .menuItemsContainer > .menuItemRow.withSubItems.openedSubMenu .sideMenuItem-component-v2:last-child {\n margin-bottom: calc(0.5rem - 1px);\n}\n.sideMenuContainer-component-v2 .menuItemsContainer > .menuItemRow.subSection {\n margin-top: 1rem;\n}\n.sideMenuContainer-component-v2 .menuItemsContainer > .menuItemRow:first-child {\n margin-top: 0;\n}\n.sideMenuContainer-component-v2 .menuItemsContainer .sideMenuItem-component-v2.subItem {\n margin-left: 2.75rem;\n}\n.sideMenuContainer-component-v2 .menuItemsContainer .sideMenuItem-component-v2.subItem > a,\n.sideMenuContainer-component-v2 .menuItemsContainer .sideMenuItem-component-v2.subItem > a > div > span {\n font-size: 0.875rem;\n}\n.sideMenuContainer-component-v2 .menuItemsContainer .sideMenuItem-component-v2.rotate .chevron {\n rotate: 180deg;\n}\n.sideMenuContainer-component-v2 .menuItemsContainer .sideMenuItem-component-v2.hasLocationSelected:hover a {\n cursor: default;\n background: unset !important;\n}\n\n.sideMenuItem-component-v2 {\n box-sizing: border-box;\n}\n.sideMenuItem-component-v2:hover a, .sideMenuItem-component-v2.selected a {\n background: var(--shade200, #DBDADA);\n}\n.sideMenuItem-component-v2.hasSubItemSelected > .MuiTypography-root .chevron {\n rotate: -90deg;\n}\n.sideMenuItem-component-v2 .avatar-component-v2 .MuiAvatar-root {\n border-color: var(--shade200, #DBDADA);\n background: var(--white, #FFFFFF);\n}\n.sideMenuItem-component-v2 .chevron {\n margin-left: 1rem;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.sideMenuItem-component-v2 a {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.75rem;\n border-radius: 8px;\n text-decoration: none !important;\n gap: 1rem;\n}\n.sideMenuItem-component-v2 a > .MuiStack-root {\n flex: 1;\n}\n.sideMenuItem-component-v2 a img {\n max-width: 80px;\n}\n.sideMenuItem-component-v2.soloItem a {\n border-radius: 16px;\n padding: 1.5rem;\n border: 1px solid var(--shade200, #DBDADA);\n}\n.sideMenuItem-component-v2.soloItem a:hover {\n border-color: var(--wild-sand, #dddddd);\n}\n.sideMenuItem-component-v2.soloItem .chevron {\n rotate: -90deg;\n}\n.sideMenuItem-component-v2.subSection {\n padding: 0.5rem 0.75rem 0.5rem 0.75rem;\n}";
18892
19311
  styleInject(css_248z$2);
18893
19312
 
@@ -19745,6 +20164,45 @@ var PagesFactory = /** @class */ (function () {
19745
20164
  return PagesFactory;
19746
20165
  }());
19747
20166
 
20167
+ var PersonalAccessTokensFactory = /** @class */ (function () {
20168
+ function PersonalAccessTokensFactory() {
20169
+ }
20170
+ PersonalAccessTokensFactory.list = function () {
20171
+ return __awaiter(this, arguments, void 0, function (_a) {
20172
+ var _b = _a === void 0 ? {} : _a, page = _b.page, perPage = _b.perPage, status = _b.status;
20173
+ return __generator(this, function (_c) {
20174
+ return [2 /*return*/, listPats({ page: page, perPage: perPage, status: status }).then(function (data) {
20175
+ data.data = data.data.map(function (pat) { return new PersonalAccessTokenModel(pat); });
20176
+ return data;
20177
+ })];
20178
+ });
20179
+ });
20180
+ };
20181
+ PersonalAccessTokensFactory.get = function (_a) {
20182
+ return __awaiter(this, arguments, void 0, function (_b) {
20183
+ var keyPrefix = _b.keyPrefix;
20184
+ return __generator(this, function (_c) {
20185
+ return [2 /*return*/, getPat({ keyPrefix: keyPrefix }).then(function (data) {
20186
+ return new PersonalAccessTokenModel(data.data);
20187
+ })];
20188
+ });
20189
+ });
20190
+ };
20191
+ PersonalAccessTokensFactory.create = function (_a) {
20192
+ return __awaiter(this, arguments, void 0, function (_b) {
20193
+ var name = _b.name, scopes = _b.scopes, expiresAt = _b.expiresAt, allowedAccountIds = _b.allowedAccountIds;
20194
+ return __generator(this, function (_c) {
20195
+ return [2 /*return*/, createPat({ name: name, scopes: scopes, expiresAt: expiresAt, allowedAccountIds: allowedAccountIds }).then(function (data) {
20196
+ var _a = data.data, plaintext = _a.plaintext, patData = __rest(_a, ["plaintext"]);
20197
+ trackEvent(EEvents.PAT_CREATED, { name: name, scopes: scopes });
20198
+ return { pat: new PersonalAccessTokenModel(patData), plaintext: plaintext };
20199
+ })];
20200
+ });
20201
+ });
20202
+ };
20203
+ return PersonalAccessTokensFactory;
20204
+ }());
20205
+
19748
20206
  var PopupsFactory = /** @class */ (function () {
19749
20207
  function PopupsFactory() {
19750
20208
  }
@@ -20129,4 +20587,4 @@ var UsersFactory = /** @class */ (function () {
20129
20587
  return UsersFactory;
20130
20588
  }());
20131
20589
 
20132
- export { AccountModel, AccountsFactory, ActionBarContainer, ActionBarContainerHandler, AssetManager, AutomationModel, AutomationsFactory, Avatar, BillingFactory, BrandWrapper, BrandsFactory, Button, ButtonMenu, CampaignModel, CampaignsFactory, Checkbox, Chip, CircularProgress, CodeInput, ColManager, ColorTextField, CommonFormModel, ContactModel, ContactsFactory, ContentSectionContainer, CountryDropdown, CustomDomainModel, CustomDomainsFactory, CustomerModel, DataTable, DataTableHead, DataTableRow, DateCalendar, DatePicker, DateTimeCalendar, DateTimePicker, Dialog, DialogActions, DialogHandler, DialogTitle, Divider, Drawer, DrawerHandler, DropMenu, Dropdown, EApiLanguages, EAssetManagerMatchType, ECampaignStatuses, ECertificateStatus, EDnsStatus, EEMailSummaryStatuses, EEditorType, EEmailAttachementTypes, EEmailLogType, EEmailLogTypeParam, EEmailProviders, EEmailStatuses, EEmailSummaryEngagement, EEvents, EIngressRouteStatus, EListAttributeType, EMethods, EOperatorTypes, EPageBranding, EPartialInfoPool, EPopupBranding, EPopupBrowserType, EPopupCloseButtonPosition, EPopupDeviceType, EPopupDisplayFrequency, EPopupPosition, EPopupTriggerType, EStorageType, ETaskType, ElementContains, Email, EmailAPIFactory, EmptyContent, EnhancedFormModel, FileUpload, FilterBar, FormModel, FormsFactory, FullBar, GenericWrapper, GenericWrapperContext, GroupedActions, Header, Icon, IconPill, InformationGroup, InlineTextEdit, LinearProgress, Link, ListCampaignModel, ListModel, ListPageModel, ListPopupModel, ListTemplateModel, ListsFactory, LoadingContainer, LocationTextField, Logo, MD5, MetricCard, Modal, ModalHandler, ModalHeading, Overlay, OverlayHandler, OverlayHeading, PageModel, PagesFactory, PhoneTextField, PopupModel, PopupsFactory, Radio, ResourceEdit, Search, SenderModel, SendersFactory, SideMenu, SideMenuContainer, SideMenuItem, SubNav, SummaryEnhancedFormModel, SuppressedEmailsFactory, SystemEmailsFactory, SystemEmailsModel, TagsFactory, TasksFactory, TemplateModel, TemplatesFactory, TextField, TimePicker, TimeSelector, Toggle, TopMenu, Typography, UserModel, UsersFactory, acceptListPolicy, addInterestsToContactsOfList, addPartialInformation, addSuppressedEmail, addToImpersonificationTree, amIImpersonating, amILoggedInService, archiveCampaign, areAllPropertiesEmpty, buildMUITheme, callApi, camelCase, camelToSnakeCase, cancelCampaign, capitalizeFirstLetter, cleanPostHogId, clearImpersonificationTree, clearStorage, copyToClipboard, createAccount, createBrand, createCampaign, createCampaignLogsExports, createCampaignsReportsExport, createContactsExport, createCustomDomain, createForm, createPage, createPopup, createSender, createSuppressedEmailExport, createTemplate, deepMergeObject, deleteAccount, deleteAnyAutomation, deleteAutomation, deleteCampaign, deleteCampaignsReportsExport, deleteContact, deleteCustomDomain, deleteForm, deleteList, deletePage, deletePartialInformation, deletePopup, deleteSender, deleteStorageItem, deleteSuppressedEmail, deleteTaskService, deleteTemplate, deleteUser, deleteWorkflow, descendingComparator, disableForm, disablePage, disablePopup, domainHasValidCertificateService, downloadCampaignLogExport, downloadCampaignsReportsExport, downloadContactsExport, downloadListLogExport, downloadSuppressedEmailExport, emptyAccountAddress, emptyAccountLimits, enableForm, enablePage, enablePopup, enrichBrand, enrichOrganization, enrichProfile, eventCondition, eventIdentify, eventLogout, fetchRetry, fetchRoute, findNestedProperty, formatNumber, getAccount, getAccountMetadata, getAccountReport, getAdjustedBillingCycle, getAllAutomationStats, getAutomation, getAutomationEmailContent, getAutomationExecutionsCount, getAutomationStats, getBeeTokenService, getBestLocalMatch, getBrand, getBrandService, getBrandUrl, getCalendarFormat, getCampaign, getCampaignLinks, getCampaignLinksReport, getCampaignLogs, getCampaignLogsExports, getCampaignReport, getCampaignRevisions, getCampaignsReportsExport, getComparator, getContactsExport, getCustomDomain, getCustomerProfile, getDate, getDomainFromEmail, getDomainsFromEmails, getDomainsService, getEmail, getEmailActivitySummary, getEmailReport, getEndOfDate, getForm, getHashQueryWithoutHistory, getIconSize, getList, getListLogs, getListReport, getNestedProperty, getPage, getPopup, getPropertyValue, getSender, getStartOfDate, getStorage, getSuppressedEmailExport, getTColor, getTaskService, getTemplate, getUnixTime, getUrlQueryParam, getUser, getUtmCookies, googlePlacesMapper, hasDecimal, impersonateService, initFieldValidation, initPostHog, isColorLight, isDomainValidService, isPublicEmailProviderService, isSimpleType, isValidEmail, isValidString, isValidUrl, lisTEmailTags, listAccounts, listAutomations, listCampaigns, listCampaignsReportsExports, listContacts, listCustomDomains, listDkimService, listEmailLogs, listForms, listList, listListAttributes, listListInterests, listPages, listPopups, listSenders, listSuppressedEmails, listSystemEmails, listTasksService, listTemplates, listUsers, listWorkflows, logOutService, loginService, miliToSecond, modelSet, modelToJson, originalBrand, patchAccountDomainsService, patchForm, popImpersonificationTree, postMessage, publishForm, publishPage, publishPopup, reScheduleCampaign, removeEmptyProperties, removeInterestsFromContactsOfList, removeQueryParams, removeTrailingChar, renderCampaign, renderEmail, renderForm, renderPage, renderPopup, renderPublicHtmlForm, renderTemplate, requestSupportService, resendEmail, resendVerificationEmail, resumeCampaign, saveList, scheduleCampaign, searchCustomerProfiles, sendCampaignTest, setBrandHeadElements, setStorage, shareTemplate, splitArray, splitObject, stableSort, startPromisePool, suspendAccount, suspendCampaign, tagContact, tagsContactsOfList, trackEvent, truncateEmail, truncateText, uiKitConfig, unArchiveCampaign, unScheduleCampaign, unSuspendAccount, unshareTemplate, unsubscribeContact, untagContact, untagContactsOfList, updateAccount, updateAndClearUrlParams, updateAnyAutomation, updateAutomation, updateCampaign, updatePage, updatePopup, updateSystemEmails, updateTemplate, updateUser, updateWorkflow, validateColor, validateEmail, validateGenericInput, validateUrl, verifyCustomDomain, verifyTrackingCnamesService, wait, whiteLabelBrand, whoAmi };
20590
+ export { AccountModel, AccountsFactory, ActionBarContainer, ActionBarContainerHandler, AssetManager, AutomationModel, AutomationsFactory, Avatar, BillingFactory, BrandWrapper, BrandsFactory, Button, ButtonMenu, CampaignModel, CampaignsFactory, Checkbox, Chip, CircularProgress, CodeInput, ColManager, ColorTextField, CommonFormModel, ContactModel, ContactsFactory, ContentSectionContainer, CountryDropdown, CustomDomainModel, CustomDomainsFactory, CustomerModel, DataTable, DataTableHead, DataTableRow, DateCalendar, DatePicker, DateTimeCalendar, DateTimePicker, Dialog, DialogActions, DialogHandler, DialogTitle, Divider, Drawer, DrawerHandler, DropMenu, Dropdown, EApiLanguages, EAssetManagerMatchType, ECampaignStatuses, ECertificateStatus, EDnsStatus, EEMailSummaryStatuses, EEditorType, EEmailAttachementTypes, EEmailLogType, EEmailLogTypeParam, EEmailProviders, EEmailStatuses, EEmailSummaryEngagement, EEvents, EIngressRouteStatus, EListAttributeType, EMethods, EOperatorTypes, EPageBranding, EPartialInfoPool, EPopupBranding, EPopupBrowserType, EPopupCloseButtonPosition, EPopupDeviceType, EPopupDisplayFrequency, EPopupPosition, EPopupTriggerType, EStorageType, ETaskType, ElementContains, Email, EmailAPIFactory, EmptyContent, EnhancedFormModel, FileUpload, FilterBar, FormModel, FormsFactory, FullBar, GenericWrapper, GenericWrapperContext, GroupedActions, Header, Icon, IconPill, InformationGroup, InlineTextEdit, LinearProgress, Link, ListCampaignModel, ListModel, ListPageModel, ListPopupModel, ListTemplateModel, ListsFactory, LoadingContainer, LocationTextField, Logo, MD5, MetricCard, Modal, ModalHandler, ModalHeading, Overlay, OverlayHandler, OverlayHeading, PageModel, PagesFactory, PersonalAccessTokenModel, PersonalAccessTokensFactory, PhoneTextField, PopupModel, PopupsFactory, Radio, ResourceEdit, ScopePicker, Search, SenderModel, SendersFactory, SideMenu, SideMenuContainer, SideMenuItem, SubNav, SummaryEnhancedFormModel, SuppressedEmailsFactory, SystemEmailsFactory, SystemEmailsModel, TagsFactory, TasksFactory, TemplateModel, TemplatesFactory, TextField, TimePicker, TimeSelector, Toggle, TopMenu, Typography, UserModel, UsersFactory, acceptListPolicy, addInterestsToContactsOfList, addPartialInformation, addSuppressedEmail, addToImpersonificationTree, amIImpersonating, amILoggedInService, archiveCampaign, areAllPropertiesEmpty, buildMUITheme, callApi, camelCase, camelToSnakeCase, cancelCampaign, capitalizeFirstLetter, cleanPostHogId, clearImpersonificationTree, clearStorage, copyToClipboard, createAccount, createBrand, createCampaign, createCampaignLogsExports, createCampaignsReportsExport, createContactsExport, createCustomDomain, createForm, createPage, createPat, createPopup, createSender, createSuppressedEmailExport, createTemplate, deepMergeObject, deleteAccount, deleteAnyAutomation, deleteAutomation, deleteCampaign, deleteCampaignsReportsExport, deleteContact, deleteCustomDomain, deleteForm, deleteList, deletePage, deletePartialInformation, deletePopup, deleteSender, deleteStorageItem, deleteSuppressedEmail, deleteTaskService, deleteTemplate, deleteUser, deleteWorkflow, descendingComparator, disableForm, disablePage, disablePopup, domainHasValidCertificateService, downloadCampaignLogExport, downloadCampaignsReportsExport, downloadContactsExport, downloadListLogExport, downloadSuppressedEmailExport, emptyAccountAddress, emptyAccountLimits, enableForm, enablePage, enablePopup, enrichBrand, enrichOrganization, enrichProfile, eventCondition, eventIdentify, eventLogout, fetchRetry, fetchRoute, findNestedProperty, formatNumber, getAccount, getAccountMetadata, getAccountReport, getAdjustedBillingCycle, getAllAutomationStats, getAutomation, getAutomationEmailContent, getAutomationExecutionsCount, getAutomationStats, getBeeTokenService, getBestLocalMatch, getBrand, getBrandService, getBrandUrl, getCalendarFormat, getCampaign, getCampaignLinks, getCampaignLinksReport, getCampaignLogs, getCampaignLogsExports, getCampaignReport, getCampaignRevisions, getCampaignsReportsExport, getComparator, getContactsExport, getCustomDomain, getCustomerProfile, getDate, getDomainFromEmail, getDomainsFromEmails, getDomainsService, getEmail, getEmailActivitySummary, getEmailReport, getEndOfDate, getForm, getHashQueryWithoutHistory, getIconSize, getList, getListLogs, getListReport, getNestedProperty, getPage, getPat, getPopup, getPropertyValue, getSender, getStartOfDate, getStorage, getSuppressedEmailExport, getTColor, getTaskService, getTemplate, getUnixTime, getUrlQueryParam, getUser, getUtmCookies, googlePlacesMapper, hasDecimal, impersonateService, initFieldValidation, initPostHog, isColorLight, isDomainValidService, isPublicEmailProviderService, isSimpleType, isValidEmail, isValidString, isValidUrl, lisTEmailTags, listAccounts, listAutomations, listCampaigns, listCampaignsReportsExports, listContacts, listCustomDomains, listDkimService, listEmailLogs, listForms, listList, listListAttributes, listListInterests, listPages, listPats, listPopups, listSenders, listSuppressedEmails, listSystemEmails, listTasksService, listTemplates, listUsers, listWorkflows, logOutService, loginService, miliToSecond, modelSet, modelToJson, originalBrand, patchAccountDomainsService, patchForm, popImpersonificationTree, postMessage, publishForm, publishPage, publishPopup, reScheduleCampaign, removeEmptyProperties, removeInterestsFromContactsOfList, removeQueryParams, removeTrailingChar, renderCampaign, renderEmail, renderForm, renderPage, renderPopup, renderPublicHtmlForm, renderTemplate, requestSupportService, resendEmail, resendVerificationEmail, resumeCampaign, revokePat, saveList, scheduleCampaign, searchCustomerProfiles, sendCampaignTest, setBrandHeadElements, setStorage, shareTemplate, splitArray, splitObject, stableSort, startPromisePool, suspendAccount, suspendCampaign, tagContact, tagsContactsOfList, trackEvent, truncateEmail, truncateText, uiKitConfig, unArchiveCampaign, unScheduleCampaign, unSuspendAccount, unshareTemplate, unsubscribeContact, untagContact, untagContactsOfList, updateAccount, updateAndClearUrlParams, updateAnyAutomation, updateAutomation, updateCampaign, updatePage, updatePat, updatePopup, updateSystemEmails, updateTemplate, updateUser, updateWorkflow, validateColor, validateEmail, validateGenericInput, validateUrl, verifyCustomDomain, verifyTrackingCnamesService, wait, whiteLabelBrand, whoAmi };
@@ -8,6 +8,7 @@ export * from "./emailAPI";
8
8
  export * from "./form";
9
9
  export * from "./list";
10
10
  export * from "./pages";
11
+ export * from "./personalAccessToken";
11
12
  export * from "./popups";
12
13
  export * from "./sender";
13
14
  export * from "./systemEmails";
@@ -0,0 +1,21 @@
1
+ import { TPatModel } from "./types";
2
+ export declare class PersonalAccessTokenModel {
3
+ readonly key_prefix: string;
4
+ name: string;
5
+ status: "active" | "revoked" | "expired";
6
+ scopes: string[];
7
+ allowed_account_ids: string[] | null;
8
+ readonly created_at: number;
9
+ readonly expires_at: number | null;
10
+ readonly revoked_at: number | null;
11
+ constructor(params: TPatModel);
12
+ toJson(): any;
13
+ set<T extends keyof this>(property: T, value: this[T]): void;
14
+ update({ name, scopes, allowedAccountIds }: {
15
+ name?: string;
16
+ scopes?: string[];
17
+ allowedAccountIds?: string[] | null;
18
+ }): Promise<PersonalAccessTokenModel>;
19
+ revoke(): Promise<PersonalAccessTokenModel>;
20
+ }
21
+ export * from "./types";
@@ -0,0 +1,10 @@
1
+ export type TPatModel = {
2
+ key_prefix: string;
3
+ name: string;
4
+ status: "active" | "revoked" | "expired";
5
+ scopes: string[];
6
+ allowed_account_ids: string[] | null;
7
+ created_at: number;
8
+ expires_at: number | null;
9
+ revoked_at: number | null;
10
+ };
@@ -12,6 +12,7 @@ export * from "./forms";
12
12
  export * from "./hidden";
13
13
  export * from "./lists";
14
14
  export * from "./pages";
15
+ export * from "./personalAccessTokens";
15
16
  export * from "./popups";
16
17
  export * from "./senders";
17
18
  export * from "./suppressedEmails";