@gravitee/ui-components 3.25.3-typescript-50960c3 → 3.25.3-typescript-9d19b68

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 (183) hide show
  1. package/package.json +5 -13
  2. package/src/atoms/gv-autocomplete.js +422 -1
  3. package/src/atoms/gv-button.js +397 -1
  4. package/src/atoms/gv-checkbox.js +178 -1
  5. package/src/atoms/gv-date-picker-calendar.js +812 -1
  6. package/src/atoms/gv-date-picker-cell.js +174 -1
  7. package/src/atoms/gv-date-picker.js +638 -1
  8. package/src/atoms/gv-file-upload.js +348 -1
  9. package/src/atoms/gv-icon.js +93 -1
  10. package/src/atoms/gv-image.js +135 -1
  11. package/src/atoms/gv-input-message.js +78 -1
  12. package/src/atoms/gv-input.js +508 -1
  13. package/src/atoms/gv-link.js +204 -1
  14. package/src/atoms/gv-message.js +133 -1
  15. package/src/atoms/gv-metric.js +112 -1
  16. package/src/atoms/gv-relative-time.js +143 -1
  17. package/src/atoms/gv-select-native.js +363 -1
  18. package/src/atoms/gv-select.js +413 -1
  19. package/src/atoms/gv-spinner.js +54 -1
  20. package/src/atoms/gv-state.js +125 -1
  21. package/src/atoms/gv-switch.js +235 -1
  22. package/src/atoms/gv-tag.js +162 -1
  23. package/src/atoms/gv-text.js +160 -1
  24. package/src/charts/gv-chart-bar.js +101 -1
  25. package/src/charts/gv-chart-gauge.js +92 -1
  26. package/src/charts/gv-chart-histogram.js +78 -1
  27. package/src/charts/gv-chart-line.js +218 -1
  28. package/src/charts/gv-chart-map.js +111 -1
  29. package/src/charts/gv-chart-pie.js +89 -1
  30. package/src/index.js +77 -1
  31. package/src/lib/cron-expression.js +176 -1
  32. package/src/lib/date.js +43 -1
  33. package/src/lib/events.js +26 -1
  34. package/src/lib/http-client-schema-form.js +67 -1
  35. package/src/lib/http.js +237 -1
  36. package/src/lib/i18n.js +93 -1
  37. package/src/lib/item.js +110 -1
  38. package/src/lib/properties.js +171 -1
  39. package/src/lib/schema-form.js +39 -1
  40. package/src/lib/studio.js +144 -1
  41. package/src/lib/style.js +39 -1
  42. package/src/lib/text-format.js +65 -1
  43. package/src/lib/theme.js +60 -1
  44. package/src/lib/utils.js +106 -1
  45. package/src/mixins/chart-element.js +153 -1
  46. package/src/mixins/input-element.js +136 -1
  47. package/src/mixins/item-resource.js +102 -1
  48. package/src/mixins/keyboard-element.js +62 -1
  49. package/src/mixins/update-after-browser.js +30 -1
  50. package/src/mixins/with-resize-observer.js +62 -1
  51. package/src/mixins/with-skeleton-attribute.js +109 -1
  52. package/src/molecules/gv-card-full.js +209 -1
  53. package/src/molecules/gv-card-list.js +101 -1
  54. package/src/molecules/gv-card.js +130 -1
  55. package/src/molecules/gv-category-list.js +56 -1
  56. package/src/molecules/gv-category.js +163 -1
  57. package/src/molecules/gv-code.js +334 -1
  58. package/src/molecules/gv-confirm.js +175 -1
  59. package/src/molecules/gv-cron-editor.js +685 -1
  60. package/src/molecules/gv-dropdown-menu.js +108 -1
  61. package/src/molecules/gv-expandable.js +116 -1
  62. package/src/molecules/gv-expression-language.js +263 -1
  63. package/src/molecules/gv-identity-picture.js +139 -1
  64. package/src/molecules/gv-list.js +214 -1
  65. package/src/molecules/gv-metrics.js +147 -1
  66. package/src/molecules/gv-modal.js +203 -1
  67. package/src/molecules/gv-nav.js +180 -1
  68. package/src/molecules/gv-option.js +230 -1
  69. package/src/molecules/gv-plans.js +400 -1
  70. package/src/molecules/gv-popover.js +323 -1
  71. package/src/molecules/gv-promote.js +203 -1
  72. package/src/molecules/gv-rating-list.js +341 -1
  73. package/src/molecules/gv-rating.js +234 -1
  74. package/src/molecules/gv-row-expandable.js +42 -1
  75. package/src/molecules/gv-row.js +205 -1
  76. package/src/molecules/gv-stats.js +110 -1
  77. package/src/molecules/gv-stepper.js +274 -1
  78. package/src/molecules/gv-table.js +644 -1
  79. package/src/molecules/gv-tree.js +238 -1
  80. package/src/organisms/gv-documentation.js +205 -1
  81. package/src/organisms/gv-header.js +276 -1
  82. package/src/organisms/gv-http-client.js +258 -1
  83. package/src/organisms/gv-menu.js +258 -1
  84. package/src/organisms/gv-newsletter-subscription.js +258 -1
  85. package/src/organisms/gv-pagination.js +179 -1
  86. package/src/organisms/gv-properties.js +860 -1
  87. package/src/organisms/gv-resizable-views.js +371 -1
  88. package/src/organisms/gv-resources.js +496 -1
  89. package/src/organisms/gv-schema-form-array.js +237 -1
  90. package/src/organisms/gv-schema-form-control-object.js +141 -1
  91. package/src/organisms/gv-schema-form-control.js +419 -1
  92. package/src/organisms/gv-schema-form.js +700 -1
  93. package/src/organisms/gv-tabs.js +201 -1
  94. package/src/organisms/gv-user-menu.js +298 -1
  95. package/src/organisms/gv-vertical-menu.js +119 -1
  96. package/src/policy-studio/gv-flow-step.js +443 -1
  97. package/src/policy-studio/gv-flow.js +595 -1
  98. package/src/policy-studio/gv-policy-studio-menu.js +689 -1
  99. package/src/policy-studio/gv-policy-studio.js +1712 -1
  100. package/src/styles/empty.js +35 -1
  101. package/src/styles/input.js +262 -1
  102. package/src/styles/link.js +31 -1
  103. package/src/styles/shapes.js +17 -1
  104. package/src/styles/skeleton.js +52 -1
  105. package/src/styles/zoom.js +39 -1
  106. package/src/theme/gv-theme.js +197 -1
  107. package/wc/gv-autocomplete.js +1 -1
  108. package/wc/gv-button.js +1 -1
  109. package/wc/gv-card-full.js +1 -1
  110. package/wc/gv-card-list.js +1 -1
  111. package/wc/gv-card.js +1 -1
  112. package/wc/gv-category-list.js +1 -1
  113. package/wc/gv-category.js +1 -1
  114. package/wc/gv-chart-bar.js +1 -1
  115. package/wc/gv-chart-gauge.js +1 -1
  116. package/wc/gv-chart-histogram.js +1 -1
  117. package/wc/gv-chart-line.js +1 -1
  118. package/wc/gv-chart-map.js +1 -1
  119. package/wc/gv-chart-pie.js +1 -1
  120. package/wc/gv-checkbox.js +1 -1
  121. package/wc/gv-code.js +1 -1
  122. package/wc/gv-confirm.js +1 -1
  123. package/wc/gv-cron-editor.js +1 -1
  124. package/wc/gv-date-picker-calendar.js +1 -1
  125. package/wc/gv-date-picker-cell.js +1 -1
  126. package/wc/gv-date-picker.js +1 -1
  127. package/wc/gv-documentation.js +1 -1
  128. package/wc/gv-dropdown-menu.js +1 -1
  129. package/wc/gv-expandable.js +1 -1
  130. package/wc/gv-expression-language.js +1 -1
  131. package/wc/gv-file-upload.js +1 -1
  132. package/wc/gv-flow-step.js +1 -1
  133. package/wc/gv-flow.js +1 -1
  134. package/wc/gv-header.js +1 -1
  135. package/wc/gv-http-client.js +1 -1
  136. package/wc/gv-icon.js +1 -1
  137. package/wc/gv-identity-picture.js +1 -1
  138. package/wc/gv-image.js +1 -1
  139. package/wc/gv-input-message.js +1 -1
  140. package/wc/gv-input.js +1 -1
  141. package/wc/gv-link.js +1 -1
  142. package/wc/gv-list.js +1 -1
  143. package/wc/gv-menu.js +1 -1
  144. package/wc/gv-message.js +1 -1
  145. package/wc/gv-metric.js +1 -1
  146. package/wc/gv-metrics.js +1 -1
  147. package/wc/gv-modal.js +1 -1
  148. package/wc/gv-nav.js +1 -1
  149. package/wc/gv-newsletter-subscription.js +1 -1
  150. package/wc/gv-option.js +1 -1
  151. package/wc/gv-pagination.js +1 -1
  152. package/wc/gv-plans.js +1 -1
  153. package/wc/gv-policy-studio-menu.js +1 -1
  154. package/wc/gv-policy-studio.js +1 -1
  155. package/wc/gv-popover.js +1 -1
  156. package/wc/gv-promote.js +1 -1
  157. package/wc/gv-properties.js +1 -1
  158. package/wc/gv-rating-list.js +1 -1
  159. package/wc/gv-rating.js +1 -1
  160. package/wc/gv-relative-time.js +1 -1
  161. package/wc/gv-resizable-views.js +1 -1
  162. package/wc/gv-resources.js +1 -1
  163. package/wc/gv-row-expandable.js +1 -1
  164. package/wc/gv-row.js +1 -1
  165. package/wc/gv-schema-form-array.js +1 -1
  166. package/wc/gv-schema-form-control-object.js +1 -1
  167. package/wc/gv-schema-form-control.js +1 -1
  168. package/wc/gv-schema-form.js +1 -1
  169. package/wc/gv-select-native.js +1 -1
  170. package/wc/gv-select.js +1 -1
  171. package/wc/gv-spinner.js +1 -1
  172. package/wc/gv-state.js +1 -1
  173. package/wc/gv-stats.js +1 -1
  174. package/wc/gv-stepper.js +1 -1
  175. package/wc/gv-switch.js +1 -1
  176. package/wc/gv-table.js +1 -1
  177. package/wc/gv-tabs.js +1 -1
  178. package/wc/gv-tag.js +1 -1
  179. package/wc/gv-text.js +1 -1
  180. package/wc/gv-theme.js +1 -1
  181. package/wc/gv-tree.js +1 -1
  182. package/wc/gv-user-menu.js +1 -1
  183. package/wc/gv-vertical-menu.js +1 -1
@@ -1 +1,237 @@
1
- Object.defineProperty(exports,"__esModule",{value:!0}),exports.GvSchemaFormArray=void 0;const e=require("lit"),t=require("../lib/schema-form"),r=require("../lib/events"),o=require("lit/directives/class-map"),s=require("../styles/skeleton"),i=require("../mixins/update-after-browser");class l extends((0,i.UpdateAfterBrowser)(e.LitElement)){static get properties(){return{schema:{type:Object},value:{type:Array},id:{type:String,reflect:!0},title:{type:String,reflect:!0},description:{type:String},skeleton:{type:Boolean,reflect:!0},errors:{type:Array},readonly:{type:Boolean,reflect:!0}}}constructor(){super(),this.value=[]}_onNew(){const e="object"===this.schema.type?{}:"";this.value=[...this.value,e],(0,r.dispatchCustomEvent)(this,"input",this.value)}_onRemove(e){this.value.splice(e,1,null),this.value=this.value.filter((e=>null!=e)),(0,r.dispatchCustomEvent)(this,"input",this.value)}_renderValue(r,s){const i=this.schema.required,l=this.schema.disabled,a=`${this.id}.${s}`,n={...this.schema,title:null},m=(0,t.canInline)(this.schema),c={form__item:!0,form__item_cards:!m};return e.html`<div class="${(0,o.classMap)(c)}" @mouseleave="${this._onMouseLeave}">${m?"":e.html`<div class="${(0,o.classMap)({"form__item-label":!0,skeleton:this.skeleton})}"><label>${this.schema.title}</label> ${!0!==this.readonly?e.html`<gv-button link small @gv-button:click="${this._onRemove.bind(this,s)}" icon="general:close" title="Remove"></gv-button>`:""}</div>`}<div class="form__item_entry"><gv-schema-form-control .id="${a}" .skeleton="${this.skeleton}" .control="${n}" .value="${r}" ?required="${i}" ?disabled="${l}" ?readonly="${this.readonly}" compact="compact"></gv-schema-form-control>${m?e.html`<gv-button link small @gv-button:click="${this._onRemove.bind(this,s)}" icon="general:close" title="Remove"></gv-button>`:""}</div></div>`}_onMouseLeave(){this.shadowRoot.querySelectorAll("gv-select").forEach((e=>e.close()))}getControls(){return[...Array.from(this.shadowRoot.querySelectorAll("gv-schema-form-control")),...Array.from(this.shadowRoot.querySelectorAll("gv-schema-form-control-array")),...Array.from(this.shadowRoot.querySelectorAll("gv-schema-form-control-object"))]}getControl(e){return this.shadowRoot.querySelector(`[id="${e}"]`)}async getUpdateComplete(){await super.getUpdateComplete(),await Promise.all(this.getControls().map((e=>e.updateComplete)))}shouldUpdate(e){return e.has("errors")&&this.getControls().forEach((e=>{e.errors=this.errors})),super.shouldUpdate(e)}render(){if(null==this.schema)return e.html``;const t=null==this.schema["x-schema-form"]||!1!==this.schema["x-schema-form"].open;return e.html`<gv-expandable class="form__control-array" ?open="${t}"><div slot="summary" class="form__item-group-header"><div class="form__item-group-title"><label><span>${this.title||this.id}</span><span class="form__item-length">(${this.value.length})</span></label> ${this.description?e.html`<div class="description">${this.description}</div>`:""}</div>${!0!==this.readonly?e.html`<gv-button outlined small icon="code:plus" @gv-button:click="${this._onNew}">New ${this.schema.title}</gv-button>`:""}</div><div class="form__item-group" id="${this.id}" slot="details">${null!=this.value&&Array.isArray(this.value)?this.value.map(((e,t)=>this._renderValue(e,t))):""}</div></gv-expandable>`}static get styles(){return[s.skeleton,e.css`.form__item-length{font-size:12px;color:#bfbfbf;margin:0 .2rem}.form__item-group{position:relative;transition:all .3s ease-in-out}.form__item_cards form__item-group:hover{background-color:#efefef}.form__item-group-header{display:flex;flex:1;align-items:center;transition:all .3s ease-in-out;background-color:var(--gv-schema-form--bgc,#fff)}.form__item-group-header label{flex:1;margin:0}.form__item-group-title{display:flex;flex-direction:column;flex:1}.description{opacity:.6;font-size:var(--gv-theme-font-size-s,12px)}.form__item_cards{border:1px solid #d9d9d9;border-radius:4px;margin:.5rem;background-color:#fff;transition:all .3s ease-in-out;z-index:50}.form__item_cards:hover{transform:translateY(-2px);box-shadow:0 10px 20px -10px #bfbfbf;z-index:60}.form__item_entry{display:flex}.form__item_entry gv-schema-form-control{flex:1}.form__item-label{font-style:italic;display:flex;flex-direction:row;border-bottom:1px solid #d9d9d9;padding:.5rem}.form__item-label>label{flex:1}.form__item .form_control-inline>*{margin-left:0}.form__item .form_control-inline>:first-child{margin-left:.5rem}`]}}exports.GvSchemaFormArray=l,window.customElements.define("gv-schema-form-array",l);
1
+ /*
2
+ * Copyright (C) 2015 The Gravitee team (http://gravitee.io)
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { css, html, LitElement } from 'lit';
17
+ import { canInline } from '../lib/schema-form';
18
+ import { dispatchCustomEvent } from '../lib/events';
19
+ import { classMap } from 'lit/directives/class-map';
20
+ import { skeleton } from '../styles/skeleton';
21
+ import { UpdateAfterBrowser } from '../mixins/update-after-browser';
22
+ /**
23
+ * Schema form array component
24
+ *
25
+ */
26
+ export class GvSchemaFormArray extends UpdateAfterBrowser(LitElement) {
27
+ static get properties() {
28
+ return {
29
+ schema: { type: Object },
30
+ value: { type: Array },
31
+ id: { type: String, reflect: true },
32
+ title: { type: String, reflect: true },
33
+ description: { type: String },
34
+ skeleton: { type: Boolean, reflect: true },
35
+ errors: { type: Array },
36
+ readonly: { type: Boolean, reflect: true },
37
+ };
38
+ }
39
+ constructor() {
40
+ super();
41
+ this.value = [];
42
+ }
43
+ _onNew() {
44
+ const newValue = this.schema.type === 'object' ? {} : '';
45
+ this.value = [...this.value, newValue];
46
+ dispatchCustomEvent(this, 'input', this.value);
47
+ }
48
+ _onRemove(index) {
49
+ this.value.splice(index, 1, null);
50
+ this.value = this.value.filter((e) => e != null);
51
+ dispatchCustomEvent(this, 'input', this.value);
52
+ }
53
+ _renderValue(value, index) {
54
+ const isRequired = this.schema.required;
55
+ const isDisabled = this.schema.disabled;
56
+ const id = `${this.id}.${index}`;
57
+ const control = { ...this.schema, title: null };
58
+ const isInline = canInline(this.schema);
59
+ const classes = {
60
+ form__item: true,
61
+ form__item_cards: !isInline,
62
+ };
63
+ return html `<div class="${classMap(classes)}" @mouseleave="${this._onMouseLeave}">
64
+ ${!isInline
65
+ ? html `<div class="${classMap({ 'form__item-label': true, skeleton: this.skeleton })}">
66
+ <label>${this.schema.title}</label>
67
+ ${this.readonly !== true
68
+ ? html `<gv-button
69
+ link
70
+ small
71
+ @gv-button:click="${this._onRemove.bind(this, index)}"
72
+ icon="general:close"
73
+ title="Remove"
74
+ ></gv-button>`
75
+ : ''}
76
+ </div>`
77
+ : ''}
78
+ <div class="form__item_entry">
79
+ <gv-schema-form-control
80
+ .id="${id}"
81
+ .skeleton="${this.skeleton}"
82
+ .control="${control}"
83
+ .value="${value}"
84
+ ?required="${isRequired}"
85
+ ?disabled="${isDisabled}"
86
+ ?readonly="${this.readonly}"
87
+ compact
88
+ ></gv-schema-form-control>
89
+ ${!isInline
90
+ ? ''
91
+ : html `<gv-button
92
+ link
93
+ small
94
+ @gv-button:click="${this._onRemove.bind(this, index)}"
95
+ icon="general:close"
96
+ title="Remove"
97
+ ></gv-button>`}
98
+ </div>
99
+ </div> `;
100
+ }
101
+ _onMouseLeave() {
102
+ const select = this.shadowRoot.querySelectorAll(`gv-select`);
103
+ select.forEach((s) => s.close());
104
+ }
105
+ getControls() {
106
+ return [
107
+ ...Array.from(this.shadowRoot.querySelectorAll('gv-schema-form-control')),
108
+ ...Array.from(this.shadowRoot.querySelectorAll('gv-schema-form-control-array')),
109
+ ...Array.from(this.shadowRoot.querySelectorAll('gv-schema-form-control-object')),
110
+ ];
111
+ }
112
+ getControl(id) {
113
+ return this.shadowRoot.querySelector(`[id="${id}"]`);
114
+ }
115
+ async getUpdateComplete() {
116
+ await super.getUpdateComplete();
117
+ await Promise.all(this.getControls().map((e) => e.updateComplete));
118
+ }
119
+ shouldUpdate(changedProperties) {
120
+ if (changedProperties.has('errors')) {
121
+ this.getControls().forEach((control) => {
122
+ control.errors = this.errors;
123
+ });
124
+ }
125
+ return super.shouldUpdate(changedProperties);
126
+ }
127
+ render() {
128
+ if (this.schema == null) {
129
+ return html ``;
130
+ }
131
+ const open = this.schema['x-schema-form'] == null || this.schema['x-schema-form'].open !== false;
132
+ return html `<gv-expandable class="form__control-array" ?open="${open}">
133
+ <div slot="summary" class="form__item-group-header">
134
+ <div class="form__item-group-title">
135
+ <label><span>${this.title || this.id}</span><span class="form__item-length">(${this.value.length})</span></label>
136
+ ${this.description ? html `<div class="description">${this.description}</div>` : ''}
137
+ </div>
138
+ ${this.readonly !== true
139
+ ? html `<gv-button outlined small icon="code:plus" @gv-button:click="${this._onNew}">New ${this.schema.title}</gv-button>`
140
+ : ''}
141
+ </div>
142
+ <div class="form__item-group" id="${this.id}" slot="details">
143
+ ${this.value != null && Array.isArray(this.value) ? this.value.map((value, index) => this._renderValue(value, index)) : ''}
144
+ </div>
145
+ </gv-expandable>`;
146
+ }
147
+ static get styles() {
148
+ return [
149
+ skeleton,
150
+ // language=CSS
151
+ css `
152
+ .form__item-length {
153
+ font-size: 12px;
154
+ color: #bfbfbf;
155
+ margin: 0 0.2rem;
156
+ }
157
+
158
+ .form__item-group {
159
+ position: relative;
160
+ transition: all 0.3s ease-in-out;
161
+ }
162
+
163
+ .form__item_cards form__item-group:hover {
164
+ background-color: #efefef;
165
+ }
166
+
167
+ .form__item-group-header {
168
+ display: flex;
169
+ flex: 1;
170
+ align-items: center;
171
+ transition: all 0.3s ease-in-out;
172
+ background-color: var(--gv-schema-form--bgc, #ffffff);
173
+ }
174
+
175
+ .form__item-group-header label {
176
+ flex: 1;
177
+ margin: 0;
178
+ }
179
+
180
+ .form__item-group-title {
181
+ display: flex;
182
+ flex-direction: column;
183
+ flex: 1;
184
+ }
185
+
186
+ .description {
187
+ opacity: 0.6;
188
+ font-size: var(--gv-theme-font-size-s, 12px);
189
+ }
190
+
191
+ .form__item_cards {
192
+ border: 1px solid #d9d9d9;
193
+ border-radius: 4px;
194
+ margin: 0.5rem;
195
+ background-color: white;
196
+ transition: all 0.3s ease-in-out;
197
+ z-index: 50;
198
+ }
199
+
200
+ .form__item_cards:hover {
201
+ transform: translateY(-2px);
202
+ box-shadow: 0 10px 20px -10px #bfbfbf;
203
+ z-index: 60;
204
+ }
205
+
206
+ .form__item_entry {
207
+ display: flex;
208
+ }
209
+
210
+ .form__item_entry gv-schema-form-control {
211
+ flex: 1;
212
+ }
213
+
214
+ .form__item-label {
215
+ font-style: italic;
216
+ display: flex;
217
+ flex-direction: row;
218
+ border-bottom: 1px solid #d9d9d9;
219
+ padding: 0.5rem;
220
+ }
221
+
222
+ .form__item-label > label {
223
+ flex: 1;
224
+ }
225
+
226
+ .form__item .form_control-inline > * {
227
+ margin-left: 0;
228
+ }
229
+
230
+ .form__item .form_control-inline > *:first-child {
231
+ margin-left: 0.5rem;
232
+ }
233
+ `,
234
+ ];
235
+ }
236
+ }
237
+ window.customElements.define('gv-schema-form-array', GvSchemaFormArray);
@@ -1 +1,141 @@
1
- Object.defineProperty(exports,"__esModule",{value:!0}),exports.GvSchemaFormControlObject=void 0;const e=require("lit"),t=require("../lib/schema-form"),r=require("lit/directives/class-map"),o=require("../styles/skeleton");require("../molecules/gv-expandable");const s=require("../mixins/update-after-browser");class l extends((0,s.UpdateAfterBrowser)(e.LitElement)){static get properties(){return{schema:{type:Object},value:{type:Object,reflect:!0},id:{type:String,reflect:!0},title:{type:String,reflect:!0},errors:{type:Array},skeleton:{type:Boolean,reflect:!0},readonly:{type:Boolean,reflect:!0},disabled:{type:Boolean,reflect:!0},required:{type:Boolean,reflect:!0},hidden:{type:Boolean,reflect:!0},compact:{type:Boolean}}}constructor(){super(),this.value=[]}_renderPart(t){const r=this.required||this.schema.required&&this.schema.required.includes(t),o=this.disabled||this.schema.disabled&&this.schema.disabled.includes(t),s=null!=this.id?`${this.id}.${t}`:t,l={...this.schema.properties[t]},i=null!=this.value?this.value[t]:null;return e.html`<gv-schema-form-control .id="${s}" .control="${l}" .value="${i}" .skeleton="${this.skeleton}" ?required="${r}" ?disabled="${o}" ?readonly="${this.readonly}" ?hidden="${this.hidden}" class="control" ?compact="${this.compact}"></gv-schema-form-control>`}getControls(){return[...Array.from(this.shadowRoot.querySelectorAll("gv-schema-form-control")),...Array.from(this.shadowRoot.querySelectorAll("gv-schema-form-control-array")),...Array.from(this.shadowRoot.querySelectorAll("gv-schema-form-control-object"))]}getControl(e){return this.shadowRoot.querySelector(`[id="${e}"]`)}async getUpdateComplete(){await super.getUpdateComplete(),await Promise.all(this.getControls().map((e=>e.updateComplete)))}shouldUpdate(e){return e.has("errors")&&this.getControls().forEach((e=>{e.errors=this.errors})),super.shouldUpdate(e)}render(){const o=Object.keys(this.schema.properties),s=(0,t.canGrid)(this.schema),l={"form_control-inline":(0,t.canInline)(this.schema),"form_control-grid":s,"form_control-grid-odd":s&&o.length%2!=0},i={"form__control-group-title":!0,skeleton:this.skeleton},a=o.map((e=>this._renderPart(e)));if(this.title){const t=null==this.schema["x-schema-form"]||!1!==this.schema["x-schema-form"].open;return e.html`<gv-expandable ?open="${t}"><div slot="summary" class="${(0,r.classMap)(i)}" title="${this.title}">${this.title}</div><div slot="details" class="${(0,r.classMap)(l)}">${a}</div></gv-expandable>`}return e.html`<div class="${(0,r.classMap)(l)}">${a}</div>`}static get styles(){return[o.skeleton,e.css`.form__control-group-title{padding:.5rem 0}.form_control-grid,.form_control-inline{display:grid;grid-template-columns:repeat(2,1fr)}.form_control-grid-odd :first-child{grid-column:1/3}.form_control-inline>*{--gv-schema-form-control--m:0 0.2rem 0 0;overflow:auto}.form_control-inline>:last-child{--gv-schema-form-control--m:0 0 0 0.2rem}`]}}exports.GvSchemaFormControlObject=l,window.customElements.define("gv-schema-form-control-object",l);
1
+ /*
2
+ * Copyright (C) 2015 The Gravitee team (http://gravitee.io)
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { css, html, LitElement } from 'lit';
17
+ import { canInline, canGrid } from '../lib/schema-form';
18
+ import { classMap } from 'lit/directives/class-map';
19
+ import { skeleton } from '../styles/skeleton';
20
+ import '../molecules/gv-expandable';
21
+ import { UpdateAfterBrowser } from '../mixins/update-after-browser';
22
+ /**
23
+ * Schema form control object component
24
+ */
25
+ export class GvSchemaFormControlObject extends UpdateAfterBrowser(LitElement) {
26
+ static get properties() {
27
+ return {
28
+ schema: { type: Object },
29
+ value: { type: Object, reflect: true },
30
+ id: { type: String, reflect: true },
31
+ title: { type: String, reflect: true },
32
+ errors: { type: Array },
33
+ skeleton: { type: Boolean, reflect: true },
34
+ readonly: { type: Boolean, reflect: true },
35
+ disabled: { type: Boolean, reflect: true },
36
+ required: { type: Boolean, reflect: true },
37
+ hidden: { type: Boolean, reflect: true },
38
+ compact: { type: Boolean },
39
+ };
40
+ }
41
+ constructor() {
42
+ super();
43
+ this.value = [];
44
+ }
45
+ _renderPart(subKey) {
46
+ const isRequired = this.required || (this.schema.required && this.schema.required.includes(subKey));
47
+ const isDisabled = this.disabled || (this.schema.disabled && this.schema.disabled.includes(subKey));
48
+ const fullKey = this.id != null ? `${this.id}.${subKey}` : subKey;
49
+ const control = { ...this.schema.properties[subKey] };
50
+ const value = this.value != null ? this.value[subKey] : null;
51
+ return html `<gv-schema-form-control
52
+ .id="${fullKey}"
53
+ .control="${control}"
54
+ .value="${value}"
55
+ .skeleton="${this.skeleton}"
56
+ ?required="${isRequired}"
57
+ ?disabled="${isDisabled}"
58
+ ?readonly="${this.readonly}"
59
+ ?hidden="${this.hidden}"
60
+ class="control"
61
+ ?compact="${this.compact}"
62
+ ></gv-schema-form-control>`;
63
+ }
64
+ getControls() {
65
+ return [
66
+ ...Array.from(this.shadowRoot.querySelectorAll('gv-schema-form-control')),
67
+ ...Array.from(this.shadowRoot.querySelectorAll('gv-schema-form-control-array')),
68
+ ...Array.from(this.shadowRoot.querySelectorAll('gv-schema-form-control-object')),
69
+ ];
70
+ }
71
+ getControl(id) {
72
+ return this.shadowRoot.querySelector(`[id="${id}"]`);
73
+ }
74
+ async getUpdateComplete() {
75
+ await super.getUpdateComplete();
76
+ await Promise.all(this.getControls().map((e) => e.updateComplete));
77
+ }
78
+ shouldUpdate(changedProperties) {
79
+ if (changedProperties.has('errors')) {
80
+ this.getControls().forEach((control) => {
81
+ control.errors = this.errors;
82
+ });
83
+ }
84
+ return super.shouldUpdate(changedProperties);
85
+ }
86
+ render() {
87
+ const keys = Object.keys(this.schema.properties);
88
+ const isGrid = canGrid(this.schema);
89
+ const classes = {
90
+ 'form_control-inline': canInline(this.schema),
91
+ 'form_control-grid': isGrid,
92
+ 'form_control-grid-odd': isGrid && keys.length % 2 !== 0,
93
+ };
94
+ const titleClasses = {
95
+ 'form__control-group-title': true,
96
+ skeleton: this.skeleton,
97
+ };
98
+ const details = keys.map((key) => this._renderPart(key));
99
+ if (this.title) {
100
+ const open = this.schema['x-schema-form'] == null || this.schema['x-schema-form'].open !== false;
101
+ return html `<gv-expandable ?open="${open}">
102
+ <div slot="summary" class="${classMap(titleClasses)}" title="${this.title}">${this.title}</div>
103
+ <div slot="details" class="${classMap(classes)}">${details}</div>
104
+ </gv-expandable>`;
105
+ }
106
+ else {
107
+ return html `<div class="${classMap(classes)}">${details}</div>`;
108
+ }
109
+ }
110
+ static get styles() {
111
+ return [
112
+ skeleton,
113
+ // language=CSS
114
+ css `
115
+ .form__control-group-title {
116
+ padding: 0.5rem 0;
117
+ }
118
+
119
+ .form_control-inline,
120
+ .form_control-grid {
121
+ display: grid;
122
+ grid-template-columns: repeat(2, 1fr);
123
+ }
124
+
125
+ .form_control-grid-odd *:first-child {
126
+ grid-column: 1 / 3;
127
+ }
128
+
129
+ .form_control-inline > * {
130
+ --gv-schema-form-control--m: 0 0.2rem 0 0;
131
+ overflow: auto;
132
+ }
133
+
134
+ .form_control-inline > *:last-child {
135
+ --gv-schema-form-control--m: 0 0 0 0.2rem;
136
+ }
137
+ `,
138
+ ];
139
+ }
140
+ }
141
+ window.customElements.define('gv-schema-form-control-object', GvSchemaFormControlObject);