@api-client/ui 0.0.12 → 0.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/demo/elements/authorization/cc.ts +56 -27
  2. package/dist/bindings/base/FileBindings.d.ts +4 -0
  3. package/dist/bindings/base/FileBindings.d.ts.map +1 -1
  4. package/dist/bindings/base/FileBindings.js +21 -1
  5. package/dist/bindings/base/FileBindings.js.map +1 -1
  6. package/dist/bindings/base/StoreBindings.d.ts +1 -17
  7. package/dist/bindings/base/StoreBindings.d.ts.map +1 -1
  8. package/dist/bindings/base/StoreBindings.js +0 -59
  9. package/dist/bindings/base/StoreBindings.js.map +1 -1
  10. package/dist/bindings/web/WebFileBindings.js +1 -1
  11. package/dist/bindings/web/WebFileBindings.js.map +1 -1
  12. package/dist/define/http/certificate-add.d.ts +9 -0
  13. package/dist/define/http/certificate-add.d.ts.map +1 -0
  14. package/dist/define/http/certificate-add.js +10 -0
  15. package/dist/define/http/certificate-add.js.map +1 -0
  16. package/dist/define/http/http-body-editor.d.ts.map +1 -1
  17. package/dist/define/http/http-body-editor.js +1 -1
  18. package/dist/define/http/http-body-editor.js.map +1 -1
  19. package/dist/define/ui/ui-segmented-button-set.d.ts +1 -1
  20. package/dist/define/ui/ui-segmented-button-set.d.ts.map +1 -1
  21. package/dist/define/ui/ui-segmented-button-set.js.map +1 -1
  22. package/dist/elements/authorization/ui/CC.styles.d.ts.map +1 -1
  23. package/dist/elements/authorization/ui/CC.styles.js +4 -9
  24. package/dist/elements/authorization/ui/CC.styles.js.map +1 -1
  25. package/dist/elements/authorization/ui/CcAuthorization.d.ts +14 -29
  26. package/dist/elements/authorization/ui/CcAuthorization.d.ts.map +1 -1
  27. package/dist/elements/authorization/ui/CcAuthorization.js +67 -158
  28. package/dist/elements/authorization/ui/CcAuthorization.js.map +1 -1
  29. package/dist/elements/http/BodyEditor.js +5 -5
  30. package/dist/elements/http/BodyEditor.js.map +1 -1
  31. package/dist/elements/http/BodyEditor.styles.d.ts +1 -1
  32. package/dist/elements/http/BodyEditor.styles.d.ts.map +1 -1
  33. package/dist/elements/http/BodyEditor.styles.js +5 -19
  34. package/dist/elements/http/BodyEditor.styles.js.map +1 -1
  35. package/dist/elements/http/CertificateAdd.element.d.ts +91 -0
  36. package/dist/elements/http/CertificateAdd.element.d.ts.map +1 -0
  37. package/dist/elements/http/CertificateAdd.element.js +389 -0
  38. package/dist/elements/http/CertificateAdd.element.js.map +1 -0
  39. package/dist/elements/http/CertificateAdd.styles.d.ts +3 -0
  40. package/dist/elements/http/CertificateAdd.styles.d.ts.map +1 -0
  41. package/dist/elements/http/CertificateAdd.styles.js +61 -0
  42. package/dist/elements/http/CertificateAdd.styles.js.map +1 -0
  43. package/dist/elements/project/ProjectRunReport.d.ts +2 -1
  44. package/dist/elements/project/ProjectRunReport.d.ts.map +1 -1
  45. package/dist/elements/project/ProjectRunReport.js.map +1 -1
  46. package/dist/elements/store/FilePicker.styles.d.ts.map +1 -1
  47. package/dist/elements/store/FilePicker.styles.js +1 -0
  48. package/dist/elements/store/FilePicker.styles.js.map +1 -1
  49. package/dist/elements/store/FilesLib.d.ts +2 -2
  50. package/dist/elements/store/FilesLib.d.ts.map +1 -1
  51. package/dist/elements/store/FilesLib.js.map +1 -1
  52. package/dist/events/EventTypes.d.ts +6 -7
  53. package/dist/events/EventTypes.d.ts.map +1 -1
  54. package/dist/events/EventTypes.js +7 -7
  55. package/dist/events/EventTypes.js.map +1 -1
  56. package/dist/events/Events.d.ts +6 -1
  57. package/dist/events/Events.d.ts.map +1 -1
  58. package/dist/events/Events.js +2 -0
  59. package/dist/events/Events.js.map +1 -1
  60. package/dist/events/FilesystemEvents.d.ts +8 -0
  61. package/dist/events/FilesystemEvents.d.ts.map +1 -0
  62. package/dist/events/FilesystemEvents.js +59 -0
  63. package/dist/events/FilesystemEvents.js.map +1 -0
  64. package/dist/events/HttpClientEvents.d.ts +0 -2
  65. package/dist/events/HttpClientEvents.d.ts.map +1 -1
  66. package/dist/events/HttpClientEvents.js +0 -2
  67. package/dist/events/HttpClientEvents.js.map +1 -1
  68. package/dist/http-client/idb/Arc18DataUpgrade.d.ts +0 -8
  69. package/dist/http-client/idb/Arc18DataUpgrade.d.ts.map +1 -1
  70. package/dist/http-client/idb/Arc18DataUpgrade.js +11 -206
  71. package/dist/http-client/idb/Arc18DataUpgrade.js.map +1 -1
  72. package/dist/http-client/store/Cursor.js +2 -2
  73. package/dist/http-client/store/Cursor.js.map +1 -1
  74. package/dist/http-client/store/HttpClientIdbDatabase.d.ts.map +1 -1
  75. package/dist/http-client/store/HttpClientIdbDatabase.js +2 -6
  76. package/dist/http-client/store/HttpClientIdbDatabase.js.map +1 -1
  77. package/dist/http-client/store/State.d.ts +1 -3
  78. package/dist/http-client/store/State.d.ts.map +1 -1
  79. package/dist/http-client/store/State.js.map +1 -1
  80. package/dist/http-client/store/StoreBroadcast.d.ts +0 -5
  81. package/dist/http-client/store/StoreBroadcast.d.ts.map +1 -1
  82. package/dist/http-client/store/StoreBroadcast.js +0 -7
  83. package/dist/http-client/store/StoreBroadcast.js.map +1 -1
  84. package/dist/http-client/store/idb/IdbStore.d.ts +1 -10
  85. package/dist/http-client/store/idb/IdbStore.d.ts.map +1 -1
  86. package/dist/http-client/store/idb/IdbStore.js +0 -48
  87. package/dist/http-client/store/idb/IdbStore.js.map +1 -1
  88. package/dist/http-client/store/types.d.ts +2 -56
  89. package/dist/http-client/store/types.d.ts.map +1 -1
  90. package/dist/http-client/store/types.js.map +1 -1
  91. package/dist/index.d.ts +1 -0
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +2 -0
  94. package/dist/index.js.map +1 -1
  95. package/dist/lib/files/FileUtils.d.ts +9 -0
  96. package/dist/lib/files/FileUtils.d.ts.map +1 -0
  97. package/dist/lib/files/FileUtils.js +13 -0
  98. package/dist/lib/files/FileUtils.js.map +1 -0
  99. package/dist/mixins/RouteMixin.d.ts +4 -0
  100. package/dist/mixins/RouteMixin.d.ts.map +1 -1
  101. package/dist/mixins/RouteMixin.js +1 -0
  102. package/dist/mixins/RouteMixin.js.map +1 -1
  103. package/dist/pages/api-client/ApiClient.screen.d.ts +8 -4
  104. package/dist/pages/api-client/ApiClient.screen.d.ts.map +1 -1
  105. package/dist/pages/api-client/ApiClient.screen.js +25 -4
  106. package/dist/pages/api-client/ApiClient.screen.js.map +1 -1
  107. package/dist/pages/api-client/ApiClient.styles.d.ts.map +1 -1
  108. package/dist/pages/api-client/ApiClient.styles.js +0 -12
  109. package/dist/pages/api-client/ApiClient.styles.js.map +1 -1
  110. package/dist/pages/api-client/pages/Files.page.d.ts.map +1 -1
  111. package/dist/pages/api-client/pages/Files.page.js +13 -0
  112. package/dist/pages/api-client/pages/Files.page.js.map +1 -1
  113. package/dist/pages/api-client/pages/Trash.page.d.ts.map +1 -1
  114. package/dist/pages/api-client/pages/Trash.page.js +3 -11
  115. package/dist/pages/api-client/pages/Trash.page.js.map +1 -1
  116. package/dist/ui/button/SegmentedButtonsSet.d.ts +14 -0
  117. package/dist/ui/button/SegmentedButtonsSet.d.ts.map +1 -1
  118. package/dist/ui/button/SegmentedButtonsSet.js.map +1 -1
  119. package/dist/ui/list/UiDropdownList.js +1 -1
  120. package/dist/ui/list/UiDropdownList.js.map +1 -1
  121. package/dist/ui/notification/SnackNotifications.d.ts +1 -0
  122. package/dist/ui/notification/SnackNotifications.d.ts.map +1 -1
  123. package/dist/ui/notification/SnackNotifications.js +7 -0
  124. package/dist/ui/notification/SnackNotifications.js.map +1 -1
  125. package/package.json +2 -2
  126. package/src/bindings/base/FileBindings.ts +25 -1
  127. package/src/bindings/base/StoreBindings.ts +1 -73
  128. package/src/bindings/web/WebFileBindings.ts +1 -1
  129. package/src/define/http/certificate-add.ts +12 -0
  130. package/src/define/http/http-body-editor.ts +1 -1
  131. package/src/define/ui/ui-segmented-button-set.ts +1 -1
  132. package/src/elements/authorization/ui/CC.styles.ts +4 -9
  133. package/src/elements/authorization/ui/CcAuthorization.ts +67 -167
  134. package/src/elements/http/BodyEditor.styles.ts +5 -19
  135. package/src/elements/http/BodyEditor.ts +5 -5
  136. package/src/elements/http/CertificateAdd.element.ts +443 -0
  137. package/src/elements/http/CertificateAdd.styles.ts +61 -0
  138. package/src/elements/project/ProjectRunReport.ts +2 -1
  139. package/src/elements/store/FilePicker.styles.ts +1 -0
  140. package/src/elements/store/FilesLib.ts +2 -2
  141. package/src/events/EventTypes.ts +7 -7
  142. package/src/events/Events.ts +2 -0
  143. package/src/events/FilesystemEvents.ts +63 -0
  144. package/src/events/HttpClientEvents.ts +0 -2
  145. package/src/http-client/idb/Arc18DataUpgrade.ts +84 -84
  146. package/src/http-client/store/Cursor.ts +2 -2
  147. package/src/http-client/store/HttpClientIdbDatabase.ts +5 -9
  148. package/src/http-client/store/State.ts +1 -5
  149. package/src/http-client/store/StoreBroadcast.ts +0 -8
  150. package/src/http-client/store/idb/IdbStore.ts +1 -51
  151. package/src/http-client/store/types.ts +2 -57
  152. package/src/index.ts +3 -0
  153. package/src/lib/files/FileUtils.ts +12 -0
  154. package/src/mixins/RouteMixin.ts +8 -1
  155. package/src/pages/api-client/ApiClient.screen.ts +33 -9
  156. package/src/pages/api-client/ApiClient.styles.ts +0 -12
  157. package/src/pages/api-client/pages/Files.page.ts +11 -0
  158. package/src/pages/api-client/pages/Trash.page.ts +3 -10
  159. package/src/ui/button/SegmentedButtonsSet.ts +16 -1
  160. package/src/ui/list/UiDropdownList.ts +1 -1
  161. package/src/ui/notification/SnackNotifications.ts +8 -0
  162. package/test/elements/http/BodyFormdataEditorElement.test.ts +458 -454
  163. package/test/elements/http/BodyMultipartEditorElement.test.ts +609 -605
  164. package/test/elements/http/BodyRawEditorElement.test.ts +60 -56
  165. package/test/elements/http/CertificateAdd.test.ts +430 -0
  166. package/test/events/EventTypes.test.ts +0 -22
  167. package/test/helpers/UiMock.ts +19 -2
  168. package/web-test-runner.config.mjs +6 -5
  169. package/dist/events/http-client/models/CertificatesEvents.d.ts +0 -12
  170. package/dist/events/http-client/models/CertificatesEvents.d.ts.map +0 -1
  171. package/dist/events/http-client/models/CertificatesEvents.js +0 -18
  172. package/dist/events/http-client/models/CertificatesEvents.js.map +0 -1
  173. package/dist/http-client/idb/AuthDataModel.d.ts +0 -60
  174. package/dist/http-client/idb/AuthDataModel.d.ts.map +0 -1
  175. package/dist/http-client/idb/AuthDataModel.js +0 -150
  176. package/dist/http-client/idb/AuthDataModel.js.map +0 -1
  177. package/dist/http-client/idb/HostsModel.d.ts +0 -25
  178. package/dist/http-client/idb/HostsModel.d.ts.map +0 -1
  179. package/dist/http-client/idb/HostsModel.js +0 -82
  180. package/dist/http-client/idb/HostsModel.js.map +0 -1
  181. package/dist/http-client/idb/LegacyMockedStore.d.ts +0 -214
  182. package/dist/http-client/idb/LegacyMockedStore.d.ts.map +0 -1
  183. package/dist/http-client/idb/LegacyMockedStore.js +0 -486
  184. package/dist/http-client/idb/LegacyMockedStore.js.map +0 -1
  185. package/dist/http-client/store/Validator.d.ts +0 -4
  186. package/dist/http-client/store/Validator.d.ts.map +0 -1
  187. package/dist/http-client/store/Validator.js +0 -32
  188. package/dist/http-client/store/Validator.js.map +0 -1
  189. package/src/events/http-client/models/CertificatesEvents.ts +0 -23
  190. package/src/http-client/idb/AuthDataModel.ts +0 -175
  191. package/src/http-client/idb/HostsModel.ts +0 -125
  192. package/src/http-client/idb/LegacyMockedStore.ts +0 -544
  193. package/src/http-client/store/Validator.ts +0 -33
  194. package/test/apic-ui.test.ts +0 -31
@@ -1,114 +1,65 @@
1
1
  import { __decorate } from "tslib";
2
2
  import { html, nothing } from "lit";
3
+ import { Events as CoreEvents, CertificateFileKind, } from '@api-client/core/build/browser.js';
3
4
  import { state } from "lit/decorators.js";
4
- import { Events as CoreEvents, } from '@api-client/core/build/browser.js';
5
- import '@github/relative-time-element';
6
5
  import { Authorization } from "./Authorization.js";
7
6
  import { Events } from "../../../events/Events.js";
8
- import { StoreBroadcast } from "../../../http-client/store/StoreBroadcast.js";
7
+ import '../../../define/ui/ui-dropdown-list.js';
9
8
  import '../../../define/ui/ui-button.js';
10
- import '../../../define/ui/ui-radio.js';
9
+ import '../../../define/ui/ui-icon-button.js';
10
+ import '../../../define/ui/ui-icon.js';
11
+ import '../../../define/store/file-picker.js';
11
12
  export default class CcAuthorization extends Authorization {
12
13
  constructor() {
13
- super();
14
- this.querying = false;
15
- this.channel = new BroadcastChannel(StoreBroadcast.certificates);
16
- this.handleBroadcast = this.handleBroadcast.bind(this);
14
+ super(...arguments);
15
+ this.selectorRendered = false;
17
16
  }
18
- connectedCallback() {
19
- super.connectedCallback();
20
- this.channel.addEventListener('message', this.handleBroadcast);
21
- this.queryCertificates();
22
- }
23
- disconnectedCallback() {
24
- super.disconnectedCallback();
25
- this.channel.removeEventListener('message', this.handleBroadcast);
26
- }
27
- handleBroadcast(e) {
28
- const event = e.data;
29
- switch (event.operation) {
30
- case 'created':
31
- this.handleCreated(event);
32
- break;
33
- case 'deleted':
34
- this.handleDeleted(event);
35
- break;
36
- default:
37
- }
38
- }
39
- handleCreated(event) {
40
- const cert = event.data;
41
- if (!this.items) {
42
- this.items = [];
43
- }
44
- const index = this.items.findIndex(i => i.key === cert.key);
45
- if (index >= 0) {
46
- this.items[index] = cert;
17
+ get config() {
18
+ const { authorization } = this;
19
+ if (!authorization) {
20
+ return {};
47
21
  }
48
- else {
49
- this.items.push(cert);
22
+ if (!authorization.config) {
23
+ authorization.config = {};
50
24
  }
51
- this.requestUpdate();
25
+ return authorization.config;
52
26
  }
53
- handleDeleted(event) {
54
- if (!this.items) {
27
+ handleClose(e) {
28
+ const { canceled, file } = e.detail;
29
+ if (canceled) {
55
30
  return;
56
31
  }
57
- const { key } = event;
58
- const index = this.items.findIndex(i => i.key === key);
59
- if (index >= 0) {
60
- this.items.splice(index, 1);
61
- this.requestUpdate();
62
- }
32
+ this.setCertificate(file.key);
33
+ CoreEvents.Telemetry.event({
34
+ category: 'Certificates',
35
+ action: 'Authorization',
36
+ label: 'selected-certificate'
37
+ }, this);
63
38
  }
64
- async queryCertificates() {
65
- if (this.querying) {
66
- return;
67
- }
68
- this.querying = true;
39
+ async setCertificate(key) {
40
+ let result;
69
41
  try {
70
- const data = await Events.HttpClient.Model.Certificate.list({ limit: 100, space: "" }); // the space should be filled by the bindings / hosting app
71
- if (!data) {
72
- this.items = undefined;
73
- throw new Error(`Certificates query not handled by the store.`);
74
- return;
75
- }
76
- this.items = data.items;
77
- }
78
- catch (cause) {
79
- this.loadingError = cause.message;
42
+ result = await Events.Store.File.read(key, true, this);
80
43
  }
81
- finally {
82
- this.querying = false;
83
- }
84
- }
85
- handleSelected(e) {
86
- const { authorization } = this;
87
- if (!authorization) {
88
- return;
89
- }
90
- const radio = e.target;
91
- const { checked, value } = radio;
92
- if (!checked) {
44
+ catch (_) {
93
45
  return;
94
46
  }
95
- const config = authorization.config || {};
96
- if (value === '') {
97
- delete config.certificate;
98
- }
99
- else {
100
- const cert = this.items?.find(i => i.key === value);
101
- if (!cert) {
102
- return;
103
- }
104
- config.certificate = cert;
47
+ const { config } = this;
48
+ config.certificate = result;
49
+ this.requestUpdate();
50
+ this.notifyChange();
51
+ }
52
+ handleDropDownOpen() {
53
+ this.selectorRendered = true;
54
+ if (this.isUpdatePending) {
55
+ this.scheduleUpdate();
105
56
  }
57
+ }
58
+ handleClearCertificate() {
59
+ const { config } = this;
60
+ delete config.certificate;
61
+ this.requestUpdate();
106
62
  this.notifyChange();
107
- CoreEvents.Telemetry.event({
108
- category: 'Certificates',
109
- action: 'Authorization',
110
- label: 'selected-certificate'
111
- }, this);
112
63
  }
113
64
  render() {
114
65
  return html `
@@ -117,85 +68,43 @@ export default class CcAuthorization extends Authorization {
117
68
  `;
118
69
  }
119
70
  renderEditor() {
120
- const { authorization, loadingError, items } = this;
121
- if (!authorization) {
122
- return nothing;
123
- }
124
- const hasItems = !!items && !!items.length;
125
- if (!loadingError && !hasItems) {
126
- return html `
127
- ${this.renderEmptyState()}
128
- `;
129
- }
130
- const config = authorization.config || {};
71
+ const { config } = this;
72
+ const { certificate } = config;
73
+ // Note, the <form> element is required by the Authorization class for validation.
131
74
  return html `
132
- ${loadingError ? this.renderErrorState(loadingError) : ''}
133
- ${hasItems ? html `
134
- <form autocomplete="on" class="auth-form basic-auth">
135
- ${this.renderList(items, config.certificate)}
136
- </form>
137
- ` : ''}
75
+ <form autocomplete="on" class="auth-form cc-auth"></form>
76
+ ${this.renderSelector()}
77
+ ${certificate ? this.renderSelection(certificate) : nothing}
138
78
  `;
139
79
  }
140
- renderErrorState(error) {
141
- return html `<p class="error-message">Unable to load certificates: ${error}.</p>`;
142
- }
143
- renderEmptyState() {
144
- return html `<p class="empty-screen body-large">There are no certificates installed in this application.</p>`;
145
- }
146
- renderList(items, current) {
147
- const currentKey = current && current.key;
80
+ renderSelector() {
81
+ const { selectorRendered } = this;
82
+ const kinds = [CertificateFileKind];
148
83
  return html `
149
- ${this.renderNoneItem(currentKey)}
150
- ${items.map((item) => this.renderCertItem(item, currentKey))}
151
- `;
152
- }
153
- renderNoneItem(selectedKey) {
154
- return html `
155
- <label class="label-medium">
156
- <ui-radio name="certificate" value="" .checked="${!selectedKey}" @change="${this.handleSelected}"></ui-radio>
157
- None
158
- </label>
159
- `;
160
- }
161
- /**
162
- * @param item The item to render
163
- * @returns The template for the dropdown item.
164
- */
165
- renderCertItem(item, selectedKey) {
166
- return html `
167
- <div class="cert-item">
168
- <label>
169
- <ui-radio name="certificate" value="${item.key}" .checked="${item.key === selectedKey}" @change="${this.handleSelected}"></ui-radio>
170
- <div class="cert-meta">
171
- <span class="label-medium">${item.name}</span>
172
- <span class="body-small">Added: ${this.renderDateTime(item.created)}</span>
173
- </div>
174
- </label>
84
+ <div class="selector">
85
+ <ui-dropdown-list @open="${this.handleDropDownOpen}">
86
+ <ui-button class="dropdown-trigger" type="tonal">Select a certificate</ui-button>
87
+ ${selectorRendered ? html `<file-picker slot="dropdown" .kinds="${kinds}" @close="${this.handleClose}"></file-picker>` : nothing}
88
+ </ui-dropdown-list>
175
89
  </div>
176
90
  `;
177
91
  }
178
- /**
179
- * @param created The certificate created time.
180
- * @returns The template for the cert time element.
181
- */
182
- renderDateTime(created) {
183
- if (!created) {
184
- return html `<span>Unknown</span>`;
185
- }
186
- const d = new Date(created);
92
+ renderSelection(certificate) {
187
93
  return html `
188
- <relative-time datetime="${d.toISOString()}"></relative-time>
94
+ <div class="certificate-info body-medium">
95
+ Current certificate: ${certificate.name}
96
+ <ui-icon-button
97
+ aria-label="Remove certificate from authorization"
98
+ title="Remove certificate from authorization"
99
+ @click="${this.handleClearCertificate}"
100
+ >
101
+ <ui-icon role="presentation" icon="deleteOutline"></ui-icon>
102
+ </ui-icon-button>
103
+ </div>
189
104
  `;
190
105
  }
191
106
  }
192
107
  __decorate([
193
108
  state()
194
- ], CcAuthorization.prototype, "items", void 0);
195
- __decorate([
196
- state()
197
- ], CcAuthorization.prototype, "querying", void 0);
198
- __decorate([
199
- state()
200
- ], CcAuthorization.prototype, "loadingError", void 0);
109
+ ], CcAuthorization.prototype, "selectorRendered", void 0);
201
110
  //# sourceMappingURL=CcAuthorization.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CcAuthorization.js","sourceRoot":"","sources":["../../../../src/elements/authorization/ui/CcAuthorization.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, nothing, TemplateResult } from \"lit\";\nimport { state } from \"lit/decorators.js\";\nimport {\n ICCAuthorization, HttpCertificate, Events as CoreEvents,\n ICertificate,\n BroadcastEvent,\n BroadcastCreatedEvent,\n DeletedBroadcastEvent,\n} from '@api-client/core/build/browser.js';\nimport '@github/relative-time-element';\nimport { Authorization } from \"./Authorization.js\";\nimport { Events } from \"../../../events/Events.js\";\nimport type RadioElement from \"../../../ui/input/RadioElement.js\";\nimport { StoreBroadcast } from \"../../../http-client/store/StoreBroadcast.js\";\nimport '../../../define/ui/ui-button.js';\nimport '../../../define/ui/ui-radio.js';\n\nexport default class CcAuthorization extends Authorization {\n @state() items?: ICertificate[];\n\n @state() querying = false;\n\n @state() loadingError?: string;\n\n channel = new BroadcastChannel(StoreBroadcast.certificates);\n\n constructor() {\n super();\n\n this.handleBroadcast = this.handleBroadcast.bind(this);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.channel.addEventListener('message', this.handleBroadcast);\n this.queryCertificates();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.channel.removeEventListener('message', this.handleBroadcast);\n }\n\n protected handleBroadcast(e: MessageEvent): void {\n const event = e.data as BroadcastEvent;\n switch (event.operation) {\n case 'created': this.handleCreated(event as BroadcastCreatedEvent); break;\n case 'deleted': this.handleDeleted(event as DeletedBroadcastEvent); break;\n default:\n }\n }\n\n protected handleCreated(event: BroadcastCreatedEvent): void {\n const cert = event.data as ICertificate;\n if (!this.items) {\n this.items = [];\n }\n const index = this.items.findIndex(i => i.key === cert.key);\n if (index >= 0) {\n this.items[index] = cert;\n } else {\n this.items.push(cert);\n }\n this.requestUpdate();\n }\n\n protected handleDeleted(event: DeletedBroadcastEvent): void {\n if (!this.items) {\n return;\n }\n const { key } = event;\n const index = this.items.findIndex(i => i.key === key);\n if (index >= 0) {\n this.items.splice(index, 1);\n this.requestUpdate();\n }\n }\n\n protected async queryCertificates(): Promise<void> {\n if (this.querying) {\n return;\n }\n this.querying = true;\n try {\n const data = await Events.HttpClient.Model.Certificate.list({ limit: 100, space: \"\" }); // the space should be filled by the bindings / hosting app\n if (!data) {\n this.items = undefined;\n throw new Error(`Certificates query not handled by the store.`);\n return;\n }\n this.items = data.items;\n } catch (cause) {\n this.loadingError = (cause as Error).message;\n } finally {\n this.querying = false;\n }\n }\n\n protected handleSelected(e: Event): void {\n const { authorization } = this;\n if (!authorization) {\n return;\n }\n\n const radio = e.target as RadioElement;\n const { checked, value } = radio;\n if (!checked) {\n return;\n }\n const config = authorization.config as ICCAuthorization || {} as ICCAuthorization;\n if (value === '') {\n delete config.certificate;\n } else {\n const cert = this.items?.find(i => i.key === value);\n if (!cert) {\n return;\n }\n config.certificate = cert;\n }\n this.notifyChange();\n\n CoreEvents.Telemetry.event({\n category: 'Certificates',\n action: 'Authorization',\n label: 'selected-certificate'\n }, this);\n }\n\n override render(): TemplateResult {\n return html`\n ${this.renderHeader()}\n ${this.renderEditor()}\n `;\n }\n\n protected renderEditor(): TemplateResult | typeof nothing {\n const { authorization, loadingError, items } = this;\n if (!authorization) {\n return nothing;\n }\n const hasItems = !!items && !!items.length;\n if (!loadingError && !hasItems) {\n return html`\n ${this.renderEmptyState()}\n `;\n }\n const config = authorization.config as ICCAuthorization || {} as ICCAuthorization;\n return html`\n ${loadingError ? this.renderErrorState(loadingError) : ''}\n ${hasItems ? html`\n <form autocomplete=\"on\" class=\"auth-form basic-auth\">\n ${this.renderList(items, config.certificate)}\n </form>\n ` : ''}\n `;\n }\n\n protected renderErrorState(error: string): TemplateResult {\n return html`<p class=\"error-message\">Unable to load certificates: ${error}.</p>`;\n }\n\n protected renderEmptyState(): TemplateResult {\n return html`<p class=\"empty-screen body-large\">There are no certificates installed in this application.</p>`;\n }\n\n protected renderList(items: HttpCertificate[], current?: ICertificate): TemplateResult {\n const currentKey = current && current.key;\n return html`\n ${this.renderNoneItem(currentKey)}\n ${items.map((item) => this.renderCertItem(item, currentKey))}\n `;\n }\n\n protected renderNoneItem(selectedKey?: string): TemplateResult {\n return html`\n <label class=\"label-medium\">\n <ui-radio name=\"certificate\" value=\"\" .checked=\"${!selectedKey}\" @change=\"${this.handleSelected}\"></ui-radio>\n None\n </label>\n `;\n }\n\n /**\n * @param item The item to render\n * @returns The template for the dropdown item.\n */\n protected renderCertItem(item: HttpCertificate, selectedKey?: string): TemplateResult {\n return html`\n <div class=\"cert-item\">\n <label>\n <ui-radio name=\"certificate\" value=\"${item.key}\" .checked=\"${item.key === selectedKey}\" @change=\"${this.handleSelected}\"></ui-radio>\n <div class=\"cert-meta\">\n <span class=\"label-medium\">${item.name}</span>\n <span class=\"body-small\">Added: ${this.renderDateTime(item.created)}</span>\n </div>\n </label>\n </div>\n `;\n }\n\n /**\n * @param created The certificate created time.\n * @returns The template for the cert time element.\n */\n protected renderDateTime(created?: number): TemplateResult {\n if (!created) {\n return html`<span>Unknown</span>`;\n }\n const d = new Date(created);\n return html`\n <relative-time datetime=\"${d.toISOString()}\"></relative-time>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"CcAuthorization.js","sourceRoot":"","sources":["../../../../src/elements/authorization/ui/CcAuthorization.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, nothing, TemplateResult } from \"lit\";\nimport {\n ICCAuthorization, HttpCertificate, Events as CoreEvents, CertificateFileKind, ICertificate, IFile,\n} from '@api-client/core/build/browser.js';\nimport { state } from \"lit/decorators.js\";\nimport { Authorization } from \"./Authorization.js\";\nimport type { FilePickerClosingReason } from \"../../store/FilePicker.element.js\";\nimport { Events } from \"../../../events/Events.js\";\nimport '../../../define/ui/ui-dropdown-list.js';\nimport '../../../define/ui/ui-button.js';\nimport '../../../define/ui/ui-icon-button.js';\nimport '../../../define/ui/ui-icon.js';\nimport '../../../define/store/file-picker.js';\n\nexport default class CcAuthorization extends Authorization {\n @state() selectorRendered = false;\n\n get config(): ICCAuthorization {\n const { authorization } = this;\n if (!authorization) {\n return { };\n }\n if (!authorization.config) {\n authorization.config = {} as ICCAuthorization;\n }\n return authorization.config as ICCAuthorization;\n }\n\n protected handleClose(e: CustomEvent<FilePickerClosingReason>): void {\n const { canceled, file } = e.detail;\n if (canceled) {\n return;\n }\n this.setCertificate((file as IFile).key);\n CoreEvents.Telemetry.event({\n category: 'Certificates',\n action: 'Authorization',\n label: 'selected-certificate'\n }, this);\n }\n\n async setCertificate(key: string): Promise<void> {\n let result: unknown;\n try {\n result = await Events.Store.File.read(key, true, this);\n } catch (_) {\n return;\n }\n const { config } = this;\n config.certificate = result as ICertificate;\n this.requestUpdate();\n this.notifyChange();\n }\n\n protected handleDropDownOpen(): void {\n this.selectorRendered = true;\n if (this.isUpdatePending) {\n this.scheduleUpdate();\n }\n }\n\n protected handleClearCertificate(): void {\n const { config } = this;\n delete config.certificate;\n this.requestUpdate();\n this.notifyChange();\n }\n\n override render(): TemplateResult {\n return html`\n ${this.renderHeader()}\n ${this.renderEditor()}\n `;\n }\n\n protected renderEditor(): TemplateResult | typeof nothing {\n const { config } = this;\n const { certificate } = config;\n // Note, the <form> element is required by the Authorization class for validation.\n return html`\n <form autocomplete=\"on\" class=\"auth-form cc-auth\"></form>\n ${this.renderSelector()}\n ${certificate ? this.renderSelection(certificate) : nothing}\n `;\n }\n\n protected renderSelector(): TemplateResult {\n const { selectorRendered } = this;\n const kinds: typeof CertificateFileKind[] = [CertificateFileKind];\n return html`\n <div class=\"selector\">\n <ui-dropdown-list @open=\"${this.handleDropDownOpen}\">\n <ui-button class=\"dropdown-trigger\" type=\"tonal\">Select a certificate</ui-button>\n ${selectorRendered ? html`<file-picker slot=\"dropdown\" .kinds=\"${kinds}\" @close=\"${this.handleClose}\"></file-picker>` : nothing}\n </ui-dropdown-list>\n </div>\n `;\n }\n\n protected renderSelection(certificate: HttpCertificate): TemplateResult {\n return html`\n <div class=\"certificate-info body-medium\">\n Current certificate: ${certificate.name}\n <ui-icon-button \n aria-label=\"Remove certificate from authorization\" \n title=\"Remove certificate from authorization\"\n @click=\"${this.handleClearCertificate}\"\n >\n <ui-icon role=\"presentation\" icon=\"deleteOutline\"></ui-icon>\n </ui-icon-button>\n </div>\n `;\n }\n}\n"]}
@@ -616,7 +616,7 @@ export default class BodyEditor extends ApiElement {
616
616
  >
617
617
  URL decode
618
618
  </ui-button>
619
- <label title="When set it automatically encodes the values before sending the request">
619
+ <label title="When set it automatically encodes the values before sending the request" class="label-medium">
620
620
  <ui-checkbox .checked="${autoEncode}" @change="${this.handleUrlEncodeAutoChange}"></ui-checkbox>
621
621
  Encode on send
622
622
  </label>
@@ -728,7 +728,7 @@ export default class BodyEditor extends ApiElement {
728
728
  }
729
729
  renderFormInfo() {
730
730
  return html `
731
- <p class="form-info">
731
+ <p class="form-info body-small">
732
732
  Note that the content-type header will be added when the request is sent.
733
733
  </p>
734
734
  `;
@@ -752,7 +752,7 @@ export default class BodyEditor extends ApiElement {
752
752
  const { value } = this;
753
753
  const { size, name } = value;
754
754
  return html `
755
- <div class="file-info">
755
+ <div class="file-info label-medium">
756
756
  <span class="file-name">${name || 'unknown name'}</span>
757
757
  <span class="file-size">${size} bytes</span>
758
758
  <ui-icon-button
@@ -772,7 +772,7 @@ export default class BodyEditor extends ApiElement {
772
772
  }
773
773
  const id = this.invalidMimeMessage;
774
774
  return html `
775
- <div class="invalid-mime">
775
+ <div class="invalid-mime body-medium">
776
776
  <ui-icon icon="warning" class="warning-icon"></ui-icon>
777
777
  ${id === 1 ? this.renderFixableInvalidMime('multipart/form-data') : ''}
778
778
  ${id === 2 ? this.renderFixableInvalidMime('application/x-www-form-urlencoded') : ''}
@@ -784,7 +784,7 @@ export default class BodyEditor extends ApiElement {
784
784
  */
785
785
  renderFixableInvalidMime(suggested) {
786
786
  return html `
787
- <p class="message">
787
+ <p class="message body-medium">
788
788
  The <code>content-type</code> header has different value than <b>${suggested}</b>.
789
789
  </p>
790
790
  <ui-button class="fix" type="tonal" title="Updates the content type header for the request" @click="${this.autoFixMime}">Fix</ui-button>
@@ -1 +1 @@
1
- {"version":3,"file":"BodyEditor.js","sourceRoot":"","sources":["../../../src/elements/http/BodyEditor.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable lit-a11y/no-autofocus */\n/* eslint-disable class-methods-use-this */\n/**\n@license\nCopyright 2020 The Advanced REST client authors <arc@mulesoft.com>\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not\nuse this file except in compliance with the License. You may obtain a copy of\nthe License at\nhttp://www.apache.org/licenses/LICENSE-2.0\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\nWARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\nLicense for the specific language governing permissions and limitations under\nthe License.\n*/\nimport { html, TemplateResult, PropertyValues, nothing } from 'lit';\nimport { property, query } from 'lit/decorators.js';\nimport { IBodyMetaModel, IMultipartBody, IProperty, IRawBody, ISafePayload, IUrlEncodedBodyMeta, PayloadSerializer } from '@api-client/core/build/browser.js';\nimport { ifProperty } from '../../directives/if-property.js';\nimport BodyUrlEncodedEditor from './BodyUrlEncodedEditor.js';\nimport BodyTextEditor from './BodyTextEditor.js';\nimport BodyMultipartEditor from './BodyMultipartEditor.js';\nimport { Events } from '../../events/Events.js';\nimport ApiElement from '../ApiElement.js';\nimport CheckboxElement from '../../ui/input/CheckboxElement.js';\nimport '../../define/ui/ui-icon.js';\nimport '../../define/http/http-body-urlencoded-editor.js';\nimport '../../define/http/http-body-multipart-editor.js';\nimport '../../define/http/http-body-text-editor.js';\nimport '../../define/ui/ui-button.js';\nimport '../../define/ui/ui-dropdown-list.js';\nimport '../../define/ui/ui-list.js';\nimport '../../define/ui/ui-list-item.js';\nimport '../../define/ui/ui-divider.js';\nimport '../../define/ui/ui-checkbox.js';\n\nexport type AllowedEditor = 'raw' | 'urlEncode' | 'multipart' | 'file';\n\nexport interface EditorType {\n id: AllowedEditor;\n label: string;\n title: string;\n}\n\nexport const editorTypes: Readonly<EditorType[]> = Object.freeze([\n {\n id: 'raw',\n label: 'Text editor',\n title: 'Opens a source editor with syntax highlighting'\n },\n {\n id: 'urlEncode',\n label: 'Form URL encoded',\n title: 'Opens an editor specialized with URL encoded data types'\n },\n {\n id: 'multipart',\n label: 'Multipart form data',\n title: 'Opens an editor specialized with multipart data'\n },\n {\n id: 'file',\n label: 'A file',\n title: 'Allows to choose any binary data'\n }\n]);\n\nconst monacoContentTypes: Record<string, string> = {\n 'application/json': 'JSON',\n 'application/xml': 'XML',\n 'text/html': 'HTML',\n 'text/css': 'CSS',\n '': 'Inherited from headers'\n};\n\n/**\n * @fires change When the value and the model change\n */\nexport default class BodyEditor extends ApiElement {\n /**\n * The currently rendered editor.\n * @attribute\n */\n @property({ type: String }) selected: AllowedEditor = 'raw';\n\n protected valueInternal: unknown = '';\n\n /**\n * The HTTP body.\n *\n * Depending of current editor selection the type can vary.\n */\n @property()\n get value(): unknown {\n return this.valueInternal;\n }\n\n set value(value: unknown) {\n const old = this.valueInternal;\n if (old === value) {\n return;\n }\n // this is to be able to set a private filed value from\n // within the element\n this.valueInternal = value;\n this.requestUpdate();\n }\n\n protected modelInternal: IBodyMetaModel[] | undefined;\n\n /**\n * Previously generated by this editor metadata model.\n * Used internally to set the UI.\n */\n @property({ type: Array })\n get model(): IBodyMetaModel[] | undefined {\n return this.modelInternal;\n }\n\n set model(value: IBodyMetaModel[] | undefined) {\n const old = this.modelInternal;\n if (old === value) {\n return;\n }\n // this is to be able to set a private filed value from\n // within the element\n this.modelInternal = value;\n this.requestUpdate();\n this.modelChanged();\n }\n\n /**\n * When set the editor is in read only mode.\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) readOnly = false;\n\n /**\n * When set all controls are disabled in the form\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n /** \n * When set it automatically encodes and decodes values.\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) autoEncode = false;\n\n /**\n * @returns True when the current value is a file (or blob).\n */\n get hasFile(): boolean {\n const { value } = this;\n return value instanceof Blob;\n }\n\n /** \n * The current request content type. It is passed to the `raw` editor\n * to detect current language.\n * @attribute\n */\n @property({ type: String, reflect: true }) contentType?: string;\n\n protected invalidMimeMessage?: number;\n\n protected invalidMimeValue?: boolean;\n\n protected mimeValue?: string;\n\n @query('http-body-urlencoded-editor') protected urlEncodedEditor?: BodyUrlEncodedEditor;\n\n @query('http-body-multipart-editor') protected multipartEditor?: BodyMultipartEditor;\n\n constructor() {\n super();\n this.addEventListener('drop', this.handlerDrop.bind(this));\n this.addEventListener('dragover', this.handleDragOver.bind(this));\n }\n\n protected override update(cp: PropertyValues<this>): void {\n if (cp.has('contentType') || cp.has('selected')) {\n this.analyzeContentType();\n }\n super.update(cp);\n }\n\n /**\n * This must be called only when the `model` property change from the \n * outside. It restores values depending on the selected editor.\n */\n protected modelChanged(): void {\n const { selected, model } = this;\n if (!model) {\n return;\n }\n if (selected === 'file') {\n this.restoreFileModel();\n }\n const info = this.readMetaModel('urlEncode') as IUrlEncodedBodyMeta[] | undefined;\n if (Array.isArray(info) && info[0]) {\n if (typeof info[0].autoEncode === 'boolean') {\n this.autoEncode = info[0].autoEncode;\n }\n }\n }\n\n /**\n * Restores file value from the model, if exists\n */\n protected restoreFileModel(): void {\n const fileModel = this.readMetaModel('file') as ISafePayload[] | undefined;\n if (!Array.isArray(fileModel) || !fileModel.length) {\n this.valueInternal = '';\n return;\n }\n const [item] = fileModel;\n if (!item || !item.data) {\n this.valueInternal = '';\n return;\n }\n const file = PayloadSerializer.deserializeFile(item);\n this.valueInternal = file;\n }\n\n protected handleTypeChange(e: CustomEvent): void {\n const target = e.detail.item as HTMLElement | undefined;\n if (!target) {\n return;\n }\n const selected = target.dataset.type as AllowedEditor;\n this.changeEditor(selected);\n }\n\n /**\n * A handler for the editor selection. It activates an editor, if necessary.\n */\n protected async changeEditor(id: AllowedEditor): Promise<void> {\n if (this.selected === id) {\n return;\n }\n this.selected = id;\n this.analyzeContentType();\n if (id === 'raw') {\n const model = this.readMetaModel('raw') as IRawBody[];\n let value = '';\n if (Array.isArray(model) && model.length) {\n value = model[0].value;\n }\n this.value = value;\n this.notifyChange();\n }\n this.requestUpdate();\n await this.updateComplete;\n // this.notifyResize();\n if (id === 'file') {\n this.restoreFileModel();\n this.notifyChange();\n } else if (id === 'urlEncode') {\n const editor = (this.shadowRoot as ShadowRoot).querySelector('http-body-urlencoded-editor');\n if (!editor) {\n throw new Error(`Invalid state. The <http-body-urlencoded-editor> element was removed from the DOM.`);\n }\n this.value = editor.value;\n this.notifyChange();\n } else if (id === 'multipart') {\n const editor = (this.shadowRoot as ShadowRoot).querySelector('http-body-multipart-editor');\n if (!editor) {\n throw new Error(`Invalid state. The <http-body-multipart-editor> element was removed from the DOM.`);\n }\n this.value = editor.value;\n this.notifyChange();\n }\n this.dispatchEvent(new Event('select'));\n }\n\n /**\n * A handler for the file pick button click.\n * Activates the file input.\n */\n protected handlePickFile(): void {\n const input = (this.shadowRoot as ShadowRoot).querySelector('.binary-hidden') as HTMLInputElement;\n input.click();\n }\n\n /**\n * A handler for the file file selection in the file input.\n * Sets the value to the file.\n */\n protected async handleFileChange(e: Event): Promise<void> {\n const input = e.target as HTMLInputElement;\n const { files } = input;\n if (!files) {\n return;\n }\n const file = files[0];\n if (!file) {\n return;\n }\n this.valueInternal = file;\n const payload = await PayloadSerializer.stringifyFile(file);\n const model = [ payload ];\n this.setMetaModel('file', model);\n this.notifyChange();\n this.requestUpdate();\n }\n\n /**\n * Clears the current value\n */\n protected handleClearFile(): void {\n this.value = '';\n this.setMetaModel('file', []);\n this.notifyChange();\n }\n\n /**\n * Reads editor view model\n * \n * @param editor The editor id\n * @returns The view model\n */\n protected readMetaModel(editor: string): (ISafePayload | IProperty | IMultipartBody | IRawBody | IUrlEncodedBodyMeta)[] | undefined {\n const meta = this.model;\n if (!meta || !Array.isArray(meta)) {\n return undefined;\n }\n const item = meta.find((model) => model.type === editor);\n if (!item) {\n return undefined;\n }\n if (Array.isArray(item.viewModel)) {\n return item.viewModel;\n }\n return undefined;\n }\n\n /**\n * Sets editor view model on the local model\n * @param editor The editor id\n * @param model The view model\n */\n protected setMetaModel(editor: AllowedEditor, model: (ISafePayload | IProperty | IMultipartBody | IRawBody | IUrlEncodedBodyMeta)[]): void {\n if (!Array.isArray(this.modelInternal)) {\n this.modelInternal = [];\n }\n const meta = this.model as IBodyMetaModel[];\n const index = meta.findIndex((item) => item.type === editor);\n if (index === -1) {\n meta.push({ type: editor, viewModel: model });\n } else {\n meta[index].viewModel = model;\n }\n }\n\n /**\n * A handler for the change event dispatched by the \n * `urlEncode` editor.\n * Updated the local value, model, and notifies the change.\n */\n protected handleUrlEncodeChange(e: Event): void {\n const editor = e.target as BodyUrlEncodedEditor;\n this.updateUrlEncodedValue(editor);\n }\n\n protected updateUrlEncodedValue(editor: BodyUrlEncodedEditor): void {\n const { value, model } = editor;\n this.valueInternal = value;\n const info: IUrlEncodedBodyMeta = {\n model,\n autoEncode: this.autoEncode,\n };\n this.setMetaModel('urlEncode', [info]);\n this.notifyChange();\n // do not request update here.\n }\n\n /**\n * A handler for the change event dispatched by the `raw` editor.\n * Updated the local value, model, and notifies the change.\n */\n protected handleRawChange(e: Event): void {\n const editor = e.target as BodyTextEditor;\n const { value } = editor;\n this.valueInternal = value;\n const model: IRawBody[] = [{ value: value as string }];\n this.setMetaModel('raw', model);\n this.notifyChange();\n }\n\n /**\n * A handler for the change event dispatched by the \n * `multipart` editor.\n * Updated the local value, model, and notifies the change.\n */\n protected handleMultipartChange(e: Event): void {\n const editor = e.target as BodyMultipartEditor;\n const { value, model } = editor;\n this.valueInternal = value;\n this.setMetaModel('multipart', model);\n this.notifyChange();\n }\n\n /**\n * Checks whether the current content type header value matches the selected editor.\n * If not it renders a warning message.\n */\n protected analyzeContentType(): void {\n const mime = this.contentType;\n if (!mime || typeof mime !== 'string') {\n this.invalidMimeValue = false;\n this.mimeValue = undefined;\n return;\n }\n let ct = mime;\n const semicolon = ct.indexOf(';');\n if (semicolon !== -1) {\n ct = ct.substring(0, semicolon);\n }\n this.mimeValue = ct;\n if (!ct) {\n this.invalidMimeValue = false;\n return;\n }\n const { selected } = this;\n if (selected === 'multipart') {\n if (ct !== 'multipart/form-data') {\n this.invalidMimeValue = true;\n this.invalidMimeMessage = 1;\n } else {\n this.invalidMimeValue = false;\n }\n } else if (selected === 'urlEncode') {\n if (ct !== 'application/x-www-form-urlencoded') {\n this.invalidMimeValue = true;\n this.invalidMimeMessage = 2;\n } else {\n this.invalidMimeValue = false;\n }\n } else {\n this.invalidMimeValue = false;\n }\n }\n\n /**\n * Automatically fixes content type problem.\n */\n protected autoFixMime(): void {\n const { selected } = this;\n let updated = '';\n if (selected === 'urlEncode') {\n updated = 'application/x-www-form-urlencoded';\n } else if (selected === 'multipart') {\n updated = 'multipart/form-data';\n }\n Events.Http.Request.State.contentTypeChange(updated, this);\n }\n\n /**\n * A handler for the mime type selection.\n */\n protected handleMimeTypeSelect(e: CustomEvent): void {\n const target = e.detail.item as HTMLElement | undefined;\n if (!target) {\n return;\n }\n const { type = '' } = target.dataset;\n if (this.mimeValue === type) {\n return;\n }\n this.contentType = type;\n Events.Http.Request.State.contentTypeChange(type, this);\n }\n\n async handlerDrop(e: DragEvent): Promise<void> {\n e.preventDefault();\n const { dataTransfer } = e;\n if (!dataTransfer) {\n return;\n }\n const { files } = dataTransfer;\n if (!files.length) {\n return;\n }\n const file = files[0];\n const { selected } = this;\n if (selected === 'file') {\n this.value = file;\n } else if (selected === 'multipart') {\n const editor = (this.shadowRoot as ShadowRoot).querySelector('http-body-multipart-editor');\n if (!editor) {\n throw new Error(`Invalid state. The <http-body-multipart-editor> element was removed from the DOM.`);\n }\n if (!e.ctrlKey && !e.metaKey) {\n editor.value = new FormData();\n }\n const ps = Array.from(files).map((item) => editor.addFile(item));\n await Promise.all(ps);\n } else {\n const payload = await PayloadSerializer.stringifyBlob(file);\n this.value = payload.data;\n const { type } = file;\n if (type) {\n Events.Http.Request.State.contentTypeChange(type, this);\n }\n }\n this.notifyChange();\n }\n\n protected handleDragOver(e: DragEvent): void {\n e.preventDefault();\n }\n\n protected handleAddUrlEncode(): void {\n const editor = this.urlEncodedEditor;\n if (editor) {\n editor.addParameter();\n }\n }\n\n protected handleUrlEncode(): void {\n const editor = this.urlEncodedEditor;\n if (editor) {\n editor.encodeParameters();\n }\n }\n\n protected handleUrlDecode(): void {\n const editor = this.urlEncodedEditor;\n if (editor) {\n editor.decodeParameters();\n }\n }\n\n protected handleUrlEncodeAutoChange(e: Event): void {\n const input = e.target as CheckboxElement;\n this.autoEncode = input.checked;\n const editor = this.urlEncodedEditor;\n if (editor) {\n this.updateUrlEncodedValue(editor);\n }\n }\n\n protected handleMultipartAddText(): void {\n const editor = this.multipartEditor;\n if (editor) {\n editor.addEmptyText();\n }\n }\n\n protected handleMultipartAddFile(): void {\n const editor = this.multipartEditor;\n if (editor) {\n editor.addEmptyFile();\n }\n }\n\n override render(): TemplateResult {\n return html`\n <div class=\"actions\">\n ${this.renderBodySelector()}\n ${this.renderMainActions()}\n </div>\n ${this.renderInvalidMime()}\n <div class=\"container\">\n ${this.renderEditor()}\n </div>\n `;\n }\n\n /**\n * @returns The template for the dropdown menu for the editor type\n */\n protected renderBodySelector(): TemplateResult {\n const { selected } = this;\n const selectedItem = editorTypes.find(i => i.id === selected);\n const label = selectedItem && selectedItem.label || 'Select editor';\n return html`\n <ui-dropdown-list\n verticalAlign=\"top\"\n @select=\"${this.handleTypeChange}\"\n class=\"type-dropdown\"\n closeOnOutsideClick\n >\n <ui-button type=\"tonal\" title=\"Select editor type\" aria-label=\"Opens a menu to select editor type\">\n <ui-icon icon=\"arrowDropDown\" slot=\"icon\" role=\"presentation\"></ui-icon>\n ${label}\n </ui-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n ${this.renderBodyTypeOptions()}\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderBodyTypeOptions(): TemplateResult {\n return html`\n ${editorTypes.map((info) => html`\n <ui-list-item role=\"menuitem\" data-type=\"${info.id}\" title=\"${info.title}\">\n ${info.label}\n </ui-list-item>\n `)}\n `;\n }\n\n /**\n * @returns The template for the main editor actions.\n */\n protected renderMainActions(): TemplateResult | typeof nothing {\n const { selected } = this;\n if (selected === 'raw') {\n return this.renderTextEditorActions();\n }\n if (selected === 'urlEncode') {\n return this.renderUrlEncodeEditorActions();\n }\n if (selected === 'multipart') {\n return this.renderMultipartActions();\n }\n return nothing;\n }\n\n protected renderTextEditorActions(): TemplateResult {\n const label = monacoContentTypes[this.mimeValue || ''] || monacoContentTypes[''];\n return html`\n <ui-dropdown-list\n verticalAlign=\"top\"\n @select=\"${this.handleMimeTypeSelect}\"\n class=\"mime-dropdown\"\n closeOnOutsideClick\n >\n <ui-button \n type=\"tonal\" \n title=\"Select media type. This overrides the content-type header\"\n aria-label=\"Editor media type\"\n >\n <ui-icon icon=\"arrowDropDown\" slot=\"icon\"></ui-icon>\n ${label}\n </ui-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n ${this.renderMonacoOptions()}\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderMonacoOptions(): TemplateResult[] {\n return Object.keys(monacoContentTypes).map(key => html`\n ${key === '' ? html`<ui-divider></ui-divider>` : nothing}\n <ui-list-item role=\"menuitem\" data-type=\"${key}\">\n ${monacoContentTypes[key]}\n </ui-list-item>\n `);\n }\n\n protected renderUrlEncodeEditorActions(): TemplateResult {\n const { autoEncode } = this;\n return html`\n <ui-button \n type=\"tonal\" \n aria-label=\"Adds a new parameter\" \n title=\"Adds a new parameter\" \n @click=\"${this.handleAddUrlEncode}\"\n >\n <ui-icon slot=\"icon\" icon=\"add\" role=\"presentation\"></ui-icon>\n Add\n </ui-button>\n <ui-button \n type=\"outlined\" \n title=\"URL encodes parameters in the editor\" \n aria-label=\"URL encodes parameters in the editor\"\n @click=\"${this.handleUrlEncode}\"\n ?disabled=\"${autoEncode}\"\n >\n URL encode\n </ui-button>\n <ui-button \n type=\"outlined\" \n title=\"URL decodes parameters in the editor\"\n aria-label=\"URL decodes parameters in the editor\"\n @click=\"${this.handleUrlDecode}\"\n ?disabled=\"${autoEncode}\"\n >\n URL decode\n </ui-button>\n <label title=\"When set it automatically encodes the values before sending the request\">\n <ui-checkbox .checked=\"${autoEncode}\" @change=\"${this.handleUrlEncodeAutoChange}\"></ui-checkbox>\n Encode on send\n </label>\n `;\n }\n\n protected renderMultipartActions(): TemplateResult {\n return html`\n <ui-button\n type=\"outlined\"\n title=\"Adds a new part with a file value\"\n aria-label=\"Adds a new part with a file value\"\n @click=\"${this.handleMultipartAddFile}\"\n >\n Add file part\n </ui-button>\n <ui-button \n type=\"outlined\" \n title=\"Adds a new part with a text value\"\n aria-label=\"Adds a new part with a text value\"\n @click=\"${this.handleMultipartAddText}\"\n >\n Add text part\n </ui-button>\n `;\n }\n\n /**\n * @returns A template for currently rendered editor\n */\n protected renderEditor(): TemplateResult {\n switch (this.selected) {\n case 'raw': return this.renderRawEditor();\n case 'urlEncode': return this.renderUrlEncodeEditor();\n case 'multipart': return this.renderMultipartEditor();\n case 'file': return this.renderFileEditor();\n default: return this.renderNoEditor();\n }\n }\n\n /**\n * @returns The template for the raw editor\n */\n protected renderRawEditor(): TemplateResult {\n let { value } = this;\n const model = this.readMetaModel('raw') as IRawBody[];\n const hasModel = Array.isArray(model) && model.length;\n if (typeof value !== 'string') {\n value = '';\n }\n if (!value && hasModel) {\n const [item] = model;\n value = item.value;\n }\n return this.renderTextEditor(value as string);\n }\n\n /**\n * @param value The editor value\n * @returns The template for the Monaco editor\n */\n protected renderTextEditor(value: string): TemplateResult {\n const { contentType } = this;\n return html`\n <http-body-text-editor \n .value=\"${value}\" \n .contentType=\"${contentType}\"\n @change=\"${this.handleRawChange}\"\n allowFormInfo\n ></http-body-text-editor>`;\n }\n\n /**\n * @returns A template for the application/x-www-form-urlencoded editor\n */\n protected renderUrlEncodeEditor(): TemplateResult {\n const { autoEncode } = this;\n const info = this.readMetaModel('urlEncode') as IUrlEncodedBodyMeta[] | undefined;\n const model = Array.isArray(info) && info[0] && info[0].model;\n return html`\n <http-body-urlencoded-editor \n ?autoEncode=\"${autoEncode}\"\n .model=\"${ifProperty(model)}\"\n @change=\"${this.handleUrlEncodeChange}\"\n allowFormInfo\n ></http-body-urlencoded-editor>\n `;\n }\n\n /**\n * @returns A template for the multipart editor\n */\n protected renderMultipartEditor(): TemplateResult {\n const model = this.readMetaModel('multipart') as IMultipartBody[];\n return html`\n <http-body-multipart-editor \n .model=\"${ifProperty(model)}\"\n @change=\"${this.handleMultipartChange}\"\n allowFormInfo\n ></http-body-multipart-editor>\n `;\n }\n\n /**\n * @returns A template for the file input editor\n */\n protected renderFileEditor(): TemplateResult {\n return html`\n <div class=\"file-picker\">\n <ui-button type=\"text\" @click=\"${this.handlePickFile}\">Choose a file</ui-button>\n ${this.renderFileDetail()}\n </div>\n <input type=\"file\" class=\"binary-hidden\" @change=\"${this.handleFileChange}\"/>\n ${this.renderFormInfo()}\n `;\n }\n\n protected renderFormInfo(): TemplateResult {\n return html`\n <p class=\"form-info\">\n Note that the content-type header will be added when the request is sent.\n </p>\n `;\n }\n\n /**\n * @returns A template for the missing selection\n */\n protected renderNoEditor(): TemplateResult {\n return html`<div class=\"empty-editor\">Invalid editor selected.</div>`;\n }\n\n /**\n * @returns A template for the file details.\n */\n protected renderFileDetail(): TemplateResult | string {\n if (!this.hasFile) {\n this.restoreFileModel();\n }\n if (!this.hasFile) {\n return '';\n }\n const { value } = this;\n const { size, name } = value as File;\n return html`\n <div class=\"file-info\">\n <span class=\"file-name\">${name || 'unknown name'}</span>\n <span class=\"file-size\">${size} bytes</span>\n <ui-icon-button\n aria-label=\"Delete file\"\n title=\"Deletes the file\"\n @click=\"${this.handleClearFile}\"\n ?disabled=\"${this.readOnly}\"\n >\n <ui-icon icon=\"deleteOutline\" role=\"presentation\"></ui-icon>\n </ui-icon-button>\n </div>\n `;\n }\n\n protected renderInvalidMime(): TemplateResult | string {\n if (!this.invalidMimeValue) {\n return '';\n }\n const id = this.invalidMimeMessage;\n return html`\n <div class=\"invalid-mime\">\n <ui-icon icon=\"warning\" class=\"warning-icon\"></ui-icon>\n ${id === 1 ? this.renderFixableInvalidMime('multipart/form-data') : ''}\n ${id === 2 ? this.renderFixableInvalidMime('application/x-www-form-urlencoded') : ''}\n </div>\n `;\n }\n\n /**\n * @returns A template for fixable mime type mismatch message.\n */\n protected renderFixableInvalidMime(suggested: string): TemplateResult {\n return html`\n <p class=\"message\">\n The <code>content-type</code> header has different value than <b>${suggested}</b>.\n </p>\n <ui-button class=\"fix\" type=\"tonal\" title=\"Updates the content type header for the request\" @click=\"${this.autoFixMime}\">Fix</ui-button>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"BodyEditor.js","sourceRoot":"","sources":["../../../src/elements/http/BodyEditor.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable lit-a11y/no-autofocus */\n/* eslint-disable class-methods-use-this */\n/**\n@license\nCopyright 2020 The Advanced REST client authors <arc@mulesoft.com>\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not\nuse this file except in compliance with the License. You may obtain a copy of\nthe License at\nhttp://www.apache.org/licenses/LICENSE-2.0\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\nWARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\nLicense for the specific language governing permissions and limitations under\nthe License.\n*/\nimport { html, TemplateResult, PropertyValues, nothing } from 'lit';\nimport { property, query } from 'lit/decorators.js';\nimport { IBodyMetaModel, IMultipartBody, IProperty, IRawBody, ISafePayload, IUrlEncodedBodyMeta, PayloadSerializer } from '@api-client/core/build/browser.js';\nimport { ifProperty } from '../../directives/if-property.js';\nimport BodyUrlEncodedEditor from './BodyUrlEncodedEditor.js';\nimport BodyTextEditor from './BodyTextEditor.js';\nimport BodyMultipartEditor from './BodyMultipartEditor.js';\nimport { Events } from '../../events/Events.js';\nimport ApiElement from '../ApiElement.js';\nimport CheckboxElement from '../../ui/input/CheckboxElement.js';\nimport '../../define/ui/ui-icon.js';\nimport '../../define/http/http-body-urlencoded-editor.js';\nimport '../../define/http/http-body-multipart-editor.js';\nimport '../../define/http/http-body-text-editor.js';\nimport '../../define/ui/ui-button.js';\nimport '../../define/ui/ui-dropdown-list.js';\nimport '../../define/ui/ui-list.js';\nimport '../../define/ui/ui-list-item.js';\nimport '../../define/ui/ui-divider.js';\nimport '../../define/ui/ui-checkbox.js';\n\nexport type AllowedEditor = 'raw' | 'urlEncode' | 'multipart' | 'file';\n\nexport interface EditorType {\n id: AllowedEditor;\n label: string;\n title: string;\n}\n\nexport const editorTypes: Readonly<EditorType[]> = Object.freeze([\n {\n id: 'raw',\n label: 'Text editor',\n title: 'Opens a source editor with syntax highlighting'\n },\n {\n id: 'urlEncode',\n label: 'Form URL encoded',\n title: 'Opens an editor specialized with URL encoded data types'\n },\n {\n id: 'multipart',\n label: 'Multipart form data',\n title: 'Opens an editor specialized with multipart data'\n },\n {\n id: 'file',\n label: 'A file',\n title: 'Allows to choose any binary data'\n }\n]);\n\nconst monacoContentTypes: Record<string, string> = {\n 'application/json': 'JSON',\n 'application/xml': 'XML',\n 'text/html': 'HTML',\n 'text/css': 'CSS',\n '': 'Inherited from headers'\n};\n\n/**\n * @fires change When the value and the model change\n */\nexport default class BodyEditor extends ApiElement {\n /**\n * The currently rendered editor.\n * @attribute\n */\n @property({ type: String }) selected: AllowedEditor = 'raw';\n\n protected valueInternal: unknown = '';\n\n /**\n * The HTTP body.\n *\n * Depending of current editor selection the type can vary.\n */\n @property()\n get value(): unknown {\n return this.valueInternal;\n }\n\n set value(value: unknown) {\n const old = this.valueInternal;\n if (old === value) {\n return;\n }\n // this is to be able to set a private filed value from\n // within the element\n this.valueInternal = value;\n this.requestUpdate();\n }\n\n protected modelInternal: IBodyMetaModel[] | undefined;\n\n /**\n * Previously generated by this editor metadata model.\n * Used internally to set the UI.\n */\n @property({ type: Array })\n get model(): IBodyMetaModel[] | undefined {\n return this.modelInternal;\n }\n\n set model(value: IBodyMetaModel[] | undefined) {\n const old = this.modelInternal;\n if (old === value) {\n return;\n }\n // this is to be able to set a private filed value from\n // within the element\n this.modelInternal = value;\n this.requestUpdate();\n this.modelChanged();\n }\n\n /**\n * When set the editor is in read only mode.\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) readOnly = false;\n\n /**\n * When set all controls are disabled in the form\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n /** \n * When set it automatically encodes and decodes values.\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) autoEncode = false;\n\n /**\n * @returns True when the current value is a file (or blob).\n */\n get hasFile(): boolean {\n const { value } = this;\n return value instanceof Blob;\n }\n\n /** \n * The current request content type. It is passed to the `raw` editor\n * to detect current language.\n * @attribute\n */\n @property({ type: String, reflect: true }) contentType?: string;\n\n protected invalidMimeMessage?: number;\n\n protected invalidMimeValue?: boolean;\n\n protected mimeValue?: string;\n\n @query('http-body-urlencoded-editor') protected urlEncodedEditor?: BodyUrlEncodedEditor;\n\n @query('http-body-multipart-editor') protected multipartEditor?: BodyMultipartEditor;\n\n constructor() {\n super();\n this.addEventListener('drop', this.handlerDrop.bind(this));\n this.addEventListener('dragover', this.handleDragOver.bind(this));\n }\n\n protected override update(cp: PropertyValues<this>): void {\n if (cp.has('contentType') || cp.has('selected')) {\n this.analyzeContentType();\n }\n super.update(cp);\n }\n\n /**\n * This must be called only when the `model` property change from the \n * outside. It restores values depending on the selected editor.\n */\n protected modelChanged(): void {\n const { selected, model } = this;\n if (!model) {\n return;\n }\n if (selected === 'file') {\n this.restoreFileModel();\n }\n const info = this.readMetaModel('urlEncode') as IUrlEncodedBodyMeta[] | undefined;\n if (Array.isArray(info) && info[0]) {\n if (typeof info[0].autoEncode === 'boolean') {\n this.autoEncode = info[0].autoEncode;\n }\n }\n }\n\n /**\n * Restores file value from the model, if exists\n */\n protected restoreFileModel(): void {\n const fileModel = this.readMetaModel('file') as ISafePayload[] | undefined;\n if (!Array.isArray(fileModel) || !fileModel.length) {\n this.valueInternal = '';\n return;\n }\n const [item] = fileModel;\n if (!item || !item.data) {\n this.valueInternal = '';\n return;\n }\n const file = PayloadSerializer.deserializeFile(item);\n this.valueInternal = file;\n }\n\n protected handleTypeChange(e: CustomEvent): void {\n const target = e.detail.item as HTMLElement | undefined;\n if (!target) {\n return;\n }\n const selected = target.dataset.type as AllowedEditor;\n this.changeEditor(selected);\n }\n\n /**\n * A handler for the editor selection. It activates an editor, if necessary.\n */\n protected async changeEditor(id: AllowedEditor): Promise<void> {\n if (this.selected === id) {\n return;\n }\n this.selected = id;\n this.analyzeContentType();\n if (id === 'raw') {\n const model = this.readMetaModel('raw') as IRawBody[];\n let value = '';\n if (Array.isArray(model) && model.length) {\n value = model[0].value;\n }\n this.value = value;\n this.notifyChange();\n }\n this.requestUpdate();\n await this.updateComplete;\n // this.notifyResize();\n if (id === 'file') {\n this.restoreFileModel();\n this.notifyChange();\n } else if (id === 'urlEncode') {\n const editor = (this.shadowRoot as ShadowRoot).querySelector('http-body-urlencoded-editor');\n if (!editor) {\n throw new Error(`Invalid state. The <http-body-urlencoded-editor> element was removed from the DOM.`);\n }\n this.value = editor.value;\n this.notifyChange();\n } else if (id === 'multipart') {\n const editor = (this.shadowRoot as ShadowRoot).querySelector('http-body-multipart-editor');\n if (!editor) {\n throw new Error(`Invalid state. The <http-body-multipart-editor> element was removed from the DOM.`);\n }\n this.value = editor.value;\n this.notifyChange();\n }\n this.dispatchEvent(new Event('select'));\n }\n\n /**\n * A handler for the file pick button click.\n * Activates the file input.\n */\n protected handlePickFile(): void {\n const input = (this.shadowRoot as ShadowRoot).querySelector('.binary-hidden') as HTMLInputElement;\n input.click();\n }\n\n /**\n * A handler for the file file selection in the file input.\n * Sets the value to the file.\n */\n protected async handleFileChange(e: Event): Promise<void> {\n const input = e.target as HTMLInputElement;\n const { files } = input;\n if (!files) {\n return;\n }\n const file = files[0];\n if (!file) {\n return;\n }\n this.valueInternal = file;\n const payload = await PayloadSerializer.stringifyFile(file);\n const model = [ payload ];\n this.setMetaModel('file', model);\n this.notifyChange();\n this.requestUpdate();\n }\n\n /**\n * Clears the current value\n */\n protected handleClearFile(): void {\n this.value = '';\n this.setMetaModel('file', []);\n this.notifyChange();\n }\n\n /**\n * Reads editor view model\n * \n * @param editor The editor id\n * @returns The view model\n */\n protected readMetaModel(editor: string): (ISafePayload | IProperty | IMultipartBody | IRawBody | IUrlEncodedBodyMeta)[] | undefined {\n const meta = this.model;\n if (!meta || !Array.isArray(meta)) {\n return undefined;\n }\n const item = meta.find((model) => model.type === editor);\n if (!item) {\n return undefined;\n }\n if (Array.isArray(item.viewModel)) {\n return item.viewModel;\n }\n return undefined;\n }\n\n /**\n * Sets editor view model on the local model\n * @param editor The editor id\n * @param model The view model\n */\n protected setMetaModel(editor: AllowedEditor, model: (ISafePayload | IProperty | IMultipartBody | IRawBody | IUrlEncodedBodyMeta)[]): void {\n if (!Array.isArray(this.modelInternal)) {\n this.modelInternal = [];\n }\n const meta = this.model as IBodyMetaModel[];\n const index = meta.findIndex((item) => item.type === editor);\n if (index === -1) {\n meta.push({ type: editor, viewModel: model });\n } else {\n meta[index].viewModel = model;\n }\n }\n\n /**\n * A handler for the change event dispatched by the \n * `urlEncode` editor.\n * Updated the local value, model, and notifies the change.\n */\n protected handleUrlEncodeChange(e: Event): void {\n const editor = e.target as BodyUrlEncodedEditor;\n this.updateUrlEncodedValue(editor);\n }\n\n protected updateUrlEncodedValue(editor: BodyUrlEncodedEditor): void {\n const { value, model } = editor;\n this.valueInternal = value;\n const info: IUrlEncodedBodyMeta = {\n model,\n autoEncode: this.autoEncode,\n };\n this.setMetaModel('urlEncode', [info]);\n this.notifyChange();\n // do not request update here.\n }\n\n /**\n * A handler for the change event dispatched by the `raw` editor.\n * Updated the local value, model, and notifies the change.\n */\n protected handleRawChange(e: Event): void {\n const editor = e.target as BodyTextEditor;\n const { value } = editor;\n this.valueInternal = value;\n const model: IRawBody[] = [{ value: value as string }];\n this.setMetaModel('raw', model);\n this.notifyChange();\n }\n\n /**\n * A handler for the change event dispatched by the \n * `multipart` editor.\n * Updated the local value, model, and notifies the change.\n */\n protected handleMultipartChange(e: Event): void {\n const editor = e.target as BodyMultipartEditor;\n const { value, model } = editor;\n this.valueInternal = value;\n this.setMetaModel('multipart', model);\n this.notifyChange();\n }\n\n /**\n * Checks whether the current content type header value matches the selected editor.\n * If not it renders a warning message.\n */\n protected analyzeContentType(): void {\n const mime = this.contentType;\n if (!mime || typeof mime !== 'string') {\n this.invalidMimeValue = false;\n this.mimeValue = undefined;\n return;\n }\n let ct = mime;\n const semicolon = ct.indexOf(';');\n if (semicolon !== -1) {\n ct = ct.substring(0, semicolon);\n }\n this.mimeValue = ct;\n if (!ct) {\n this.invalidMimeValue = false;\n return;\n }\n const { selected } = this;\n if (selected === 'multipart') {\n if (ct !== 'multipart/form-data') {\n this.invalidMimeValue = true;\n this.invalidMimeMessage = 1;\n } else {\n this.invalidMimeValue = false;\n }\n } else if (selected === 'urlEncode') {\n if (ct !== 'application/x-www-form-urlencoded') {\n this.invalidMimeValue = true;\n this.invalidMimeMessage = 2;\n } else {\n this.invalidMimeValue = false;\n }\n } else {\n this.invalidMimeValue = false;\n }\n }\n\n /**\n * Automatically fixes content type problem.\n */\n protected autoFixMime(): void {\n const { selected } = this;\n let updated = '';\n if (selected === 'urlEncode') {\n updated = 'application/x-www-form-urlencoded';\n } else if (selected === 'multipart') {\n updated = 'multipart/form-data';\n }\n Events.Http.Request.State.contentTypeChange(updated, this);\n }\n\n /**\n * A handler for the mime type selection.\n */\n protected handleMimeTypeSelect(e: CustomEvent): void {\n const target = e.detail.item as HTMLElement | undefined;\n if (!target) {\n return;\n }\n const { type = '' } = target.dataset;\n if (this.mimeValue === type) {\n return;\n }\n this.contentType = type;\n Events.Http.Request.State.contentTypeChange(type, this);\n }\n\n async handlerDrop(e: DragEvent): Promise<void> {\n e.preventDefault();\n const { dataTransfer } = e;\n if (!dataTransfer) {\n return;\n }\n const { files } = dataTransfer;\n if (!files.length) {\n return;\n }\n const file = files[0];\n const { selected } = this;\n if (selected === 'file') {\n this.value = file;\n } else if (selected === 'multipart') {\n const editor = (this.shadowRoot as ShadowRoot).querySelector('http-body-multipart-editor');\n if (!editor) {\n throw new Error(`Invalid state. The <http-body-multipart-editor> element was removed from the DOM.`);\n }\n if (!e.ctrlKey && !e.metaKey) {\n editor.value = new FormData();\n }\n const ps = Array.from(files).map((item) => editor.addFile(item));\n await Promise.all(ps);\n } else {\n const payload = await PayloadSerializer.stringifyBlob(file);\n this.value = payload.data;\n const { type } = file;\n if (type) {\n Events.Http.Request.State.contentTypeChange(type, this);\n }\n }\n this.notifyChange();\n }\n\n protected handleDragOver(e: DragEvent): void {\n e.preventDefault();\n }\n\n protected handleAddUrlEncode(): void {\n const editor = this.urlEncodedEditor;\n if (editor) {\n editor.addParameter();\n }\n }\n\n protected handleUrlEncode(): void {\n const editor = this.urlEncodedEditor;\n if (editor) {\n editor.encodeParameters();\n }\n }\n\n protected handleUrlDecode(): void {\n const editor = this.urlEncodedEditor;\n if (editor) {\n editor.decodeParameters();\n }\n }\n\n protected handleUrlEncodeAutoChange(e: Event): void {\n const input = e.target as CheckboxElement;\n this.autoEncode = input.checked;\n const editor = this.urlEncodedEditor;\n if (editor) {\n this.updateUrlEncodedValue(editor);\n }\n }\n\n protected handleMultipartAddText(): void {\n const editor = this.multipartEditor;\n if (editor) {\n editor.addEmptyText();\n }\n }\n\n protected handleMultipartAddFile(): void {\n const editor = this.multipartEditor;\n if (editor) {\n editor.addEmptyFile();\n }\n }\n\n override render(): TemplateResult {\n return html`\n <div class=\"actions\">\n ${this.renderBodySelector()}\n ${this.renderMainActions()}\n </div>\n ${this.renderInvalidMime()}\n <div class=\"container\">\n ${this.renderEditor()}\n </div>\n `;\n }\n\n /**\n * @returns The template for the dropdown menu for the editor type\n */\n protected renderBodySelector(): TemplateResult {\n const { selected } = this;\n const selectedItem = editorTypes.find(i => i.id === selected);\n const label = selectedItem && selectedItem.label || 'Select editor';\n return html`\n <ui-dropdown-list\n verticalAlign=\"top\"\n @select=\"${this.handleTypeChange}\"\n class=\"type-dropdown\"\n closeOnOutsideClick\n >\n <ui-button type=\"tonal\" title=\"Select editor type\" aria-label=\"Opens a menu to select editor type\">\n <ui-icon icon=\"arrowDropDown\" slot=\"icon\" role=\"presentation\"></ui-icon>\n ${label}\n </ui-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n ${this.renderBodyTypeOptions()}\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderBodyTypeOptions(): TemplateResult {\n return html`\n ${editorTypes.map((info) => html`\n <ui-list-item role=\"menuitem\" data-type=\"${info.id}\" title=\"${info.title}\">\n ${info.label}\n </ui-list-item>\n `)}\n `;\n }\n\n /**\n * @returns The template for the main editor actions.\n */\n protected renderMainActions(): TemplateResult | typeof nothing {\n const { selected } = this;\n if (selected === 'raw') {\n return this.renderTextEditorActions();\n }\n if (selected === 'urlEncode') {\n return this.renderUrlEncodeEditorActions();\n }\n if (selected === 'multipart') {\n return this.renderMultipartActions();\n }\n return nothing;\n }\n\n protected renderTextEditorActions(): TemplateResult {\n const label = monacoContentTypes[this.mimeValue || ''] || monacoContentTypes[''];\n return html`\n <ui-dropdown-list\n verticalAlign=\"top\"\n @select=\"${this.handleMimeTypeSelect}\"\n class=\"mime-dropdown\"\n closeOnOutsideClick\n >\n <ui-button \n type=\"tonal\" \n title=\"Select media type. This overrides the content-type header\"\n aria-label=\"Editor media type\"\n >\n <ui-icon icon=\"arrowDropDown\" slot=\"icon\"></ui-icon>\n ${label}\n </ui-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n ${this.renderMonacoOptions()}\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderMonacoOptions(): TemplateResult[] {\n return Object.keys(monacoContentTypes).map(key => html`\n ${key === '' ? html`<ui-divider></ui-divider>` : nothing}\n <ui-list-item role=\"menuitem\" data-type=\"${key}\">\n ${monacoContentTypes[key]}\n </ui-list-item>\n `);\n }\n\n protected renderUrlEncodeEditorActions(): TemplateResult {\n const { autoEncode } = this;\n return html`\n <ui-button \n type=\"tonal\" \n aria-label=\"Adds a new parameter\" \n title=\"Adds a new parameter\" \n @click=\"${this.handleAddUrlEncode}\"\n >\n <ui-icon slot=\"icon\" icon=\"add\" role=\"presentation\"></ui-icon>\n Add\n </ui-button>\n <ui-button \n type=\"outlined\" \n title=\"URL encodes parameters in the editor\" \n aria-label=\"URL encodes parameters in the editor\"\n @click=\"${this.handleUrlEncode}\"\n ?disabled=\"${autoEncode}\"\n >\n URL encode\n </ui-button>\n <ui-button \n type=\"outlined\" \n title=\"URL decodes parameters in the editor\"\n aria-label=\"URL decodes parameters in the editor\"\n @click=\"${this.handleUrlDecode}\"\n ?disabled=\"${autoEncode}\"\n >\n URL decode\n </ui-button>\n <label title=\"When set it automatically encodes the values before sending the request\" class=\"label-medium\">\n <ui-checkbox .checked=\"${autoEncode}\" @change=\"${this.handleUrlEncodeAutoChange}\"></ui-checkbox>\n Encode on send\n </label>\n `;\n }\n\n protected renderMultipartActions(): TemplateResult {\n return html`\n <ui-button\n type=\"outlined\"\n title=\"Adds a new part with a file value\"\n aria-label=\"Adds a new part with a file value\"\n @click=\"${this.handleMultipartAddFile}\"\n >\n Add file part\n </ui-button>\n <ui-button \n type=\"outlined\" \n title=\"Adds a new part with a text value\"\n aria-label=\"Adds a new part with a text value\"\n @click=\"${this.handleMultipartAddText}\"\n >\n Add text part\n </ui-button>\n `;\n }\n\n /**\n * @returns A template for currently rendered editor\n */\n protected renderEditor(): TemplateResult {\n switch (this.selected) {\n case 'raw': return this.renderRawEditor();\n case 'urlEncode': return this.renderUrlEncodeEditor();\n case 'multipart': return this.renderMultipartEditor();\n case 'file': return this.renderFileEditor();\n default: return this.renderNoEditor();\n }\n }\n\n /**\n * @returns The template for the raw editor\n */\n protected renderRawEditor(): TemplateResult {\n let { value } = this;\n const model = this.readMetaModel('raw') as IRawBody[];\n const hasModel = Array.isArray(model) && model.length;\n if (typeof value !== 'string') {\n value = '';\n }\n if (!value && hasModel) {\n const [item] = model;\n value = item.value;\n }\n return this.renderTextEditor(value as string);\n }\n\n /**\n * @param value The editor value\n * @returns The template for the Monaco editor\n */\n protected renderTextEditor(value: string): TemplateResult {\n const { contentType } = this;\n return html`\n <http-body-text-editor \n .value=\"${value}\" \n .contentType=\"${contentType}\"\n @change=\"${this.handleRawChange}\"\n allowFormInfo\n ></http-body-text-editor>`;\n }\n\n /**\n * @returns A template for the application/x-www-form-urlencoded editor\n */\n protected renderUrlEncodeEditor(): TemplateResult {\n const { autoEncode } = this;\n const info = this.readMetaModel('urlEncode') as IUrlEncodedBodyMeta[] | undefined;\n const model = Array.isArray(info) && info[0] && info[0].model;\n return html`\n <http-body-urlencoded-editor \n ?autoEncode=\"${autoEncode}\"\n .model=\"${ifProperty(model)}\"\n @change=\"${this.handleUrlEncodeChange}\"\n allowFormInfo\n ></http-body-urlencoded-editor>\n `;\n }\n\n /**\n * @returns A template for the multipart editor\n */\n protected renderMultipartEditor(): TemplateResult {\n const model = this.readMetaModel('multipart') as IMultipartBody[];\n return html`\n <http-body-multipart-editor \n .model=\"${ifProperty(model)}\"\n @change=\"${this.handleMultipartChange}\"\n allowFormInfo\n ></http-body-multipart-editor>\n `;\n }\n\n /**\n * @returns A template for the file input editor\n */\n protected renderFileEditor(): TemplateResult {\n return html`\n <div class=\"file-picker\">\n <ui-button type=\"text\" @click=\"${this.handlePickFile}\">Choose a file</ui-button>\n ${this.renderFileDetail()}\n </div>\n <input type=\"file\" class=\"binary-hidden\" @change=\"${this.handleFileChange}\"/>\n ${this.renderFormInfo()}\n `;\n }\n\n protected renderFormInfo(): TemplateResult {\n return html`\n <p class=\"form-info body-small\">\n Note that the content-type header will be added when the request is sent.\n </p>\n `;\n }\n\n /**\n * @returns A template for the missing selection\n */\n protected renderNoEditor(): TemplateResult {\n return html`<div class=\"empty-editor\">Invalid editor selected.</div>`;\n }\n\n /**\n * @returns A template for the file details.\n */\n protected renderFileDetail(): TemplateResult | string {\n if (!this.hasFile) {\n this.restoreFileModel();\n }\n if (!this.hasFile) {\n return '';\n }\n const { value } = this;\n const { size, name } = value as File;\n return html`\n <div class=\"file-info label-medium\">\n <span class=\"file-name\">${name || 'unknown name'}</span>\n <span class=\"file-size\">${size} bytes</span>\n <ui-icon-button\n aria-label=\"Delete file\"\n title=\"Deletes the file\"\n @click=\"${this.handleClearFile}\"\n ?disabled=\"${this.readOnly}\"\n >\n <ui-icon icon=\"deleteOutline\" role=\"presentation\"></ui-icon>\n </ui-icon-button>\n </div>\n `;\n }\n\n protected renderInvalidMime(): TemplateResult | string {\n if (!this.invalidMimeValue) {\n return '';\n }\n const id = this.invalidMimeMessage;\n return html`\n <div class=\"invalid-mime body-medium\">\n <ui-icon icon=\"warning\" class=\"warning-icon\"></ui-icon>\n ${id === 1 ? this.renderFixableInvalidMime('multipart/form-data') : ''}\n ${id === 2 ? this.renderFixableInvalidMime('application/x-www-form-urlencoded') : ''}\n </div>\n `;\n }\n\n /**\n * @returns A template for fixable mime type mismatch message.\n */\n protected renderFixableInvalidMime(suggested: string): TemplateResult {\n return html`\n <p class=\"message body-medium\">\n The <code>content-type</code> header has different value than <b>${suggested}</b>.\n </p>\n <ui-button class=\"fix\" type=\"tonal\" title=\"Updates the content type header for the request\" @click=\"${this.autoFixMime}\">Fix</ui-button>\n `;\n }\n}\n"]}
@@ -1,3 +1,3 @@
1
- declare const _default: import("lit").CSSResult;
1
+ declare const _default: import("lit").CSSResult[];
2
2
  export default _default;
3
3
  //# sourceMappingURL=BodyEditor.styles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BodyEditor.styles.d.ts","sourceRoot":"","sources":["../../../src/elements/http/BodyEditor.styles.ts"],"names":[],"mappings":";AAEA,wBAkFE"}
1
+ {"version":3,"file":"BodyEditor.styles.d.ts","sourceRoot":"","sources":["../../../src/elements/http/BodyEditor.styles.ts"],"names":[],"mappings":";AAGA,wBAmEG"}
@@ -1,5 +1,6 @@
1
1
  import { css } from 'lit';
2
- export default css `
2
+ import typography from '../../styles/m3/typography.module.js';
3
+ export default [typography, css `
3
4
  :host {
4
5
  display: flex;
5
6
  flex-direction: column;
@@ -31,7 +32,8 @@ http-body-text-editor {
31
32
  background-color: #FFEB3B;
32
33
  color: #000;
33
34
  padding: 0 8px;
34
- border-radius: 8px;
35
+ border-radius: var(--md-sys-shape-corner-small);
36
+ margin-bottom: 20px;
35
37
  }
36
38
 
37
39
  .invalid-mime .warning-icon {
@@ -53,14 +55,6 @@ http-body-text-editor {
53
55
  .form-info {
54
56
  margin: 20px 0 0 0;
55
57
  color: var(--md-sys-color-on-surface);
56
- font-family: var(--md-sys-typescale-body-small-font-family-name);
57
- font-style: var(--md-sys-typescale-body-small-font-family-style);
58
- font-weight: var(--md-sys-typescale-body-small-font-weight);
59
- font-size: var(--md-sys-typescale-body-small-font-size);
60
- letter-spacing: var(--md-sys-typescale-body-small-tracking);
61
- line-height: var(--md-sys-typescale-body-small-height);
62
- text-transform: var(--md-sys-typescale-body-small-text-transform);
63
- text-decoration: var(--md-sys-typescale-body-small-text-decoration);
64
58
  }
65
59
 
66
60
  .file-picker {
@@ -72,14 +66,6 @@ http-body-text-editor {
72
66
  display: flex;
73
67
  align-items: center;
74
68
  margin-left: 8px;
75
- font-family: var(--md-sys-typescale-label-medium-font-family-name);
76
- font-style: var(--md-sys-typescale-label-medium-font-family-style);
77
- font-weight: var(--md-sys-typescale-label-medium-font-weight);
78
- font-size: var(--md-sys-typescale-label-medium-font-size);
79
- letter-spacing: var(--md-sys-typescale-label-medium-tracking);
80
- line-height: var(--md-sys-typescale-label-medium-height);
81
- text-transform: var(--md-sys-typescale-label-medium-text-transform);
82
- text-decoration: var(--md-sys-typescale-label-medium-text-decoration);
83
69
  }
84
- `;
70
+ `];
85
71
  //# sourceMappingURL=BodyEditor.styles.js.map