@backstage/plugin-user-settings 0.9.1-next.1 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,35 @@
1
1
  # @backstage/plugin-user-settings
2
2
 
3
+ ## 0.9.1
4
+
5
+ ### Patch Changes
6
+
7
+ - e26e3de: The `ProviderSettingsItem` `icon` prop now accepts `IconElement` in addition to `IconComponent`.
8
+ - 538c985: Updated installation documentation to use feature discovery as the default.
9
+ - aa29b50: New frontend system pages now use the default plugin header together with `HeaderPage` instead of the legacy core page header pattern.
10
+ - 3f36ce1: Updated alpha plugin icons to follow the new frontend icon sizing rules when rendered in plugin and navigation surfaces.
11
+ - 0be2541: Promoted the plugin's translation ref to the stable package entry point. It was previously only available through the alpha entry point.
12
+ - Updated dependencies
13
+ - @backstage/plugin-catalog-react@2.1.0
14
+ - @backstage/ui@0.13.0
15
+ - @backstage/core-plugin-api@1.12.4
16
+ - @backstage/core-components@0.18.8
17
+ - @backstage/frontend-plugin-api@0.15.0
18
+ - @backstage/core-app-api@1.19.6
19
+ - @backstage/catalog-model@1.7.7
20
+ - @backstage/plugin-signals-react@0.0.20
21
+
22
+ ## 0.9.1-next.2
23
+
24
+ ### Patch Changes
25
+
26
+ - Updated dependencies
27
+ - @backstage/core-app-api@1.19.6-next.1
28
+ - @backstage/frontend-plugin-api@0.15.0-next.1
29
+ - @backstage/core-plugin-api@1.12.4-next.1
30
+ - @backstage/plugin-catalog-react@2.1.0-next.2
31
+ - @backstage/core-components@0.18.8-next.1
32
+
3
33
  ## 0.9.1-next.1
4
34
 
5
35
  ### Patch Changes
package/README.md CHANGED
@@ -11,7 +11,20 @@ be used in the frontend as a persistent alternative to the builtin `WebStorage`.
11
11
  Please see [the backend README](https://github.com/backstage/backstage/tree/master/plugins/user-settings-backend)
12
12
  for installation instructions.
13
13
 
14
- ## Components Usage
14
+ ## Installation
15
+
16
+ ```bash
17
+ # From your Backstage root directory
18
+ yarn --cwd packages/app add @backstage/plugin-user-settings
19
+ ```
20
+
21
+ Once installed, the plugin is automatically available in your app through the default feature discovery. For more details and alternative installation methods, see [installing plugins](https://backstage.io/docs/frontend-system/building-apps/installing-plugins).
22
+
23
+ ## Old Frontend System
24
+
25
+ If your Backstage app uses the old frontend system, you need to manually wire the plugin into your app as outlined in this section. If you are on the new frontend system, you can skip this.
26
+
27
+ ### Components Usage
15
28
 
16
29
  Add the item to the Sidebar:
17
30
 
package/dist/alpha.d.ts CHANGED
@@ -2,7 +2,10 @@ import * as react from 'react';
2
2
  import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
3
3
  import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
4
4
 
5
- /** @alpha */
5
+ /**
6
+ * @alpha
7
+ * @deprecated Import from `@backstage/plugin-user-settings` instead.
8
+ */
6
9
  declare const userSettingsTranslationRef: _backstage_frontend_plugin_api.TranslationRef<"user-settings", {
7
10
  readonly "featureFlags.title": "Feature Flags";
8
11
  readonly "featureFlags.description": "Please refresh the page when toggling feature flags";
@@ -55,7 +58,6 @@ declare const userSettingsTranslationRef: _backstage_frontend_plugin_api.Transla
55
58
  readonly "profileCard.title": "Profile";
56
59
  readonly "appearanceCard.title": "Appearance";
57
60
  }>;
58
-
59
61
  /** @alpha */
60
62
  declare const settingsNavItem: _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
61
63
  kind: "nav-item";
@@ -98,6 +100,8 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
98
100
  };
99
101
  }>;
100
102
  "page:user-settings": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
103
+ kind: "page";
104
+ name: undefined;
101
105
  config: {
102
106
  path: string | undefined;
103
107
  title: string | undefined;
@@ -125,22 +129,95 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
125
129
  optional: false;
126
130
  internal: false;
127
131
  }>;
132
+ };
133
+ params: {
134
+ path: string;
135
+ title?: string;
136
+ icon?: _backstage_frontend_plugin_api.IconElement;
137
+ loader?: () => Promise<react.JSX.Element>;
138
+ routeRef?: _backstage_frontend_plugin_api.RouteRef;
139
+ noHeader?: boolean;
140
+ };
141
+ }>;
142
+ "sub-page:user-settings/auth-providers": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
143
+ config: {
144
+ path: string | undefined;
145
+ title: string | undefined;
146
+ };
147
+ configInput: {
148
+ title?: string | undefined;
149
+ path?: string | undefined;
150
+ };
151
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
152
+ optional: true;
153
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.title", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.IconElement, "core.icon", {
154
+ optional: true;
155
+ }>;
156
+ inputs: {
128
157
  providerSettings: _backstage_frontend_plugin_api.ExtensionInput<_backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}>, {
129
158
  singleton: true;
130
159
  optional: true;
131
160
  internal: false;
132
161
  }>;
133
162
  };
134
- kind: "page";
135
- name: undefined;
163
+ kind: "sub-page";
164
+ name: "auth-providers";
136
165
  params: {
137
- defaultPath?: [Error: `Use the 'path' param instead`];
138
166
  path: string;
139
- title?: string;
167
+ title: string;
140
168
  icon?: _backstage_frontend_plugin_api.IconElement;
141
- loader?: () => Promise<react.JSX.Element>;
169
+ loader: () => Promise<JSX.Element>;
170
+ routeRef?: _backstage_frontend_plugin_api.RouteRef;
171
+ };
172
+ }>;
173
+ "sub-page:user-settings/feature-flags": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
174
+ kind: "sub-page";
175
+ name: "feature-flags";
176
+ config: {
177
+ path: string | undefined;
178
+ title: string | undefined;
179
+ };
180
+ configInput: {
181
+ title?: string | undefined;
182
+ path?: string | undefined;
183
+ };
184
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
185
+ optional: true;
186
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.title", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.IconElement, "core.icon", {
187
+ optional: true;
188
+ }>;
189
+ inputs: {};
190
+ params: {
191
+ path: string;
192
+ title: string;
193
+ icon?: _backstage_frontend_plugin_api.IconElement;
194
+ loader: () => Promise<JSX.Element>;
195
+ routeRef?: _backstage_frontend_plugin_api.RouteRef;
196
+ };
197
+ }>;
198
+ "sub-page:user-settings/general": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
199
+ kind: "sub-page";
200
+ name: "general";
201
+ config: {
202
+ path: string | undefined;
203
+ title: string | undefined;
204
+ };
205
+ configInput: {
206
+ title?: string | undefined;
207
+ path?: string | undefined;
208
+ };
209
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
210
+ optional: true;
211
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.title", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.IconElement, "core.icon", {
212
+ optional: true;
213
+ }>;
214
+ inputs: {};
215
+ params: {
216
+ path: string;
217
+ title: string;
218
+ icon?: _backstage_frontend_plugin_api.IconElement;
219
+ loader: () => Promise<JSX.Element>;
142
220
  routeRef?: _backstage_frontend_plugin_api.RouteRef;
143
- noHeader?: boolean;
144
221
  };
145
222
  }>;
146
223
  }>;
package/dist/alpha.esm.js CHANGED
@@ -1,10 +1,28 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { PageBlueprint, createExtensionInput, coreExtensionData, NavItemBlueprint, createFrontendPlugin } from '@backstage/frontend-plugin-api';
2
+ import { PageBlueprint, SubPageBlueprint, createExtensionInput, coreExtensionData, NavItemBlueprint, createFrontendPlugin } from '@backstage/frontend-plugin-api';
3
+ import { Content } from '@backstage/core-components';
3
4
  import SettingsIcon from '@material-ui/icons/Settings';
4
5
  import { settingsRouteRef } from './plugin.esm.js';
5
- export { userSettingsTranslationRef } from './translation.esm.js';
6
+ import { userSettingsTranslationRef as userSettingsTranslationRef$1 } from './translation.esm.js';
6
7
 
7
- const userSettingsPage = PageBlueprint.makeWithOverrides({
8
+ const userSettingsTranslationRef = userSettingsTranslationRef$1;
9
+ const userSettingsPage = PageBlueprint.make({
10
+ params: {
11
+ path: "/settings",
12
+ routeRef: settingsRouteRef,
13
+ title: "Settings"
14
+ }
15
+ });
16
+ const generalSettingsPage = SubPageBlueprint.make({
17
+ name: "general",
18
+ params: {
19
+ path: "general",
20
+ title: "General",
21
+ loader: () => import('./components/General/index.esm.js').then((m) => /* @__PURE__ */ jsx(Content, { children: /* @__PURE__ */ jsx(m.UserSettingsGeneral, {}) }))
22
+ }
23
+ });
24
+ const authProvidersSettingsPage = SubPageBlueprint.makeWithOverrides({
25
+ name: "auth-providers",
8
26
  inputs: {
9
27
  providerSettings: createExtensionInput([coreExtensionData.reactElement], {
10
28
  singleton: true,
@@ -13,19 +31,27 @@ const userSettingsPage = PageBlueprint.makeWithOverrides({
13
31
  },
14
32
  factory(originalFactory, { inputs }) {
15
33
  return originalFactory({
16
- path: "/settings",
17
- routeRef: settingsRouteRef,
18
- loader: () => import('./components/SettingsPage/index.esm.js').then((m) => /* @__PURE__ */ jsx(
19
- m.SettingsPage,
34
+ path: "auth-providers",
35
+ title: "Authentication Providers",
36
+ loader: () => import('./components/AuthProviders/index.esm.js').then((m) => /* @__PURE__ */ jsx(Content, { children: /* @__PURE__ */ jsx(
37
+ m.UserSettingsAuthProviders,
20
38
  {
21
39
  providerSettings: inputs.providerSettings?.get(
22
40
  coreExtensionData.reactElement
23
41
  )
24
42
  }
25
- ))
43
+ ) }))
26
44
  });
27
45
  }
28
46
  });
47
+ const featureFlagsSettingsPage = SubPageBlueprint.make({
48
+ name: "feature-flags",
49
+ params: {
50
+ path: "feature-flags",
51
+ title: "Feature Flags",
52
+ loader: () => import('./components/FeatureFlags/index.esm.js').then((m) => /* @__PURE__ */ jsx(Content, { children: /* @__PURE__ */ jsx(m.UserSettingsFeatureFlags, {}) }))
53
+ }
54
+ });
29
55
  const settingsNavItem = NavItemBlueprint.make({
30
56
  params: {
31
57
  routeRef: settingsRouteRef,
@@ -36,13 +62,19 @@ const settingsNavItem = NavItemBlueprint.make({
36
62
  var alpha = createFrontendPlugin({
37
63
  pluginId: "user-settings",
38
64
  title: "Settings",
39
- icon: /* @__PURE__ */ jsx(SettingsIcon, {}),
65
+ icon: /* @__PURE__ */ jsx(SettingsIcon, { fontSize: "inherit" }),
40
66
  info: { packageJson: () => import('./package.json.esm.js') },
41
- extensions: [userSettingsPage, settingsNavItem],
67
+ extensions: [
68
+ userSettingsPage,
69
+ generalSettingsPage,
70
+ authProvidersSettingsPage,
71
+ featureFlagsSettingsPage,
72
+ settingsNavItem
73
+ ],
42
74
  routes: {
43
75
  root: settingsRouteRef
44
76
  }
45
77
  });
46
78
 
47
- export { alpha as default, settingsNavItem };
79
+ export { alpha as default, settingsNavItem, userSettingsTranslationRef };
48
80
  //# sourceMappingURL=alpha.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"alpha.esm.js","sources":["../src/alpha.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n coreExtensionData,\n createExtensionInput,\n createFrontendPlugin,\n PageBlueprint,\n NavItemBlueprint,\n} from '@backstage/frontend-plugin-api';\nimport SettingsIcon from '@material-ui/icons/Settings';\nimport { settingsRouteRef } from './plugin';\n\nexport * from './translation';\n\nconst userSettingsPage = PageBlueprint.makeWithOverrides({\n inputs: {\n providerSettings: createExtensionInput([coreExtensionData.reactElement], {\n singleton: true,\n optional: true,\n }),\n },\n factory(originalFactory, { inputs }) {\n return originalFactory({\n path: '/settings',\n routeRef: settingsRouteRef,\n loader: () =>\n import('./components/SettingsPage').then(m => (\n <m.SettingsPage\n providerSettings={inputs.providerSettings?.get(\n coreExtensionData.reactElement,\n )}\n />\n )),\n });\n },\n});\n\n/** @alpha */\nexport const settingsNavItem = NavItemBlueprint.make({\n params: {\n routeRef: settingsRouteRef,\n title: 'Settings',\n icon: SettingsIcon,\n },\n});\n\n/**\n * @alpha\n */\nexport default createFrontendPlugin({\n pluginId: 'user-settings',\n title: 'Settings',\n icon: <SettingsIcon />,\n info: { packageJson: () => import('../package.json') },\n extensions: [userSettingsPage, settingsNavItem],\n routes: {\n root: settingsRouteRef,\n },\n});\n"],"names":[],"mappings":";;;;;;AA2BA,MAAM,gBAAA,GAAmB,cAAc,iBAAA,CAAkB;AAAA,EACvD,MAAA,EAAQ;AAAA,IACN,gBAAA,EAAkB,oBAAA,CAAqB,CAAC,iBAAA,CAAkB,YAAY,CAAA,EAAG;AAAA,MACvE,SAAA,EAAW,IAAA;AAAA,MACX,QAAA,EAAU;AAAA,KACX;AAAA,GACH;AAAA,EACA,OAAA,CAAQ,eAAA,EAAiB,EAAE,MAAA,EAAO,EAAG;AACnC,IAAA,OAAO,eAAA,CAAgB;AAAA,MACrB,IAAA,EAAM,WAAA;AAAA,MACN,QAAA,EAAU,gBAAA;AAAA,MACV,QAAQ,MACN,OAAO,wCAA2B,CAAA,CAAE,KAAK,CAAA,CAAA,qBACvC,GAAA;AAAA,QAAC,CAAA,CAAE,YAAA;AAAA,QAAF;AAAA,UACC,gBAAA,EAAkB,OAAO,gBAAA,EAAkB,GAAA;AAAA,YACzC,iBAAA,CAAkB;AAAA;AACpB;AAAA,OAEH;AAAA,KACJ,CAAA;AAAA,EACH;AACF,CAAC,CAAA;AAGM,MAAM,eAAA,GAAkB,iBAAiB,IAAA,CAAK;AAAA,EACnD,MAAA,EAAQ;AAAA,IACN,QAAA,EAAU,gBAAA;AAAA,IACV,KAAA,EAAO,UAAA;AAAA,IACP,IAAA,EAAM;AAAA;AAEV,CAAC;AAKD,YAAe,oBAAA,CAAqB;AAAA,EAClC,QAAA,EAAU,eAAA;AAAA,EACV,KAAA,EAAO,UAAA;AAAA,EACP,IAAA,sBAAO,YAAA,EAAA,EAAa,CAAA;AAAA,EACpB,MAAM,EAAE,WAAA,EAAa,MAAM,OAAO,uBAAiB,CAAA,EAAE;AAAA,EACrD,UAAA,EAAY,CAAC,gBAAA,EAAkB,eAAe,CAAA;AAAA,EAC9C,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM;AAAA;AAEV,CAAC,CAAA;;;;"}
1
+ {"version":3,"file":"alpha.esm.js","sources":["../src/alpha.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n coreExtensionData,\n createExtensionInput,\n createFrontendPlugin,\n PageBlueprint,\n NavItemBlueprint,\n SubPageBlueprint,\n} from '@backstage/frontend-plugin-api';\nimport { Content } from '@backstage/core-components';\nimport SettingsIcon from '@material-ui/icons/Settings';\nimport { settingsRouteRef } from './plugin';\n\nimport { userSettingsTranslationRef as _userSettingsTranslationRef } from './translation';\n\n/**\n * @alpha\n * @deprecated Import from `@backstage/plugin-user-settings` instead.\n */\nexport const userSettingsTranslationRef = _userSettingsTranslationRef;\n\nconst userSettingsPage = PageBlueprint.make({\n params: {\n path: '/settings',\n routeRef: settingsRouteRef,\n title: 'Settings',\n },\n});\n\nconst generalSettingsPage = SubPageBlueprint.make({\n name: 'general',\n params: {\n path: 'general',\n title: 'General',\n loader: () =>\n import('./components/General').then(m => (\n <Content>\n <m.UserSettingsGeneral />\n </Content>\n )),\n },\n});\n\nconst authProvidersSettingsPage = SubPageBlueprint.makeWithOverrides({\n name: 'auth-providers',\n inputs: {\n providerSettings: createExtensionInput([coreExtensionData.reactElement], {\n singleton: true,\n optional: true,\n }),\n },\n factory(originalFactory, { inputs }) {\n return originalFactory({\n path: 'auth-providers',\n title: 'Authentication Providers',\n loader: () =>\n import('./components/AuthProviders').then(m => (\n <Content>\n <m.UserSettingsAuthProviders\n providerSettings={inputs.providerSettings?.get(\n coreExtensionData.reactElement,\n )}\n />\n </Content>\n )),\n });\n },\n});\n\nconst featureFlagsSettingsPage = SubPageBlueprint.make({\n name: 'feature-flags',\n params: {\n path: 'feature-flags',\n title: 'Feature Flags',\n loader: () =>\n import('./components/FeatureFlags').then(m => (\n <Content>\n <m.UserSettingsFeatureFlags />\n </Content>\n )),\n },\n});\n\n/** @alpha */\nexport const settingsNavItem = NavItemBlueprint.make({\n params: {\n routeRef: settingsRouteRef,\n title: 'Settings',\n icon: SettingsIcon,\n },\n});\n\n/**\n * @alpha\n */\nexport default createFrontendPlugin({\n pluginId: 'user-settings',\n title: 'Settings',\n icon: <SettingsIcon fontSize=\"inherit\" />,\n info: { packageJson: () => import('../package.json') },\n extensions: [\n userSettingsPage,\n generalSettingsPage,\n authProvidersSettingsPage,\n featureFlagsSettingsPage,\n settingsNavItem,\n ],\n routes: {\n root: settingsRouteRef,\n },\n});\n"],"names":["_userSettingsTranslationRef"],"mappings":";;;;;;;AAiCO,MAAM,0BAAA,GAA6BA;AAE1C,MAAM,gBAAA,GAAmB,cAAc,IAAA,CAAK;AAAA,EAC1C,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,WAAA;AAAA,IACN,QAAA,EAAU,gBAAA;AAAA,IACV,KAAA,EAAO;AAAA;AAEX,CAAC,CAAA;AAED,MAAM,mBAAA,GAAsB,iBAAiB,IAAA,CAAK;AAAA,EAChD,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,MAAA,EAAQ,MACN,OAAO,mCAAsB,EAAE,IAAA,CAAK,CAAA,CAAA,qBAClC,GAAA,CAAC,OAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,CAAA,CAAE,mBAAA,EAAF,EAAsB,GACzB,CACD;AAAA;AAEP,CAAC,CAAA;AAED,MAAM,yBAAA,GAA4B,iBAAiB,iBAAA,CAAkB;AAAA,EACnE,IAAA,EAAM,gBAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,gBAAA,EAAkB,oBAAA,CAAqB,CAAC,iBAAA,CAAkB,YAAY,CAAA,EAAG;AAAA,MACvE,SAAA,EAAW,IAAA;AAAA,MACX,QAAA,EAAU;AAAA,KACX;AAAA,GACH;AAAA,EACA,OAAA,CAAQ,eAAA,EAAiB,EAAE,MAAA,EAAO,EAAG;AACnC,IAAA,OAAO,eAAA,CAAgB;AAAA,MACrB,IAAA,EAAM,gBAAA;AAAA,MACN,KAAA,EAAO,0BAAA;AAAA,MACP,MAAA,EAAQ,MACN,OAAO,yCAA4B,EAAE,IAAA,CAAK,CAAA,CAAA,yBACvC,OAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,QAAC,CAAA,CAAE,yBAAA;AAAA,QAAF;AAAA,UACC,gBAAA,EAAkB,OAAO,gBAAA,EAAkB,GAAA;AAAA,YACzC,iBAAA,CAAkB;AAAA;AACpB;AAAA,SAEJ,CACD;AAAA,KACJ,CAAA;AAAA,EACH;AACF,CAAC,CAAA;AAED,MAAM,wBAAA,GAA2B,iBAAiB,IAAA,CAAK;AAAA,EACrD,IAAA,EAAM,eAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,eAAA;AAAA,IACN,KAAA,EAAO,eAAA;AAAA,IACP,MAAA,EAAQ,MACN,OAAO,wCAA2B,EAAE,IAAA,CAAK,CAAA,CAAA,qBACvC,GAAA,CAAC,OAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,CAAA,CAAE,wBAAA,EAAF,EAA2B,GAC9B,CACD;AAAA;AAEP,CAAC,CAAA;AAGM,MAAM,eAAA,GAAkB,iBAAiB,IAAA,CAAK;AAAA,EACnD,MAAA,EAAQ;AAAA,IACN,QAAA,EAAU,gBAAA;AAAA,IACV,KAAA,EAAO,UAAA;AAAA,IACP,IAAA,EAAM;AAAA;AAEV,CAAC;AAKD,YAAe,oBAAA,CAAqB;AAAA,EAClC,QAAA,EAAU,eAAA;AAAA,EACV,KAAA,EAAO,UAAA;AAAA,EACP,IAAA,kBAAM,GAAA,CAAC,YAAA,EAAA,EAAa,QAAA,EAAS,SAAA,EAAU,CAAA;AAAA,EACvC,MAAM,EAAE,WAAA,EAAa,MAAM,OAAO,uBAAiB,CAAA,EAAE;AAAA,EACrD,UAAA,EAAY;AAAA,IACV,gBAAA;AAAA,IACA,mBAAA;AAAA,IACA,yBAAA;AAAA,IACA,wBAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM;AAAA;AAEV,CAAC,CAAA;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { useState, useEffect } from 'react';
2
+ import { useState, useEffect, isValidElement, createElement } from 'react';
3
3
  import Button from '@material-ui/core/Button';
4
4
  import Grid from '@material-ui/core/Grid';
5
5
  import ListItem from '@material-ui/core/ListItem';
@@ -15,7 +15,7 @@ import { userSettingsTranslationRef } from '../../translation.esm.js';
15
15
 
16
16
  const emptyProfile = {};
17
17
  const ProviderSettingsItem = (props) => {
18
- const { title, description, icon: Icon, apiRef } = props;
18
+ const { title, description, icon, apiRef } = props;
19
19
  const api = useApi(apiRef);
20
20
  const errorApi = useApi(errorApiRef);
21
21
  const [signedIn, setSignedIn] = useState(false);
@@ -46,8 +46,9 @@ const ProviderSettingsItem = (props) => {
46
46
  subscription.unsubscribe();
47
47
  };
48
48
  }, [api]);
49
+ const iconElement = icon === null || isValidElement(icon) ? icon : createElement(icon);
49
50
  return /* @__PURE__ */ jsxs(ListItem, { children: [
50
- /* @__PURE__ */ jsx(ListItemIcon, { children: /* @__PURE__ */ jsx(Icon, {}) }),
51
+ /* @__PURE__ */ jsx(ListItemIcon, { children: iconElement }),
51
52
  /* @__PURE__ */ jsx(
52
53
  ListItemText,
53
54
  {
@@ -1 +1 @@
1
- {"version":3,"file":"ProviderSettingsItem.esm.js","sources":["../../../src/components/AuthProviders/ProviderSettingsItem.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useEffect, useState } from 'react';\nimport Button from '@material-ui/core/Button';\nimport Grid from '@material-ui/core/Grid';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Typography from '@material-ui/core/Typography';\nimport {\n ApiRef,\n SessionApi,\n SessionState,\n ProfileInfoApi,\n ProfileInfo,\n useApi,\n errorApiRef,\n IconComponent,\n} from '@backstage/core-plugin-api';\nimport { ProviderSettingsAvatar } from './ProviderSettingsAvatar';\nimport { useTranslationRef } from '@backstage/frontend-plugin-api';\nimport { userSettingsTranslationRef } from '../../translation';\n\nconst emptyProfile: ProfileInfo = {};\n\n/** @public */\nexport const ProviderSettingsItem = (props: {\n title: string;\n description: string;\n icon: IconComponent;\n apiRef: ApiRef<ProfileInfoApi & SessionApi>;\n}) => {\n const { title, description, icon: Icon, apiRef } = props;\n\n const api = useApi(apiRef);\n const errorApi = useApi(errorApiRef);\n const [signedIn, setSignedIn] = useState(false);\n const [profile, setProfile] = useState<ProfileInfo>(emptyProfile);\n const { t } = useTranslationRef(userSettingsTranslationRef);\n\n useEffect(() => {\n let didCancel = false;\n\n const subscription = api\n .sessionState$()\n .subscribe((sessionState: SessionState) => {\n if (sessionState !== SessionState.SignedIn) {\n setProfile(emptyProfile);\n setSignedIn(false);\n }\n if (!didCancel) {\n api\n .getProfile({ optional: true })\n .then((profileResponse: ProfileInfo | undefined) => {\n if (!didCancel) {\n if (sessionState === SessionState.SignedIn) {\n setSignedIn(true);\n }\n if (profileResponse) {\n setProfile(profileResponse);\n }\n }\n });\n }\n });\n\n return () => {\n didCancel = true;\n subscription.unsubscribe();\n };\n }, [api]);\n\n return (\n <ListItem>\n <ListItemIcon>\n <Icon />\n </ListItemIcon>\n <ListItemText\n primary={title}\n secondary={\n <Tooltip placement=\"top\" arrow title={description}>\n <Grid container spacing={6}>\n <Grid item>\n <ProviderSettingsAvatar size={48} picture={profile.picture} />\n </Grid>\n <Grid item xs={12} sm container>\n <Grid item xs container direction=\"column\" spacing={2}>\n <Grid item xs>\n {profile.displayName && (\n <Typography\n variant=\"subtitle1\"\n color=\"textPrimary\"\n gutterBottom\n >\n {profile.displayName}\n </Typography>\n )}\n {profile.email && (\n <Typography variant=\"body2\" color=\"textSecondary\">\n {profile.email}\n </Typography>\n )}\n <Typography variant=\"body2\" color=\"textSecondary\">\n {description}\n </Typography>\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n </Tooltip>\n }\n secondaryTypographyProps={{ noWrap: true, style: { width: '80%' } }}\n />\n <ListItemSecondaryAction>\n <Tooltip\n placement=\"top\"\n arrow\n title={\n signedIn\n ? t('providerSettingsItem.title.signOut', { title })\n : t('providerSettingsItem.title.signIn', { title })\n }\n >\n <Button\n variant=\"outlined\"\n color=\"primary\"\n onClick={() => {\n const action = signedIn ? api.signOut() : api.signIn();\n action.catch(error => errorApi.post(error));\n }}\n >\n {signedIn\n ? t('providerSettingsItem.buttonTitle.signOut')\n : t('providerSettingsItem.buttonTitle.signIn')}\n </Button>\n </Tooltip>\n </ListItemSecondaryAction>\n </ListItem>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProviderSettingsItem.esm.js","sources":["../../../src/components/AuthProviders/ProviderSettingsItem.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createElement, isValidElement, useEffect, useState } from 'react';\nimport Button from '@material-ui/core/Button';\nimport Grid from '@material-ui/core/Grid';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Typography from '@material-ui/core/Typography';\nimport {\n ApiRef,\n SessionApi,\n SessionState,\n ProfileInfoApi,\n ProfileInfo,\n useApi,\n errorApiRef,\n IconComponent,\n} from '@backstage/core-plugin-api';\nimport { IconElement } from '@backstage/frontend-plugin-api';\nimport { ProviderSettingsAvatar } from './ProviderSettingsAvatar';\nimport { useTranslationRef } from '@backstage/frontend-plugin-api';\nimport { userSettingsTranslationRef } from '../../translation';\n\nconst emptyProfile: ProfileInfo = {};\n\n/** @public */\nexport const ProviderSettingsItem = (props: {\n title: string;\n description: string;\n icon: IconComponent | IconElement;\n apiRef: ApiRef<ProfileInfoApi & SessionApi>;\n}) => {\n const { title, description, icon, apiRef } = props;\n\n const api = useApi(apiRef);\n const errorApi = useApi(errorApiRef);\n const [signedIn, setSignedIn] = useState(false);\n const [profile, setProfile] = useState<ProfileInfo>(emptyProfile);\n const { t } = useTranslationRef(userSettingsTranslationRef);\n\n useEffect(() => {\n let didCancel = false;\n\n const subscription = api\n .sessionState$()\n .subscribe((sessionState: SessionState) => {\n if (sessionState !== SessionState.SignedIn) {\n setProfile(emptyProfile);\n setSignedIn(false);\n }\n if (!didCancel) {\n api\n .getProfile({ optional: true })\n .then((profileResponse: ProfileInfo | undefined) => {\n if (!didCancel) {\n if (sessionState === SessionState.SignedIn) {\n setSignedIn(true);\n }\n if (profileResponse) {\n setProfile(profileResponse);\n }\n }\n });\n }\n });\n\n return () => {\n didCancel = true;\n subscription.unsubscribe();\n };\n }, [api]);\n\n const iconElement =\n icon === null || isValidElement(icon)\n ? icon\n : createElement(icon as IconComponent);\n\n return (\n <ListItem>\n <ListItemIcon>{iconElement}</ListItemIcon>\n <ListItemText\n primary={title}\n secondary={\n <Tooltip placement=\"top\" arrow title={description}>\n <Grid container spacing={6}>\n <Grid item>\n <ProviderSettingsAvatar size={48} picture={profile.picture} />\n </Grid>\n <Grid item xs={12} sm container>\n <Grid item xs container direction=\"column\" spacing={2}>\n <Grid item xs>\n {profile.displayName && (\n <Typography\n variant=\"subtitle1\"\n color=\"textPrimary\"\n gutterBottom\n >\n {profile.displayName}\n </Typography>\n )}\n {profile.email && (\n <Typography variant=\"body2\" color=\"textSecondary\">\n {profile.email}\n </Typography>\n )}\n <Typography variant=\"body2\" color=\"textSecondary\">\n {description}\n </Typography>\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n </Tooltip>\n }\n secondaryTypographyProps={{ noWrap: true, style: { width: '80%' } }}\n />\n <ListItemSecondaryAction>\n <Tooltip\n placement=\"top\"\n arrow\n title={\n signedIn\n ? t('providerSettingsItem.title.signOut', { title })\n : t('providerSettingsItem.title.signIn', { title })\n }\n >\n <Button\n variant=\"outlined\"\n color=\"primary\"\n onClick={() => {\n const action = signedIn ? api.signOut() : api.signIn();\n action.catch(error => errorApi.post(error));\n }}\n >\n {signedIn\n ? t('providerSettingsItem.buttonTitle.signOut')\n : t('providerSettingsItem.buttonTitle.signIn')}\n </Button>\n </Tooltip>\n </ListItemSecondaryAction>\n </ListItem>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { UserSettingsAuthProviders } from './UserSettingsAuthProviders.esm.js';
2
+ export { DefaultProviderSettings } from './DefaultProviderSettings.esm.js';
3
+ export { ProviderSettingsItem } from './ProviderSettingsItem.esm.js';
4
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultSettingsPage.esm.js","sources":["../../../src/components/DefaultSettingsPage/DefaultSettingsPage.tsx"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ReactElement } from 'react';\nimport { UserSettingsAuthProviders } from '../AuthProviders';\nimport { UserSettingsFeatureFlags } from '../FeatureFlags';\nimport { UserSettingsGeneral } from '../General';\nimport { SettingsLayout, SettingsLayoutRouteProps } from '../SettingsLayout';\nimport { useTranslationRef } from '@backstage/frontend-plugin-api';\nimport { userSettingsTranslationRef } from '../../translation';\n\n/**\n * @public\n */\nexport const DefaultSettingsPage = (props: {\n tabs?: ReactElement<SettingsLayoutRouteProps>[];\n providerSettings?: JSX.Element;\n}) => {\n const { providerSettings, tabs } = props;\n const { t } = useTranslationRef(userSettingsTranslationRef);\n\n return (\n <SettingsLayout>\n <SettingsLayout.Route\n path=\"general\"\n title={t('defaultSettingsPage.tabsTitle.general')}\n >\n <UserSettingsGeneral />\n </SettingsLayout.Route>\n <SettingsLayout.Route\n path=\"auth-providers\"\n title={t('defaultSettingsPage.tabsTitle.authProviders')}\n >\n <UserSettingsAuthProviders providerSettings={providerSettings} />\n </SettingsLayout.Route>\n <SettingsLayout.Route\n path=\"feature-flags\"\n title={t('defaultSettingsPage.tabsTitle.featureFlags')}\n >\n <UserSettingsFeatureFlags />\n </SettingsLayout.Route>\n {tabs}\n </SettingsLayout>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BO,MAAM,mBAAA,GAAsB,CAAC,KAAA,KAG9B;AACJ,EAAA,MAAM,EAAE,gBAAA,EAAkB,IAAA,EAAK,GAAI,KAAA;AACnC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,0BAA0B,CAAA;AAE1D,EAAA,4BACG,cAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,cAAA,CAAe,KAAA;AAAA,MAAf;AAAA,QACC,IAAA,EAAK,SAAA;AAAA,QACL,KAAA,EAAO,EAAE,uCAAuC,CAAA;AAAA,QAEhD,8BAAC,mBAAA,EAAA,EAAoB;AAAA;AAAA,KACvB;AAAA,oBACA,GAAA;AAAA,MAAC,cAAA,CAAe,KAAA;AAAA,MAAf;AAAA,QACC,IAAA,EAAK,gBAAA;AAAA,QACL,KAAA,EAAO,EAAE,6CAA6C,CAAA;AAAA,QAEtD,QAAA,kBAAA,GAAA,CAAC,6BAA0B,gBAAA,EAAoC;AAAA;AAAA,KACjE;AAAA,oBACA,GAAA;AAAA,MAAC,cAAA,CAAe,KAAA;AAAA,MAAf;AAAA,QACC,IAAA,EAAK,eAAA;AAAA,QACL,KAAA,EAAO,EAAE,4CAA4C,CAAA;AAAA,QAErD,8BAAC,wBAAA,EAAA,EAAyB;AAAA;AAAA,KAC5B;AAAA,IACC;AAAA,GAAA,EACH,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"DefaultSettingsPage.esm.js","sources":["../../../src/components/DefaultSettingsPage/DefaultSettingsPage.tsx"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ReactElement } from 'react';\nimport { UserSettingsAuthProviders } from '../AuthProviders';\nimport { UserSettingsFeatureFlags } from '../FeatureFlags';\nimport { UserSettingsGeneral } from '../General';\nimport { SettingsLayoutRouteProps } from '../SettingsLayout';\nimport { SettingsLayout } from '../SettingsLayout/SettingsLayout';\nimport { useTranslationRef } from '@backstage/frontend-plugin-api';\nimport { userSettingsTranslationRef } from '../../translation';\n\n/**\n * @public\n */\nexport const DefaultSettingsPage = (props: {\n tabs?: ReactElement<SettingsLayoutRouteProps>[];\n providerSettings?: JSX.Element;\n}) => {\n const { providerSettings, tabs } = props;\n const { t } = useTranslationRef(userSettingsTranslationRef);\n\n return (\n <SettingsLayout>\n <SettingsLayout.Route\n path=\"general\"\n title={t('defaultSettingsPage.tabsTitle.general')}\n >\n <UserSettingsGeneral />\n </SettingsLayout.Route>\n <SettingsLayout.Route\n path=\"auth-providers\"\n title={t('defaultSettingsPage.tabsTitle.authProviders')}\n >\n <UserSettingsAuthProviders providerSettings={providerSettings} />\n </SettingsLayout.Route>\n <SettingsLayout.Route\n path=\"feature-flags\"\n title={t('defaultSettingsPage.tabsTitle.featureFlags')}\n >\n <UserSettingsFeatureFlags />\n </SettingsLayout.Route>\n {tabs}\n </SettingsLayout>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BO,MAAM,mBAAA,GAAsB,CAAC,KAAA,KAG9B;AACJ,EAAA,MAAM,EAAE,gBAAA,EAAkB,IAAA,EAAK,GAAI,KAAA;AACnC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,0BAA0B,CAAA;AAE1D,EAAA,4BACG,cAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,cAAA,CAAe,KAAA;AAAA,MAAf;AAAA,QACC,IAAA,EAAK,SAAA;AAAA,QACL,KAAA,EAAO,EAAE,uCAAuC,CAAA;AAAA,QAEhD,8BAAC,mBAAA,EAAA,EAAoB;AAAA;AAAA,KACvB;AAAA,oBACA,GAAA;AAAA,MAAC,cAAA,CAAe,KAAA;AAAA,MAAf;AAAA,QACC,IAAA,EAAK,gBAAA;AAAA,QACL,KAAA,EAAO,EAAE,6CAA6C,CAAA;AAAA,QAEtD,QAAA,kBAAA,GAAA,CAAC,6BAA0B,gBAAA,EAAoC;AAAA;AAAA,KACjE;AAAA,oBACA,GAAA;AAAA,MAAC,cAAA,CAAe,KAAA;AAAA,MAAf;AAAA,QACC,IAAA,EAAK,eAAA;AAAA,QACL,KAAA,EAAO,EAAE,4CAA4C,CAAA;AAAA,QAErD,8BAAC,wBAAA,EAAA,EAAyB;AAAA;AAAA,KAC5B;AAAA,IACC;AAAA,GAAA,EACH,CAAA;AAEJ;;;;"}
@@ -0,0 +1,2 @@
1
+ export { UserSettingsFeatureFlags } from './UserSettingsFeatureFlags.esm.js';
2
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ export { UserSettingsGeneral } from './UserSettingsGeneral.esm.js';
2
+ export { UserSettingsProfileCard } from './UserSettingsProfileCard.esm.js';
3
+ export { UserSettingsMenu } from './UserSettingsMenu.esm.js';
4
+ export { UserSettingsSignInAvatar } from './UserSettingsSignInAvatar.esm.js';
5
+ export { UserSettingsAppearanceCard } from './UserSettingsAppearanceCard.esm.js';
6
+ export { UserSettingsThemeToggle } from './UserSettingsThemeToggle.esm.js';
7
+ export { UserSettingsPinToggle } from './UserSettingsPinToggle.esm.js';
8
+ export { UserSettingsIdentityCard } from './UserSettingsIdentityCard.esm.js';
9
+ export { UserSettingsLanguageToggle } from './UserSettingsLanguageToggle.esm.js';
10
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
package/dist/index.d.ts CHANGED
@@ -4,6 +4,7 @@ import { JsonValue, Observable } from '@backstage/types';
4
4
  import { SignalApi } from '@backstage/plugin-signals-react';
5
5
  import * as react_jsx_runtime from 'react/jsx-runtime';
6
6
  import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
7
+ import { IconElement } from '@backstage/frontend-plugin-api';
7
8
  import { PropsWithChildren, ReactNode, ElementType } from 'react';
8
9
  import { TabProps } from '@material-ui/core/Tab';
9
10
 
@@ -79,7 +80,7 @@ declare const DefaultProviderSettings: (props: {
79
80
  declare const ProviderSettingsItem: (props: {
80
81
  title: string;
81
82
  description: string;
82
- icon: IconComponent;
83
+ icon: IconComponent | IconElement;
83
84
  apiRef: ApiRef<ProfileInfoApi & SessionApi>;
84
85
  }) => react_jsx_runtime.JSX.Element;
85
86
 
@@ -171,5 +172,59 @@ declare const SettingsLayout: {
171
172
  Route: (props: SettingsLayoutRouteProps) => null;
172
173
  };
173
174
 
174
- export { DefaultProviderSettings, ProviderSettingsItem, SettingsPage as Router, Settings, SettingsLayout, USER_SETTINGS_TAB_KEY, UserSettingsAppearanceCard, UserSettingsAuthProviders, UserSettingsFeatureFlags, UserSettingsGeneral, UserSettingsIdentityCard, UserSettingsLanguageToggle, UserSettingsMenu, UserSettingsPage, UserSettingsPinToggle, UserSettingsProfileCard, UserSettingsSignInAvatar, UserSettingsStorage, UserSettingsTab, UserSettingsThemeToggle, userSettingsPlugin as plugin, useUserProfile, userSettingsPlugin };
175
+ /** @public */
176
+ declare const userSettingsTranslationRef: _backstage_frontend_plugin_api.TranslationRef<"user-settings", {
177
+ readonly "featureFlags.title": "Feature Flags";
178
+ readonly "featureFlags.description": "Please refresh the page when toggling feature flags";
179
+ readonly "featureFlags.filterTitle": "Filter";
180
+ readonly "featureFlags.clearFilter": "Clear filter";
181
+ readonly "featureFlags.emptyFlags.title": "No Feature Flags";
182
+ readonly "featureFlags.emptyFlags.action.title": "An example for how to add a feature flag is highlighted below:";
183
+ readonly "featureFlags.emptyFlags.action.readMoreButtonTitle": "Read More";
184
+ readonly "featureFlags.emptyFlags.description": "Feature Flags make it possible for plugins to register features in Backstage for users to opt into. You can use this to split out logic in your code for manual A/B testing, etc.";
185
+ readonly "featureFlags.flagItem.title.disable": "Disable";
186
+ readonly "featureFlags.flagItem.title.enable": "Enable";
187
+ readonly "featureFlags.flagItem.subtitle.registeredInApplication": "Registered in the application";
188
+ readonly "featureFlags.flagItem.subtitle.registeredInPlugin": "Registered in {{pluginId}} plugin";
189
+ readonly "languageToggle.select": "Select language {{language}}";
190
+ readonly "languageToggle.title": "Language";
191
+ readonly "languageToggle.description": "Change the language";
192
+ readonly "themeToggle.select": "Select {{theme}}";
193
+ readonly "themeToggle.title": "Theme";
194
+ readonly "themeToggle.description": "Change the theme mode";
195
+ readonly "themeToggle.names.auto": "Auto";
196
+ readonly "themeToggle.names.dark": "Dark";
197
+ readonly "themeToggle.names.light": "Light";
198
+ readonly "themeToggle.selectAuto": "Select Auto Theme";
199
+ readonly "signOutMenu.title": "Sign Out";
200
+ readonly "signOutMenu.moreIconTitle": "more";
201
+ readonly "pinToggle.title": "Pin Sidebar";
202
+ readonly "pinToggle.description": "Prevent the sidebar from collapsing";
203
+ readonly "pinToggle.ariaLabelTitle": "Pin Sidebar Switch";
204
+ readonly "pinToggle.switchTitles.unpin": "Unpin Sidebar";
205
+ readonly "pinToggle.switchTitles.pin": "Pin Sidebar";
206
+ readonly "identityCard.title": "Backstage Identity";
207
+ readonly "identityCard.noIdentityTitle": "No Backstage Identity";
208
+ readonly "identityCard.userEntity": "User Entity";
209
+ readonly "identityCard.ownershipEntities": "Ownership Entities";
210
+ readonly "defaultProviderSettings.description": "Provides authentication towards {{provider}} APIs and identities";
211
+ readonly "emptyProviders.title": "No Authentication Providers";
212
+ readonly "emptyProviders.action.title": "Open app-config.yaml and make the changes as highlighted below:";
213
+ readonly "emptyProviders.action.readMoreButtonTitle": "Read More";
214
+ readonly "emptyProviders.description": "You can add Authentication Providers to Backstage which allows you to use these providers to authenticate yourself.";
215
+ readonly "providerSettingsItem.title.signOut": "Sign out from {{title}}";
216
+ readonly "providerSettingsItem.title.signIn": "Sign in to {{title}}";
217
+ readonly "providerSettingsItem.buttonTitle.signOut": "Sign out";
218
+ readonly "providerSettingsItem.buttonTitle.signIn": "Sign in";
219
+ readonly "authProviders.title": "Available Providers";
220
+ readonly "defaultSettingsPage.tabsTitle.featureFlags": "Feature Flags";
221
+ readonly "defaultSettingsPage.tabsTitle.authProviders": "Authentication Providers";
222
+ readonly "defaultSettingsPage.tabsTitle.general": "General";
223
+ readonly "settingsLayout.title": "Settings";
224
+ readonly sidebarTitle: "Settings";
225
+ readonly "profileCard.title": "Profile";
226
+ readonly "appearanceCard.title": "Appearance";
227
+ }>;
228
+
229
+ export { DefaultProviderSettings, ProviderSettingsItem, SettingsPage as Router, Settings, SettingsLayout, USER_SETTINGS_TAB_KEY, UserSettingsAppearanceCard, UserSettingsAuthProviders, UserSettingsFeatureFlags, UserSettingsGeneral, UserSettingsIdentityCard, UserSettingsLanguageToggle, UserSettingsMenu, UserSettingsPage, UserSettingsPinToggle, UserSettingsProfileCard, UserSettingsSignInAvatar, UserSettingsStorage, UserSettingsTab, UserSettingsThemeToggle, userSettingsPlugin as plugin, useUserProfile, userSettingsPlugin, userSettingsTranslationRef };
175
230
  export type { SettingsLayoutProps, SettingsLayoutRouteProps, UserSettingsTabProps };
package/dist/index.esm.js CHANGED
@@ -18,4 +18,5 @@ export { UserSettingsFeatureFlags } from './components/FeatureFlags/UserSettings
18
18
  export { useUserProfile } from './components/useUserProfileInfo.esm.js';
19
19
  export { USER_SETTINGS_TAB_KEY, UserSettingsTab } from './components/UserSettingsTab/UserSettingsTab.esm.js';
20
20
  export { SettingsLayout } from './components/SettingsLayout/SettingsLayout.esm.js';
21
+ export { userSettingsTranslationRef } from './translation.esm.js';
21
22
  //# sourceMappingURL=index.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
@@ -1,5 +1,5 @@
1
1
  var name = "@backstage/plugin-user-settings";
2
- var version = "0.9.1-next.1";
2
+ var version = "0.9.1";
3
3
  var description = "A Backstage plugin that provides a settings page";
4
4
  var backstage = {
5
5
  role: "frontend-plugin",
@@ -65,6 +65,7 @@ var dependencies = {
65
65
  "@backstage/plugin-user-settings-common": "workspace:^",
66
66
  "@backstage/theme": "workspace:^",
67
67
  "@backstage/types": "workspace:^",
68
+ "@backstage/ui": "workspace:^",
68
69
  "@material-ui/core": "^4.12.2",
69
70
  "@material-ui/icons": "^4.9.1",
70
71
  "@material-ui/lab": "4.0.0-alpha.61",
@@ -1 +1 @@
1
- {"version":3,"file":"package.json.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"package.json.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"translation.esm.js","sources":["../src/translation.ts"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationRef } from '@backstage/core-plugin-api/alpha';\n\n/** @alpha */\nexport const userSettingsTranslationRef = createTranslationRef({\n id: 'user-settings',\n messages: {\n languageToggle: {\n title: 'Language',\n description: 'Change the language',\n select: 'Select language {{language}}',\n },\n themeToggle: {\n title: 'Theme',\n description: 'Change the theme mode',\n select: 'Select {{theme}}',\n selectAuto: 'Select Auto Theme',\n names: {\n light: 'Light',\n dark: 'Dark',\n auto: 'Auto',\n },\n },\n signOutMenu: {\n title: 'Sign Out',\n moreIconTitle: 'more',\n },\n pinToggle: {\n title: 'Pin Sidebar',\n description: 'Prevent the sidebar from collapsing',\n switchTitles: {\n unpin: 'Unpin Sidebar',\n pin: 'Pin Sidebar',\n },\n ariaLabelTitle: 'Pin Sidebar Switch',\n },\n identityCard: {\n title: 'Backstage Identity',\n noIdentityTitle: 'No Backstage Identity',\n userEntity: 'User Entity',\n ownershipEntities: 'Ownership Entities',\n },\n defaultProviderSettings: {\n description:\n 'Provides authentication towards {{provider}} APIs and identities',\n },\n emptyProviders: {\n title: 'No Authentication Providers',\n description:\n 'You can add Authentication Providers to Backstage which allows you to use these providers to authenticate yourself.',\n action: {\n title:\n 'Open app-config.yaml and make the changes as highlighted below:',\n readMoreButtonTitle: 'Read More',\n },\n },\n providerSettingsItem: {\n title: {\n signIn: 'Sign in to {{title}}',\n signOut: 'Sign out from {{title}}',\n },\n buttonTitle: {\n signIn: 'Sign in',\n signOut: 'Sign out',\n },\n },\n authProviders: {\n title: 'Available Providers',\n },\n defaultSettingsPage: {\n tabsTitle: {\n general: 'General',\n authProviders: 'Authentication Providers',\n featureFlags: 'Feature Flags',\n },\n },\n featureFlags: {\n title: 'Feature Flags',\n description: 'Please refresh the page when toggling feature flags',\n emptyFlags: {\n title: 'No Feature Flags',\n description:\n 'Feature Flags make it possible for plugins to register features in Backstage for users to opt into. You can use this to split out logic in your code for manual A/B testing, etc.',\n action: {\n title:\n 'An example for how to add a feature flag is highlighted below:',\n readMoreButtonTitle: 'Read More',\n },\n },\n filterTitle: 'Filter',\n clearFilter: 'Clear filter',\n flagItem: {\n title: {\n disable: 'Disable',\n enable: 'Enable',\n },\n subtitle: {\n registeredInApplication: 'Registered in the application',\n registeredInPlugin: 'Registered in {{pluginId}} plugin',\n },\n },\n },\n settingsLayout: {\n title: 'Settings',\n },\n sidebarTitle: 'Settings',\n profileCard: {\n title: 'Profile',\n },\n appearanceCard: {\n title: 'Appearance',\n },\n },\n});\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"translation.esm.js","sources":["../src/translation.ts"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationRef } from '@backstage/core-plugin-api/alpha';\n\n/** @public */\nexport const userSettingsTranslationRef = createTranslationRef({\n id: 'user-settings',\n messages: {\n languageToggle: {\n title: 'Language',\n description: 'Change the language',\n select: 'Select language {{language}}',\n },\n themeToggle: {\n title: 'Theme',\n description: 'Change the theme mode',\n select: 'Select {{theme}}',\n selectAuto: 'Select Auto Theme',\n names: {\n light: 'Light',\n dark: 'Dark',\n auto: 'Auto',\n },\n },\n signOutMenu: {\n title: 'Sign Out',\n moreIconTitle: 'more',\n },\n pinToggle: {\n title: 'Pin Sidebar',\n description: 'Prevent the sidebar from collapsing',\n switchTitles: {\n unpin: 'Unpin Sidebar',\n pin: 'Pin Sidebar',\n },\n ariaLabelTitle: 'Pin Sidebar Switch',\n },\n identityCard: {\n title: 'Backstage Identity',\n noIdentityTitle: 'No Backstage Identity',\n userEntity: 'User Entity',\n ownershipEntities: 'Ownership Entities',\n },\n defaultProviderSettings: {\n description:\n 'Provides authentication towards {{provider}} APIs and identities',\n },\n emptyProviders: {\n title: 'No Authentication Providers',\n description:\n 'You can add Authentication Providers to Backstage which allows you to use these providers to authenticate yourself.',\n action: {\n title:\n 'Open app-config.yaml and make the changes as highlighted below:',\n readMoreButtonTitle: 'Read More',\n },\n },\n providerSettingsItem: {\n title: {\n signIn: 'Sign in to {{title}}',\n signOut: 'Sign out from {{title}}',\n },\n buttonTitle: {\n signIn: 'Sign in',\n signOut: 'Sign out',\n },\n },\n authProviders: {\n title: 'Available Providers',\n },\n defaultSettingsPage: {\n tabsTitle: {\n general: 'General',\n authProviders: 'Authentication Providers',\n featureFlags: 'Feature Flags',\n },\n },\n featureFlags: {\n title: 'Feature Flags',\n description: 'Please refresh the page when toggling feature flags',\n emptyFlags: {\n title: 'No Feature Flags',\n description:\n 'Feature Flags make it possible for plugins to register features in Backstage for users to opt into. You can use this to split out logic in your code for manual A/B testing, etc.',\n action: {\n title:\n 'An example for how to add a feature flag is highlighted below:',\n readMoreButtonTitle: 'Read More',\n },\n },\n filterTitle: 'Filter',\n clearFilter: 'Clear filter',\n flagItem: {\n title: {\n disable: 'Disable',\n enable: 'Enable',\n },\n subtitle: {\n registeredInApplication: 'Registered in the application',\n registeredInPlugin: 'Registered in {{pluginId}} plugin',\n },\n },\n },\n settingsLayout: {\n title: 'Settings',\n },\n sidebarTitle: 'Settings',\n profileCard: {\n title: 'Profile',\n },\n appearanceCard: {\n title: 'Appearance',\n },\n },\n});\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-user-settings",
3
- "version": "0.9.1-next.1",
3
+ "version": "0.9.1",
4
4
  "description": "A Backstage plugin that provides a settings page",
5
5
  "backstage": {
6
6
  "role": "frontend-plugin",
@@ -67,17 +67,18 @@
67
67
  "test": "backstage-cli package test"
68
68
  },
69
69
  "dependencies": {
70
- "@backstage/catalog-model": "1.7.6",
71
- "@backstage/core-app-api": "1.19.6-next.0",
72
- "@backstage/core-components": "0.18.8-next.0",
73
- "@backstage/core-plugin-api": "1.12.4-next.0",
74
- "@backstage/errors": "1.2.7",
75
- "@backstage/frontend-plugin-api": "0.14.2-next.0",
76
- "@backstage/plugin-catalog-react": "2.1.0-next.1",
77
- "@backstage/plugin-signals-react": "0.0.20-next.0",
78
- "@backstage/plugin-user-settings-common": "0.1.0",
79
- "@backstage/theme": "0.7.2",
80
- "@backstage/types": "1.2.2",
70
+ "@backstage/catalog-model": "^1.7.7",
71
+ "@backstage/core-app-api": "^1.19.6",
72
+ "@backstage/core-components": "^0.18.8",
73
+ "@backstage/core-plugin-api": "^1.12.4",
74
+ "@backstage/errors": "^1.2.7",
75
+ "@backstage/frontend-plugin-api": "^0.15.0",
76
+ "@backstage/plugin-catalog-react": "^2.1.0",
77
+ "@backstage/plugin-signals-react": "^0.0.20",
78
+ "@backstage/plugin-user-settings-common": "^0.1.0",
79
+ "@backstage/theme": "^0.7.2",
80
+ "@backstage/types": "^1.2.2",
81
+ "@backstage/ui": "^0.13.0",
81
82
  "@material-ui/core": "^4.12.2",
82
83
  "@material-ui/icons": "^4.9.1",
83
84
  "@material-ui/lab": "4.0.0-alpha.61",
@@ -86,10 +87,10 @@
86
87
  "zen-observable": "^0.10.0"
87
88
  },
88
89
  "devDependencies": {
89
- "@backstage/cli": "0.36.0-next.1",
90
- "@backstage/dev-utils": "1.1.21-next.1",
91
- "@backstage/plugin-catalog": "1.34.0-next.1",
92
- "@backstage/test-utils": "1.7.16-next.0",
90
+ "@backstage/cli": "^0.36.0",
91
+ "@backstage/dev-utils": "^1.1.21",
92
+ "@backstage/plugin-catalog": "^2.0.0",
93
+ "@backstage/test-utils": "^1.7.16",
93
94
  "@testing-library/dom": "^10.0.0",
94
95
  "@testing-library/jest-dom": "^6.0.0",
95
96
  "@testing-library/react": "^16.0.0",