@forge/bridge 5.7.0-next.9 → 5.7.0-next.9-experimental-04e7c02

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,28 @@
1
1
  # @forge/bridge
2
2
 
3
+ ## 5.7.0-next.9-experimental-04e7c02
4
+
5
+ ### Minor Changes
6
+
7
+ - be6eab0: Add OS upload bridge method
8
+ - 6e14850: Added FOS download bridge method
9
+ - 30c8262: Add FAUS wrapper web component
10
+
11
+ ### Patch Changes
12
+
13
+ - a03c9c5: Adds new bridge method objectStore.getMetadata
14
+ - 94243f1: Split development and contribution guidelines
15
+ - d9e48cd: minor update to tsconfig
16
+ - Updated dependencies [b3792e4]
17
+ - Updated dependencies [fae0e71]
18
+ - Updated dependencies [0ea6722]
19
+ - Updated dependencies [4718346]
20
+ - Updated dependencies [94243f1]
21
+ - Updated dependencies [0ef937d]
22
+ - Updated dependencies [dcd46a4]
23
+ - @forge/manifest@10.8.0-next.5-experimental-04e7c02
24
+ - @forge/resolver@1.7.1-next.0-experimental-04e7c02
25
+
3
26
  ## 5.7.0-next.9
4
27
 
5
28
  ### Patch Changes
@@ -0,0 +1,37 @@
1
+ import { DocNode } from '@atlaskit/adf-schema';
2
+ export interface AdfPostMessageData {
3
+ type: 'adf-document';
4
+ document: DocNode;
5
+ timestamp: number;
6
+ source: 'forge-adf-renderer';
7
+ }
8
+ export declare class ForgeADFRenderer extends HTMLElement {
9
+ private _adfDocument;
10
+ private _isConnected;
11
+ private iframe;
12
+ private origin;
13
+ constructor();
14
+ static get observedAttributes(): string[];
15
+ get adfDocument(): DocNode | null;
16
+ set adfDocument(document: DocNode | null);
17
+ private attachShadowDOM;
18
+ private createShadowDOMContent;
19
+ private getComponentStyles;
20
+ private getHTMLTemplate;
21
+ private cacheDOMReferences;
22
+ connectedCallback(): void;
23
+ attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void;
24
+ private handleAdfDocumentChange;
25
+ private setupIframe;
26
+ private passAdfToIframe;
27
+ private handleError;
28
+ private showErrorState;
29
+ private getErrorTemplate;
30
+ }
31
+ export declare function registerAdfRenderer(): void;
32
+ export declare const createAdfRendererIframeProps: (adfDocument: DocNode, iframeId?: string) => {
33
+ id: string;
34
+ src: string;
35
+ onLoad: () => void;
36
+ };
37
+ //# sourceMappingURL=adf-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adf-renderer.d.ts","sourceRoot":"","sources":["../../src/adf-renderer/adf-renderer.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAG/C,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,oBAAoB,CAAC;CAC9B;AAED,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,OAAO,CAAC,YAAY,CAAwB;IAC5C,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,MAAM,CAA6C;;IAY3D,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAExC;IAKD,IAAI,WAAW,IAAI,OAAO,GAAG,IAAI,CAEhC;IAKD,IAAI,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,EAEvC;IAKD,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,sBAAsB;IAY9B,OAAO,CAAC,kBAAkB;IA+B1B,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,kBAAkB;IAS1B,iBAAiB,IAAI,IAAI;IAQzB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAwB/F,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,eAAe;IAyBvB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,gBAAgB;CAOzB;AAMD,wBAAgB,mBAAmB,IAAI,IAAI,CAI1C;AAED,eAAO,MAAM,4BAA4B,gBAAiB,OAAO,aAAa,MAAM;;;;CAwBnF,CAAC"}
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createAdfRendererIframeProps = exports.registerAdfRenderer = exports.ForgeADFRenderer = void 0;
4
+ class ForgeADFRenderer extends HTMLElement {
5
+ constructor() {
6
+ super();
7
+ this._adfDocument = null;
8
+ this._isConnected = false;
9
+ this.iframe = null;
10
+ this.origin = new URL(document.referrer).origin;
11
+ this.attachShadowDOM();
12
+ }
13
+ static get observedAttributes() {
14
+ return ['adf-document', 'width', 'height'];
15
+ }
16
+ get adfDocument() {
17
+ return this._adfDocument;
18
+ }
19
+ set adfDocument(document) {
20
+ this.handleAdfDocumentChange(document);
21
+ }
22
+ attachShadowDOM() {
23
+ this.attachShadow({ mode: 'open' });
24
+ this.createShadowDOMContent();
25
+ this.cacheDOMReferences();
26
+ }
27
+ createShadowDOMContent() {
28
+ if (!this.shadowRoot)
29
+ return;
30
+ const styles = this.getComponentStyles();
31
+ const template = this.getHTMLTemplate();
32
+ this.shadowRoot.innerHTML = `${styles}${template}`;
33
+ }
34
+ getComponentStyles() {
35
+ return `
36
+ <style>
37
+ :host {
38
+ display: block;
39
+ width: 100%;
40
+ height: 400px;
41
+ }
42
+
43
+ iframe {
44
+ width: 100%;
45
+ height: 100%;
46
+ border: 1px solid #dfe1e6;
47
+ border-radius: 3px;
48
+ }
49
+
50
+ .error {
51
+ color: #de350b;
52
+ background: #ffebe6;
53
+ border: 1px solid #ff8f73;
54
+ border-radius: 3px;
55
+ padding: 12px;
56
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
57
+ }
58
+ </style>
59
+ `;
60
+ }
61
+ getHTMLTemplate() {
62
+ const iframeSrc = `${this.origin}/forge-apps/adf-renderer`;
63
+ return `
64
+ <iframe id="forge-adf-renderer-iframe"
65
+ src="${iframeSrc}"
66
+ frameborder="0"
67
+ allowfullscreen>
68
+ </iframe>
69
+ `;
70
+ }
71
+ cacheDOMReferences() {
72
+ if (!this.shadowRoot)
73
+ return;
74
+ this.iframe = this.shadowRoot.getElementById('forge-adf-renderer-iframe');
75
+ }
76
+ connectedCallback() {
77
+ this._isConnected = true;
78
+ this.setupIframe();
79
+ }
80
+ attributeChangedCallback(name, _oldValue, newValue) {
81
+ if (!this._isConnected)
82
+ return;
83
+ switch (name) {
84
+ case 'adf-document':
85
+ try {
86
+ const parsedDocument = newValue ? JSON.parse(newValue) : null;
87
+ this.handleAdfDocumentChange(parsedDocument);
88
+ }
89
+ catch (error) {
90
+ this.handleError(new Error(`Invalid ADF document: ${error.message}`));
91
+ }
92
+ break;
93
+ case 'width':
94
+ this.style.width = newValue || '100%';
95
+ break;
96
+ case 'height':
97
+ this.style.height = newValue || '400px';
98
+ break;
99
+ }
100
+ }
101
+ handleAdfDocumentChange(document) {
102
+ try {
103
+ this._adfDocument = document;
104
+ this.passAdfToIframe();
105
+ }
106
+ catch (error) {
107
+ this.handleError(error);
108
+ }
109
+ }
110
+ setupIframe() {
111
+ if (!this.iframe)
112
+ return;
113
+ try {
114
+ this.iframe.onload = () => {
115
+ this.passAdfToIframe();
116
+ };
117
+ }
118
+ catch (error) {
119
+ this.handleError(error);
120
+ }
121
+ }
122
+ passAdfToIframe() {
123
+ if (!this.iframe || !this.iframe.contentWindow)
124
+ return;
125
+ try {
126
+ const iframeWindow = this.iframe.contentWindow;
127
+ if (this._adfDocument) {
128
+ const message = {
129
+ type: 'adf-document',
130
+ document: this._adfDocument,
131
+ timestamp: Date.now(),
132
+ source: 'forge-adf-renderer'
133
+ };
134
+ iframeWindow.postMessage(message, this.origin);
135
+ }
136
+ }
137
+ catch (error) {
138
+ }
139
+ }
140
+ handleError(error) {
141
+ this.showErrorState(error);
142
+ }
143
+ showErrorState(error) {
144
+ if (!this.shadowRoot)
145
+ return;
146
+ const styles = this.getComponentStyles();
147
+ const errorTemplate = this.getErrorTemplate(error.message);
148
+ this.shadowRoot.innerHTML = `${styles}${errorTemplate}`;
149
+ }
150
+ getErrorTemplate(message) {
151
+ return `
152
+ <div class="error">
153
+ <strong>Error:</strong> ${message}
154
+ </div>
155
+ `;
156
+ }
157
+ }
158
+ exports.ForgeADFRenderer = ForgeADFRenderer;
159
+ function registerAdfRenderer() {
160
+ if (!customElements.get('forge-adf-renderer')) {
161
+ customElements.define('forge-adf-renderer', ForgeADFRenderer);
162
+ }
163
+ }
164
+ exports.registerAdfRenderer = registerAdfRenderer;
165
+ const createAdfRendererIframeProps = (adfDocument, iframeId) => {
166
+ const origin = new URL(document.referrer).origin;
167
+ const src = `${origin}/forge-apps/forge-adf-renderer`;
168
+ const guid = crypto.randomUUID();
169
+ const id = iframeId || `forge-adf-renderer-iframe-${guid}`;
170
+ const onLoad = () => {
171
+ var _a;
172
+ const iframe = document.getElementById(id);
173
+ const message = {
174
+ type: 'adf-document',
175
+ document: adfDocument,
176
+ timestamp: Date.now(),
177
+ source: 'forge-adf-renderer'
178
+ };
179
+ (_a = iframe.contentWindow) === null || _a === void 0 ? void 0 : _a.postMessage(message, origin);
180
+ };
181
+ return {
182
+ id,
183
+ src,
184
+ onLoad
185
+ };
186
+ };
187
+ exports.createAdfRendererIframeProps = createAdfRendererIframeProps;
@@ -0,0 +1,2 @@
1
+ export { ForgeADFRenderer, AdfPostMessageData, registerAdfRenderer, createAdfRendererIframeProps } from './adf-renderer';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adf-renderer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,4BAA4B,EAC7B,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createAdfRendererIframeProps = exports.registerAdfRenderer = exports.ForgeADFRenderer = void 0;
4
+ var adf_renderer_1 = require("./adf-renderer");
5
+ Object.defineProperty(exports, "ForgeADFRenderer", { enumerable: true, get: function () { return adf_renderer_1.ForgeADFRenderer; } });
6
+ Object.defineProperty(exports, "registerAdfRenderer", { enumerable: true, get: function () { return adf_renderer_1.registerAdfRenderer; } });
7
+ Object.defineProperty(exports, "createAdfRendererIframeProps", { enumerable: true, get: function () { return adf_renderer_1.createAdfRendererIframeProps; } });
package/out/index.d.ts CHANGED
@@ -11,4 +11,5 @@ export * from './realtime';
11
11
  export * as i18n from './i18n';
12
12
  export { type FullContext } from './types';
13
13
  export * from './featureFlags';
14
+ export * from './adf-renderer';
14
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
package/out/index.js CHANGED
@@ -15,3 +15,4 @@ tslib_1.__exportStar(require("./events"), exports);
15
15
  tslib_1.__exportStar(require("./realtime"), exports);
16
16
  exports.i18n = tslib_1.__importStar(require("./i18n"));
17
17
  tslib_1.__exportStar(require("./featureFlags"), exports);
18
+ tslib_1.__exportStar(require("./adf-renderer"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/bridge",
3
- "version": "5.7.0-next.9",
3
+ "version": "5.7.0-next.9-experimental-04e7c02",
4
4
  "description": "Forge bridge API for custom UI apps",
5
5
  "author": "Atlassian",
6
6
  "license": "SEE LICENSE IN LICENSE.txt",
@@ -13,12 +13,13 @@
13
13
  "compile": "tsc -b -v"
14
14
  },
15
15
  "dependencies": {
16
+ "@atlaskit/adf-schema": "^48.0.0",
16
17
  "@atlaskit/tokens": "^1.58.0",
17
18
  "@forge/i18n": "0.0.7",
18
- "@forge/resolver": "1.7.1-next.0",
19
+ "@forge/resolver": "1.7.1-next.0-experimental-04e7c02",
19
20
  "@statsig/js-client": "3.18.2",
20
21
  "@types/history": "^4.7.11",
21
- "@forge/manifest": "10.8.0-next.5"
22
+ "@forge/manifest": "10.8.0-next.5-experimental-04e7c02"
22
23
  },
23
24
  "devDependencies": {
24
25
  "history": "5.3.0",