@forge/react 11.9.2-next.0-experimental-919607a → 11.10.0-experimental-5a86f99

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,10 +1,63 @@
1
1
  # @forge/react
2
2
 
3
- ## 11.9.2-next.0-experimental-919607a
3
+ ## 11.10.0-experimental-5a86f99
4
+
5
+ ### Minor Changes
6
+
7
+ - 5a86f99: Bump forge-react-types to include UI Kit modal component prop changes
8
+
9
+ ## 11.10.0
10
+
11
+ ### Minor Changes
12
+
13
+ - 62fcf09: Added props to Global component
14
+ - 37d13e9: Added Global component
15
+ - f77b008: Added bumps to include new Tile component
16
+ - f058dd8: Expose Permissions API in @forge/bridge for Custom UI apps
17
+
18
+ ### Patch Changes
19
+
20
+ - dbfa292: Bumped @atlaskit/forge-react-types
21
+ - Updated dependencies [5a8ee7a]
22
+ - Updated dependencies [f058dd8]
23
+ - Updated dependencies [28b4837]
24
+ - Updated dependencies [140f500]
25
+ - @forge/bridge@5.11.0
26
+
27
+ ## 11.10.0-next.5
28
+
29
+ ### Minor Changes
30
+
31
+ - 62fcf09: Added props to Global component
32
+
33
+ ## 11.10.0-next.4
34
+
35
+ ### Minor Changes
36
+
37
+ - 37d13e9: Added Global component
38
+
39
+ ## 11.10.0-next.3
40
+
41
+ ### Minor Changes
42
+
43
+ - f77b008: Added bumps to include new Tile component
44
+
45
+ ## 11.10.0-next.2
46
+
47
+ ### Patch Changes
48
+
49
+ - dbfa292: Bumped @atlaskit/forge-react-types
50
+
51
+ ## 11.10.0-next.1
52
+
53
+ ### Minor Changes
54
+
55
+ - f058dd8: Expose Permissions API in @forge/bridge for Custom UI apps
4
56
 
5
57
  ### Patch Changes
6
58
 
7
- - @forge/bridge@5.10.3-next.1-experimental-919607a
59
+ - Updated dependencies [f058dd8]
60
+ - @forge/bridge@5.11.0-next.2
8
61
 
9
62
  ## 11.9.2-next.0
10
63
 
@@ -0,0 +1,31 @@
1
+ import type { ReactElement, ReactNode } from 'react';
2
+ declare type GlobalElements = ReactElement<GlobalExpandableMenuItemProps> | ReactElement<GlobalLinkMenuItemProps> | ReactElement<GlobalSidebarProps> | ReactElement<GlobalMainProps> | ReactElement<GlobalProps>;
3
+ declare type NotGlobalComponents<T> = T extends GlobalElements ? never : T;
4
+ interface GlobalLinkMenuItemProps {
5
+ href: string;
6
+ label: string;
7
+ children?: never;
8
+ }
9
+ interface GlobalExpandableMenuItemProps {
10
+ children: ReactElement<GlobalLinkMenuItemProps> | ReactElement<GlobalLinkMenuItemProps>[];
11
+ label: string;
12
+ }
13
+ interface GlobalSidebarProps {
14
+ forYouUrl?: string;
15
+ children: ReactElement<GlobalLinkMenuItemProps> | ReactElement<GlobalExpandableMenuItemProps> | Array<ReactElement<GlobalLinkMenuItemProps> | ReactElement<GlobalExpandableMenuItemProps>>;
16
+ }
17
+ interface GlobalMainProps {
18
+ children: NotGlobalComponents<ReactNode>;
19
+ }
20
+ interface GlobalProps {
21
+ children: [ReactElement<GlobalSidebarProps, typeof Global.Sidebar>, ReactElement<GlobalMainProps, typeof Global.Main>] | [ReactElement<GlobalMainProps, typeof Global.Main>, ReactElement<GlobalSidebarProps, typeof Global.Sidebar>];
22
+ }
23
+ export declare const Global: {
24
+ (props: GlobalProps): import("react/jsx-runtime").JSX.Element;
25
+ Main(props: GlobalMainProps): import("react/jsx-runtime").JSX.Element;
26
+ Sidebar({ children, forYouUrl }: GlobalSidebarProps): import("react/jsx-runtime").JSX.Element;
27
+ ExpandMenuItem({ label, children }: GlobalExpandableMenuItemProps): import("react/jsx-runtime").JSX.Element;
28
+ LinkMenuItem(props: GlobalLinkMenuItemProps): import("react/jsx-runtime").JSX.Element;
29
+ };
30
+ export {};
31
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/global/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGrD,aAAK,cAAc,GACf,YAAY,CAAC,6BAA6B,CAAC,GAC3C,YAAY,CAAC,uBAAuB,CAAC,GACrC,YAAY,CAAC,kBAAkB,CAAC,GAChC,YAAY,CAAC,eAAe,CAAC,GAC7B,YAAY,CAAC,WAAW,CAAC,CAAC;AAE9B,aAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,SAAS,cAAc,GAAG,KAAK,GAAG,CAAC,CAAC;AAEnE,UAAU,uBAAuB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,KAAK,CAAC;CAElB;AAED,UAAU,6BAA6B;IACrC,QAAQ,EAAE,YAAY,CAAC,uBAAuB,CAAC,GAAG,YAAY,CAAC,uBAAuB,CAAC,EAAE,CAAC;IAC1F,KAAK,EAAE,MAAM,CAAC;CAEf;AAED,UAAU,kBAAkB;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EACJ,YAAY,CAAC,uBAAuB,CAAC,GACrC,YAAY,CAAC,6BAA6B,CAAC,GAC3C,KAAK,CAAC,YAAY,CAAC,uBAAuB,CAAC,GAAG,YAAY,CAAC,6BAA6B,CAAC,CAAC,CAAC;CAEhG;AAED,UAAU,eAAe;IACvB,QAAQ,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC;CAE1C;AAED,UAAU,WAAW;IACnB,QAAQ,EACJ,CAAC,YAAY,CAAC,kBAAkB,EAAE,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,eAAe,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,GAC5G,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,kBAAkB,EAAE,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;CAElH;AAiBD,eAAO,MAAM,MAAM;YAAW,WAAW;gBAInB,eAAe;qCAIM,kBAAkB;wCAIf,6BAA6B;wBAI7C,uBAAuB;CAdpD,CAAC"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Global = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const GlobalPrimitive = 'Global';
6
+ const GlobalMainPrimitive = 'Global.Main';
7
+ const GlobalSidebarPrimitive = 'Global.Sidebar';
8
+ const GlobalExpandMenuItemPrimitive = 'Global.ExpandMenuItem';
9
+ const GlobalLinkMenuItemPrimitive = 'Global.LinkMenuItem';
10
+ // Top level component
11
+ const Global = (props) => {
12
+ return (0, jsx_runtime_1.jsx)(GlobalPrimitive, { children: props.children });
13
+ };
14
+ exports.Global = Global;
15
+ exports.Global.Main = (props) => {
16
+ return (0, jsx_runtime_1.jsx)(GlobalMainPrimitive, { children: props.children });
17
+ };
18
+ exports.Global.Sidebar = ({ children, forYouUrl }) => {
19
+ return (0, jsx_runtime_1.jsx)(GlobalSidebarPrimitive, { forYouUrl: forYouUrl, children: children });
20
+ };
21
+ exports.Global.ExpandMenuItem = ({ label, children }) => {
22
+ return (0, jsx_runtime_1.jsx)(GlobalExpandMenuItemPrimitive, { label: label, children: children });
23
+ };
24
+ exports.Global.LinkMenuItem = (props) => {
25
+ return (0, jsx_runtime_1.jsx)(GlobalLinkMenuItemPrimitive, { ...props });
26
+ };
@@ -6,6 +6,7 @@ export { Popup } from './popup';
6
6
  export { Comment } from './comment';
7
7
  export { AdfRenderer } from './adf-renderer';
8
8
  export { UserPickerValue } from '../types/index';
9
+ export { Global } from './global';
9
10
  declare type UserProps = {
10
11
  accountId: string;
11
12
  hideDisplayName?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,WAAW,EACX,eAAe,IAAI,SAAS,EAC5B,qBAAqB,IAAI,eAAe,EACxC,cAAc,EACd,UAAU,EACX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,kBAAkB,IAAI,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,aAAK,SAAS,GAAG;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AACF;;;;GAIG;AACH,eAAO,MAAM,IAAI,UAAgC,SAAS,KAAK,YAAY,CAAC;AAE5E,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC1D,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,eAAO,MAAM,KAAK,UAAiC,UAAU,KAAK,YAAY,CAAC;AAE/E,eAAO,MAAM,IAAI,UAAgC,SAAS,KAAK,YAAY,CAAC;AAC5E,eAAO,MAAM,UAAU,UAAsC,eAAe,KAAK,YAAY,CAAC;AAC9F,eAAO,MAAM,SAAS,UAAqC,cAAc,KAAK,YAAY,CAAC;AAE3F,eAAO,MAAM,EAAE,UAA8B,WAAW,KAAK,YAAY,CAAC;AAC1E,eAAO,MAAM,MAAM,UAAkC,WAAW,KAAK,YAAY,CAAC;AAClF,eAAO,MAAM,MAAM,UAAkC,WAAW,KAAK,YAAY,CAAC;AAElF;;;;GAIG;AACH,eAAO,MAAM,KAAK,UAAiC,UAAU,KAAK,YAAY,CAAC;AAE/E;;GAEG;AACH,cAAc,qBAAqB,CAAC;AAIpC,UAAU,uBAAuB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3C,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AACD,aAAK,kBAAkB,GAAG,uBAAuB,GAAG,uBAAuB,CAAC;AAC5E,eAAO,MAAM,aAAa,UAAyC,kBAAkB,KAAK,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,WAAW,EACX,eAAe,IAAI,SAAS,EAC5B,qBAAqB,IAAI,eAAe,EACxC,cAAc,EACd,UAAU,EACX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,kBAAkB,IAAI,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,aAAK,SAAS,GAAG;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AACF;;;;GAIG;AACH,eAAO,MAAM,IAAI,UAAgC,SAAS,KAAK,YAAY,CAAC;AAE5E,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC1D,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,eAAO,MAAM,KAAK,UAAiC,UAAU,KAAK,YAAY,CAAC;AAE/E,eAAO,MAAM,IAAI,UAAgC,SAAS,KAAK,YAAY,CAAC;AAC5E,eAAO,MAAM,UAAU,UAAsC,eAAe,KAAK,YAAY,CAAC;AAC9F,eAAO,MAAM,SAAS,UAAqC,cAAc,KAAK,YAAY,CAAC;AAE3F,eAAO,MAAM,EAAE,UAA8B,WAAW,KAAK,YAAY,CAAC;AAC1E,eAAO,MAAM,MAAM,UAAkC,WAAW,KAAK,YAAY,CAAC;AAClF,eAAO,MAAM,MAAM,UAAkC,WAAW,KAAK,YAAY,CAAC;AAElF;;;;GAIG;AACH,eAAO,MAAM,KAAK,UAAiC,UAAU,KAAK,YAAY,CAAC;AAE/E;;GAEG;AACH,cAAc,qBAAqB,CAAC;AAIpC,UAAU,uBAAuB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3C,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AACD,aAAK,kBAAkB,GAAG,uBAAuB,GAAG,uBAAuB,CAAC;AAC5E,eAAO,MAAM,aAAa,UAAyC,kBAAkB,KAAK,YAAY,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CheckboxGroup = exports.Frame = exports.Strong = exports.Strike = exports.Em = exports.UserGroup = exports.UserPicker = exports.Link = exports.Image = exports.User = exports.AdfRenderer = exports.Comment = exports.Popup = exports.InlineEdit = exports.DynamicTable = void 0;
3
+ exports.CheckboxGroup = exports.Frame = exports.Strong = exports.Strike = exports.Em = exports.UserGroup = exports.UserPicker = exports.Link = exports.Image = exports.User = exports.Global = exports.AdfRenderer = exports.Comment = exports.Popup = exports.InlineEdit = exports.DynamicTable = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  var dynamic_table_1 = require("./dynamic-table");
6
6
  Object.defineProperty(exports, "DynamicTable", { enumerable: true, get: function () { return dynamic_table_1.DynamicTable; } });
@@ -12,6 +12,8 @@ var comment_1 = require("./comment");
12
12
  Object.defineProperty(exports, "Comment", { enumerable: true, get: function () { return comment_1.Comment; } });
13
13
  var adf_renderer_1 = require("./adf-renderer");
14
14
  Object.defineProperty(exports, "AdfRenderer", { enumerable: true, get: function () { return adf_renderer_1.AdfRenderer; } });
15
+ var global_1 = require("./global");
16
+ Object.defineProperty(exports, "Global", { enumerable: true, get: function () { return global_1.Global; } });
15
17
  /**
16
18
  * A component that represents a user, displaying details such as name and profile picture.
17
19
  *
@@ -1,6 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import { ForgeElement } from '../types/index';
3
- import type { TBadge, TBarChart, TBox, TButton, TButtonGroup, TCalendar, TCheckbox, TCode, TCodeBlock, TDatePicker, TDonutChart, TErrorMessage, TFileCard, TFilePicker, THeading, THelperMessage, THorizontalBarChart, THorizontalStackBarChart, TInline, TLabel, TList, TListItem, TLozenge, TLineChart, TLinkButton, TModal, TModalHeader, TModalBody, TModalFooter, TModalTitle, TModalTransition, TPieChart, TProgressBar, TProgressTracker, TRadio, TRadioGroup, TRange, TSectionMessage, TSectionMessageAction, TSpinner, TStack, TStackBarChart, TTabs, TTab, TTabList, TTabPanel, TTag, TTagGroup, TTimePicker, TForm, TFormHeader, TFormFooter, TFormSection, TTooltip, TTextArea, TTextfield, TText, TToggle, TValidMessage, TLoadingButton, TSelect, TIcon, TEmptyState, TPressable, TCommentEditor, TChromelessEditor } from '@atlaskit/forge-react-types';
3
+ import type { TBadge, TBarChart, TBox, TButton, TButtonGroup, TCalendar, TCheckbox, TCode, TCodeBlock, TDatePicker, TDonutChart, TErrorMessage, TFileCard, TFilePicker, THeading, THelperMessage, THorizontalBarChart, THorizontalStackBarChart, TInline, TLabel, TList, TListItem, TLozenge, TLineChart, TLinkButton, TModal, TModalHeader, TModalBody, TModalFooter, TModalTitle, TModalTransition, TPieChart, TProgressBar, TProgressTracker, TRadio, TRadioGroup, TRange, TSectionMessage, TSectionMessageAction, TSpinner, TStack, TStackBarChart, TTabs, TTab, TTabList, TTabPanel, TTag, TTagGroup, TTimePicker, TForm, TFormHeader, TFormFooter, TFormSection, TTooltip, TTextArea, TTextfield, TText, TToggle, TValidMessage, TLoadingButton, TSelect, TIcon, TEmptyState, TPressable, TCommentEditor, TChromelessEditor, TTile } from '@atlaskit/forge-react-types';
4
4
  /**
5
5
  * A badge is a visual indicator for numeric values such as tallies and scores.
6
6
  *
@@ -398,4 +398,10 @@ export declare const CommentEditor: TCommentEditor<ForgeElement<Record<string, a
398
398
  * @see [ChromelessEditor](https://developer.atlassian.com/platform/forge/ui-kit/components/chromeless-editor/) in UI Kit documentation for more information
399
399
  */
400
400
  export declare const ChromelessEditor: TChromelessEditor<ForgeElement<Record<string, any>>>;
401
+ /**
402
+ * A tile is a rounded square that takes an asset and represents a noun.
403
+ *
404
+ * @see [Tile](https://developer.atlassian.com/platform/forge/ui-kit/components/tile/) in UI Kit documentation for more information
405
+ */
406
+ export declare const Tile: TTile<ForgeElement<Record<string, any>>>;
401
407
  //# sourceMappingURL=ui-kit-components.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ui-kit-components.d.ts","sourceRoot":"","sources":["../../src/components/ui-kit-components.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ui-kit-components.d.ts","sourceRoot":"","sources":["../../src/components/ui-kit-components.ts"],"names":[],"mappings":";AAQA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EACV,MAAM,EACN,SAAS,EACT,IAAI,EACJ,OAAO,EACP,YAAY,EACZ,SAAS,EACT,SAAS,EACT,KAAK,EACL,UAAU,EACV,WAAW,EACX,WAAW,EACX,aAAa,EACb,SAAS,EACT,WAAW,EACX,QAAQ,EACR,cAAc,EACd,mBAAmB,EACnB,wBAAwB,EACxB,OAAO,EACP,MAAM,EACN,KAAK,EACL,SAAS,EACT,QAAQ,EACR,UAAU,EACV,WAAW,EACX,MAAM,EACN,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,MAAM,EACN,WAAW,EACX,MAAM,EACN,eAAe,EACf,qBAAqB,EACrB,QAAQ,EACR,MAAM,EACN,cAAc,EACd,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,SAAS,EACT,WAAW,EACX,KAAK,EACL,WAAW,EACX,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,UAAU,EACV,KAAK,EACL,OAAO,EACP,aAAa,EACb,cAAc,EACd,OAAO,EACP,KAAK,EACL,WAAW,EACX,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,KAAK,EACN,MAAM,6BAA6B,CAAC;AAErC;;;;GAIG;AACH,eAAO,MAAM,KAAK,2CAA6C,CAAC;AAChE;;;;GAIG;AACH,eAAO,MAAM,QAAQ,8CAAmD,CAAC;AACzE;;;;GAIG;AACH,eAAO,MAAM,GAAG,yCAAyC,CAAC;AAC1D;;;;GAIG;AACH,eAAO,MAAM,MAAM,4CAA+C,CAAC;AACnE;;;;GAIG;AACH,eAAO,MAAM,WAAW,iDAAyD,CAAC;AAClF;;;;GAIG;AACH,eAAO,MAAM,QAAQ,8CAAmD,CAAC;AACzE;;;;GAIG;AACH,eAAO,MAAM,QAAQ,8CAAmD,CAAC;AACzE;;;;GAIG;AACH,eAAO,MAAM,IAAI,0CAA2C,CAAC;AAC7D;;;;GAIG;AACH,eAAO,MAAM,SAAS,+CAAqD,CAAC;AAC5E;;;;GAIG;AACH,eAAO,MAAM,UAAU,gDAAuD,CAAC;AAC/E;;;;GAIG;AACH,eAAO,MAAM,UAAU,gDAAuD,CAAC;AAC/E;;;;GAIG;AACH,eAAO,MAAM,UAAU,gDAAuD,CAAC;AAC/E;;;;;GAKG;AACH,eAAO,MAAM,YAAY,kDAA2D,CAAC;AAErF;;;;GAIG;AACH,eAAO,MAAM,QAAQ,8CAAmD,CAAC;AAEzE;;;;GAIG;AACH,eAAO,MAAM,UAAU,gDAAuD,CAAC;AAE/E;;;;GAIG;AACH,eAAO,MAAM,IAAI,0CAA2C,CAAC;AAC7D;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,gDAAuD,CAAC;AAC/E;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,gDAAuD,CAAC;AAC/E;;;;;GAKG;AACH,eAAO,MAAM,WAAW,iDAAyD,CAAC;AAClF;;;;GAIG;AACH,eAAO,MAAM,OAAO,6CAAiD,CAAC;AACtE;;;;;GAKG;AACH,eAAO,MAAM,aAAa,mDAA6D,CAAC;AACxF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,wDAAuE,CAAC;AACvG;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,6DAAiF,CAAC;AACtH;;;;GAIG;AACH,eAAO,MAAM,IAAI,0CAA2C,CAAC;AAC7D;;;;GAIG;AACH,eAAO,MAAM,MAAM,4CAA+C,CAAC;AACnE;;;;GAIG;AACH,eAAO,MAAM,KAAK,2CAA6C,CAAC;AAChE;;;;GAIG;AACH,eAAO,MAAM,SAAS,+CAAqD,CAAC;AAC5E;;;;GAIG;AACH,eAAO,MAAM,UAAU,gDAAuD,CAAC;AAC/E;;;;GAIG;AACH,eAAO,MAAM,IAAI,0CAA2C,CAAC;AAC7D,eAAO,MAAM,QAAQ,8CAAmD,CAAC;AACzE;;;;GAIG;AACH,eAAO,MAAM,aAAa,mDAA6D,CAAC;AACxF;;;;GAIG;AACH,eAAO,MAAM,OAAO,6CAAiD,CAAC;AACtE;;;;GAIG;AACH,eAAO,MAAM,KAAK,2CAA6C,CAAC;AAChE;;;;GAIG;AACH,eAAO,MAAM,SAAS,+CAAqD,CAAC;AAC5E;;;;;GAKG;AACH,eAAO,MAAM,WAAW,iDAAyD,CAAC;AAClF;;;;GAIG;AACH,eAAO,MAAM,WAAW,iDAAyD,CAAC;AAClF;;;;GAIG;AACH,eAAO,MAAM,UAAU,gDAAuD,CAAC;AAC/E;;;;GAIG;AACH,eAAO,MAAM,eAAe,qDAAiE,CAAC;AAC9F;;;;GAIG;AACH,eAAO,MAAM,QAAQ,8CAAmD,CAAC;AACzE;;;;GAIG;AACH,eAAO,MAAM,WAAW,iDAAyD,CAAC;AAClF;;;;GAIG;AACH,eAAO,MAAM,eAAe,qDAAiE,CAAC;AAC9F;;;;GAIG;AACH,eAAO,MAAM,KAAK,2CAA6C,CAAC;AAChE;;;;GAIG;AACH,eAAO,MAAM,UAAU,gDAAuD,CAAC;AAC/E;;;;GAIG;AACH,eAAO,MAAM,KAAK,2CAA6C,CAAC;AAChE;;;;GAIG;AACH,eAAO,MAAM,MAAM,4CAA+C,CAAC;AACnE;;;;GAIG;AACH,eAAO,MAAM,cAAc,oDAA+D,CAAC;AAC3F;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,0DAA2E,CAAC;AAC7G;;;;GAIG;AACH,eAAO,MAAM,OAAO,6CAAiD,CAAC;AACtE;;;;GAIG;AACH,eAAO,MAAM,KAAK,2CAA6C,CAAC;AAChE;;;;GAIG;AACH,eAAO,MAAM,aAAa,mDAA6D,CAAC;AACxF;;;;GAIG;AACH,eAAO,MAAM,GAAG,yCAAyC,CAAC;AAC1D;;;;GAIG;AACH,eAAO,MAAM,OAAO,6CAAiD,CAAC;AACtE;;;;GAIG;AACH,eAAO,MAAM,QAAQ,8CAAmD,CAAC;AACzE;;;;GAIG;AACH,eAAO,MAAM,IAAI,0CAA2C,CAAC;AAC7D,eAAO,MAAM,GAAG,yCAAyC,CAAC;AAC1D;;;;GAIG;AACH,eAAO,MAAM,QAAQ,8CAAmD,CAAC;AACzE;;;;GAIG;AACH,eAAO,MAAM,QAAQ,8CAAmD,CAAC;AACzE;;;;GAIG;AACH,eAAO,MAAM,SAAS,+CAAqD,CAAC;AAC5E;;;;GAIG;AACH,eAAO,MAAM,UAAU,gDAAuD,CAAC;AAC/E;;;;GAIG;AACH,eAAO,MAAM,MAAM,4CAA+C,CAAC;AACnE;;;;GAIG;AACH,eAAO,MAAM,OAAO,6CAAiD,CAAC;AAEtE;;;;;GAKG;AACH,eAAO,MAAM,IAAI,0CAA2C,CAAC;AAE7D;;;;;GAKG;AACH,eAAO,MAAM,YAAY,kDAA2D,CAAC;AAErF,eAAO,MAAM,gBAAgB,QAA0C,WAAW,CAAC;AAEnF;;;;GAIG;AACH,eAAO,MAAM,SAAS,+CAAqD,CAAC;AAE5E;;;;GAIG;AACH,eAAO,MAAM,aAAa,mDAA6D,CAAC;AAExF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,sDAAmE,CAAC;AAEjG;;;;GAIG;AACH,eAAO,MAAM,IAAI,0CAA2C,CAAC"}
@@ -8,7 +8,7 @@
8
8
  // For more information, please see: https://hello.atlassian.net/wiki/x/SI2n0w?atlOrigin=eyJpIjoiYjJhOTliZmZmYWE1NDE5ZjgzOWU1Y2ViZWI3Yjk3NTMiLCJwIjoiYyJ9
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.StackBarChart = exports.Stack = exports.Spinner = exports.SectionMessageAction = exports.SectionMessage = exports.Select = exports.Range = exports.RadioGroup = exports.Radio = exports.ProgressTracker = exports.ProgressBar = exports.PieChart = exports.ModalTransition = exports.ModalTitle = exports.ModalHeader = exports.ModalFooter = exports.ModalBody = exports.Modal = exports.Lozenge = exports.LoadingButton = exports.ListItem = exports.List = exports.LinkButton = exports.LineChart = exports.Label = exports.Inline = exports.Icon = exports.HorizontalStackBarChart = exports.HorizontalBarChart = exports.HelperMessage = exports.Heading = exports.FormSection = exports.FormHeader = exports.FormFooter = exports.Form = exports.FilePicker = exports.FileCard = exports.ErrorMessage = exports.EmptyState = exports.DonutChart = exports.DatePicker = exports.CodeBlock = exports.Code = exports.Checkbox = exports.Calendar = exports.ButtonGroup = exports.Button = exports.Box = exports.BarChart = exports.Badge = void 0;
11
- exports.ChromelessEditor = exports.CommentEditor = exports.Pressable = exports.RequiredAsterisk = exports.ValidMessage = exports.Text = exports.Tooltip = exports.Toggle = exports.TimePicker = exports.Textfield = exports.TextArea = exports.TagGroup = exports.Tag = exports.Tabs = exports.TabPanel = exports.TabList = exports.Tab = void 0;
11
+ exports.Tile = exports.ChromelessEditor = exports.CommentEditor = exports.Pressable = exports.RequiredAsterisk = exports.ValidMessage = exports.Text = exports.Tooltip = exports.Toggle = exports.TimePicker = exports.Textfield = exports.TextArea = exports.TagGroup = exports.Tag = exports.Tabs = exports.TabPanel = exports.TabList = exports.Tab = void 0;
12
12
  /**
13
13
  * A badge is a visual indicator for numeric values such as tallies and scores.
14
14
  *
@@ -407,3 +407,9 @@ exports.CommentEditor = 'CommentEditor';
407
407
  * @see [ChromelessEditor](https://developer.atlassian.com/platform/forge/ui-kit/components/chromeless-editor/) in UI Kit documentation for more information
408
408
  */
409
409
  exports.ChromelessEditor = 'ChromelessEditor';
410
+ /**
411
+ * A tile is a rounded square that takes an asset and represents a noun.
412
+ *
413
+ * @see [Tile](https://developer.atlassian.com/platform/forge/ui-kit/components/tile/) in UI Kit documentation for more information
414
+ */
415
+ exports.Tile = 'Tile';
@@ -4,11 +4,25 @@ const react_hooks_1 = require("@testing-library/react-hooks");
4
4
  const usePermissions_1 = require("../usePermissions");
5
5
  const testUtils_1 = require("../../__test__/testUtils");
6
6
  // Mock @forge/bridge
7
- jest.mock('@forge/bridge', () => ({
8
- view: {
9
- getContext: jest.fn()
7
+ jest.mock('@forge/bridge', () => {
8
+ // Set up window before requiring actual bridge to avoid initialization issues
9
+ if (typeof window === 'undefined') {
10
+ // @ts-ignore
11
+ global.window = global;
12
+ // @ts-ignore
13
+ global.window.__bridge = {
14
+ callBridge: jest.fn()
15
+ };
10
16
  }
11
- }));
17
+ const actualBridge = jest.requireActual('@forge/bridge');
18
+ return {
19
+ ...actualBridge,
20
+ view: {
21
+ ...actualBridge.view,
22
+ getContext: jest.fn()
23
+ }
24
+ };
25
+ });
12
26
  const mockGetContext = jest.fn();
13
27
  describe('usePermissions', () => {
14
28
  beforeEach(() => {
@@ -1,13 +1,5 @@
1
- /**
2
- * Resource types that can be loaded externally
3
- */
4
- declare const RESOURCE_TYPES: readonly ["fonts", "styles", "frames", "images", "media", "scripts"];
5
- export declare type ResourceType = (typeof RESOURCE_TYPES)[number];
6
- /**
7
- * Fetch types for external requests
8
- */
9
- declare const FETCH_TYPES: readonly ["backend", "client"];
10
- export declare type FetchType = (typeof FETCH_TYPES)[number];
1
+ import { type PermissionRequirements, type MissingPermissions, type PermissionCheckResult, type ResourceType, type FetchType } from '@forge/bridge';
2
+ export type { ResourceType, FetchType };
11
3
  export interface Permissions {
12
4
  scopes?: string[];
13
5
  external?: {
@@ -24,21 +16,7 @@ export interface Permissions {
24
16
  };
25
17
  content?: Record<string, unknown>;
26
18
  }
27
- /**
28
- * Required permissions for a component
29
- */
30
- export declare type PermissionRequirements = Permissions;
31
- /**
32
- * Missing permissions information
33
- */
34
- export declare type MissingPermissions = Permissions;
35
- /**
36
- * Permission check result
37
- */
38
- export interface PermissionCheckResult {
39
- granted: boolean;
40
- missing: MissingPermissions | null;
41
- }
19
+ export type { PermissionRequirements, MissingPermissions, PermissionCheckResult };
42
20
  /**
43
21
  * Hook for checking permissions in Forge apps
44
22
  *
@@ -78,8 +56,7 @@ export interface PermissionCheckResult {
78
56
  export declare const usePermissions: (requiredPermissions: PermissionRequirements) => {
79
57
  hasPermission: boolean;
80
58
  isLoading: boolean;
81
- missingPermissions: Permissions | null;
59
+ missingPermissions: PermissionRequirements | null;
82
60
  error: Error | null;
83
61
  };
84
- export {};
85
62
  //# sourceMappingURL=usePermissions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"usePermissions.d.ts","sourceRoot":"","sources":["../../src/hooks/usePermissions.ts"],"names":[],"mappings":"AAuBA;;GAEG;AACH,QAAA,MAAM,cAAc,sEAAuE,CAAC;AAC5F,oBAAY,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D;;GAEG;AACH,QAAA,MAAM,WAAW,gCAAiC,CAAC;AACnD,oBAAY,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE;YACN,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;YACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;SACnB,CAAC;QACF,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,oBAAY,sBAAsB,GAAG,WAAW,CAAC;AAEjD;;GAEG;AACH,oBAAY,kBAAkB,GAAG,WAAW,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACpC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,cAAc,wBAAyB,sBAAsB;;;;;CAqJzE,CAAC"}
1
+ {"version":3,"file":"usePermissions.d.ts","sourceRoot":"","sources":["../../src/hooks/usePermissions.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,eAAe,CAAC;AAGvB,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;AAExC,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE;YACN,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;YACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;SACnB,CAAC;QACF,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAGD,YAAY,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,CAAC;AAElF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,cAAc,wBAAyB,sBAAsB;;;;;CAoEzE,CAAC"}
@@ -3,32 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.usePermissions = void 0;
4
4
  const react_1 = require("react");
5
5
  const bridge_1 = require("@forge/bridge");
6
- const egress_1 = require("@forge/egress");
7
- /**
8
- * https://ecosystem-platform.atlassian.net/browse/DEPLOY-1411
9
- * Uses @forge/egress for URL matching (same logic as @forge/api)
10
- */
11
- /**
12
- * Helper function to extract URL string from external URL permissions.
13
- * Matches the implementation in @forge/api for consistency.
14
- */
15
- function extractUrlString(url) {
16
- if (typeof url === 'string') {
17
- return url;
18
- }
19
- if ('address' in url && url.address) {
20
- return url.address;
21
- }
22
- return url.remote || '';
23
- }
24
- /**
25
- * Resource types that can be loaded externally
26
- */
27
- const RESOURCE_TYPES = ['fonts', 'styles', 'frames', 'images', 'media', 'scripts'];
28
- /**
29
- * Fetch types for external requests
30
- */
31
- const FETCH_TYPES = ['backend', 'client'];
32
6
  /**
33
7
  * Hook for checking permissions in Forge apps
34
8
  *
@@ -69,6 +43,10 @@ const usePermissions = (requiredPermissions) => {
69
43
  const [context, setContext] = (0, react_1.useState)();
70
44
  const [isLoading, setIsLoading] = (0, react_1.useState)(true);
71
45
  const [error, setError] = (0, react_1.useState)(null);
46
+ const [permissionResult, setPermissionResult] = (0, react_1.useState)({
47
+ granted: false,
48
+ missing: null
49
+ });
72
50
  // Load context on mount
73
51
  (0, react_1.useEffect)(() => {
74
52
  const loadContext = async () => {
@@ -87,106 +65,37 @@ const usePermissions = (requiredPermissions) => {
87
65
  };
88
66
  void loadContext();
89
67
  }, []);
90
- // Permission checking utilities
91
- const permissionUtils = (0, react_1.useMemo)(() => {
92
- if (!context?.permissions)
93
- return null;
94
- const { scopes, external = {} } = context.permissions;
95
- const scopeArray = Array.isArray(scopes) ? scopes : Object.keys(scopes || {});
96
- return {
97
- hasScope: (scope) => scopeArray.includes(scope),
98
- canFetchFrom: (type, url) => {
99
- const fetchUrls = external.fetch?.[type];
100
- if (!fetchUrls?.length)
101
- return false;
102
- // Extract URLs and create egress filter
103
- const allowList = fetchUrls.map(extractUrlString).filter((u) => u.length > 0);
104
- if (allowList.length === 0)
105
- return false;
106
- const egressFilter = new egress_1.EgressFilteringService(allowList);
107
- // Backend: hostname-only matching, Client: CSP validation (includes paths)
108
- return type === 'client' ? egressFilter.isValidUrlCSP(url) : egressFilter.isValidUrl(url);
109
- },
110
- canLoadResource: (type, url) => {
111
- const resourceUrls = external[type];
112
- if (!resourceUrls?.length)
113
- return false;
114
- // Extract URLs and create egress filter
115
- const allowList = resourceUrls.map(extractUrlString).filter((u) => u.length > 0);
116
- if (allowList.length === 0)
117
- return false;
118
- const egressFilter = new egress_1.EgressFilteringService(allowList);
119
- // All resources use CSP validation (checks protocol + hostname + paths)
120
- return egressFilter.isValidUrlCSP(url);
121
- },
122
- getScopes: () => scopeArray,
123
- getExternalPermissions: () => external,
124
- hasAnyPermissions: () => scopeArray.length > 0 || Object.keys(external).length > 0
125
- };
126
- }, [context?.permissions]);
127
- // Check permissions
128
- const permissionResult = (0, react_1.useMemo)(() => {
129
- if (!requiredPermissions) {
130
- return { granted: false, missing: null };
131
- }
132
- if (!permissionUtils) {
133
- // If still loading or there's an error, return null for missing permissions
134
- if (isLoading || error) {
135
- return { granted: false, missing: null };
136
- }
137
- throw new Error('This feature is not available yet');
68
+ // Check permissions using shared utility
69
+ (0, react_1.useEffect)(() => {
70
+ // Skip if still loading context
71
+ if (isLoading) {
72
+ return;
138
73
  }
139
- const missing = {};
140
- let hasAllRequiredPermissions = true;
141
- // Check scopes
142
- if (requiredPermissions.scopes?.length) {
143
- const missingScopes = requiredPermissions.scopes.filter((scope) => !permissionUtils.hasScope(scope));
144
- if (missingScopes.length > 0) {
145
- missing.scopes = missingScopes;
146
- hasAllRequiredPermissions = false;
74
+ const checkPerms = async () => {
75
+ if (!requiredPermissions) {
76
+ setPermissionResult({ granted: false, missing: null });
77
+ return;
147
78
  }
148
- }
149
- // Check external permissions
150
- if (requiredPermissions.external) {
151
- const missingExternal = {};
152
- // Check fetch permissions
153
- if (requiredPermissions.external.fetch) {
154
- const missingFetch = {};
155
- FETCH_TYPES.forEach((type) => {
156
- const requiredUrls = requiredPermissions.external?.fetch?.[type];
157
- if (requiredUrls?.length) {
158
- const missingUrls = requiredUrls.filter((url) => !permissionUtils.canFetchFrom(type, url));
159
- if (missingUrls.length > 0) {
160
- missingFetch[type] = missingUrls;
161
- hasAllRequiredPermissions = false;
162
- }
163
- }
164
- });
165
- if (Object.keys(missingFetch).length > 0) {
166
- missingExternal.fetch = missingFetch;
79
+ if (!context?.permissions) {
80
+ // If context loaded but has no permissions, set error
81
+ if (context !== undefined) {
82
+ setError(new Error('This feature is not available yet'));
83
+ setPermissionResult({ granted: false, missing: null });
167
84
  }
85
+ return;
168
86
  }
169
- // Check resource permissions
170
- RESOURCE_TYPES.forEach((type) => {
171
- const requiredUrls = requiredPermissions.external?.[type];
172
- if (requiredUrls?.length) {
173
- const missingUrls = requiredUrls.filter((url) => !permissionUtils.canLoadResource(type, url));
174
- if (missingUrls.length > 0) {
175
- missingExternal[type] = missingUrls;
176
- hasAllRequiredPermissions = false;
177
- }
178
- }
179
- });
180
- if (Object.keys(missingExternal).length > 0) {
181
- missing.external = missingExternal;
87
+ try {
88
+ setError(null); // Clear any previous errors
89
+ const result = await (0, bridge_1.checkPermissions)(requiredPermissions, context.permissions);
90
+ setPermissionResult(result);
91
+ }
92
+ catch (err) {
93
+ setError(err instanceof Error ? err : new Error('Failed to check permissions'));
94
+ setPermissionResult({ granted: false, missing: null });
182
95
  }
183
- }
184
- // Note: Content permissions are not supported in the current RuntimePermissions type
185
- return {
186
- granted: hasAllRequiredPermissions,
187
- missing: hasAllRequiredPermissions ? null : missing
188
96
  };
189
- }, [permissionUtils, requiredPermissions]);
97
+ void checkPerms();
98
+ }, [context, requiredPermissions, isLoading]);
190
99
  return {
191
100
  hasPermission: permissionResult.granted,
192
101
  isLoading,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/react",
3
- "version": "11.9.2-next.0-experimental-919607a",
3
+ "version": "11.10.0-experimental-5a86f99",
4
4
  "description": "Forge React reconciler",
5
5
  "author": "Atlassian",
6
6
  "license": "SEE LICENSE IN LICENSE.txt",
@@ -22,13 +22,17 @@
22
22
  "./jira": {
23
23
  "types": "./out/components/jira/index.d.ts",
24
24
  "default": "./out/components/jira/index.js"
25
+ },
26
+ "./global": {
27
+ "types": "./out/components/global/index.d.ts",
28
+ "default": "./out/components/global/index.js"
25
29
  }
26
30
  },
27
31
  "dependencies": {
28
32
  "@atlaskit/adf-schema": "^48.0.0",
29
33
  "@atlaskit/adf-utils": "^19.19.0",
30
- "@atlaskit/forge-react-types": "^0.48.0",
31
- "@forge/bridge": "^5.10.3-next.1-experimental-919607a",
34
+ "@atlaskit/forge-react-types": "^0.56.0",
35
+ "@forge/bridge": "^5.11.0",
32
36
  "@forge/egress": "^2.3.1",
33
37
  "@forge/i18n": "0.0.7",
34
38
  "@types/react": "^18.2.64",