@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,341 @@
1
- Object.defineProperty(exports,"__esModule",{value:!0}),exports.GvRatingList=void 0;const e=require("lit"),t=require("lit/directives/repeat");require("./../atoms/gv-relative-time"),require("./gv-identity-picture"),require("./gv-rating"),require("./gv-confirm");const i=require("../styles/skeleton"),s=require("../styles/link"),r=require("../lib/i18n"),n=require("lit/directives/class-map"),a=require("../lib/events");class l extends e.LitElement{static get properties(){return{ratings:{type:Array},user:{type:Object},permissions:{type:Object},required:{type:Boolean,attribute:"required"},_permissions:{type:Object,attribute:!1},_ratings:{type:Array,attribute:!1}}}static get styles(){return[i.skeleton,s.link,e.css`:host{--s:var(--gv-rating-list--s, 18px);--gv-icon--s:var(--s);--gv-rating--s:var(--s);margin:.2rem;box-sizing:border-box}.rating-list{background-color:var(--gv-rating-list--bgc,var(--gv-theme-neutral-color-lightest,#fff))}.rating.parent{border-bottom:1px solid var(--gv-rating-list--bdc,var(--gv-theme-neutral-color,#f5f5f5))}.rating{display:flex;padding:1rem 0}.answer .rating{padding:1rem 0 0 0}.sub-title{color:grey;display:flex;line-height:20px}gv-confirm{align-self:center}.sub-title a.link{text-decoration:underline}gv-identity-picture{margin:0 1rem;height:60px;width:60px}.title{display:flex;line-height:20px}.rating-content,.title b{flex:1}.link-answer{display:inline-block;padding:1rem 0}.link-answer gv-icon{margin-right:.2rem;--gv-icon--s:var(--s)}.delete-answer,.delete-rating,.fake-icon{--gv-icon--s:var(--s);min-width:var(--s);display:inline-flex}.delete-rating{padding-right:1rem}.answer{padding:1rem;margin-top:1rem;background-color:var(--gv-rating-list-answer--bgc,var(--gv-theme-neutral-color-lighter,#fafafa))}.answer-form{display:flex;flex-direction:column}.display-name:after{content:'|';margin:2px}.actions{text-align:right}`]}constructor(){super(),this._ratings=[],this._permissions={update:!1,delete:!1,addAnswer:!1,deleteAnswer:!1}}set ratings(e){Promise.resolve(e).then((e=>{e?(this._skeleton=!1,this._ratings=e):this._skeleton=!0})).catch((()=>{this._skeleton=!1}))}set permissions(e){e&&"object"==typeof e&&(this._permissions=Object.assign({},this._permissions,e))}render(){return e.html`<div class="rating-list">${(0,t.repeat)(this._ratings,(e=>this._render(e)))}</div>`}_editAnswer(e,t){t.stopPropagation(),this._ratings.forEach((e=>e._edit=!1)),e._edit=!0,this.performUpdate()}_getAnswerValue(){const e=this.shadowRoot.querySelector("gv-text");return e?e.value:""}_onAnswer(e){const t=this._getAnswerValue();t.trim().length>0&&(0,a.dispatchCustomEvent)(this,"add-answer",{rating:e,answer:t})}_hasValidAnswer(){return this._getAnswerValue().trim().length>0}_onClose(e){delete e._edit,this.performUpdate()}_renderAnswer(t,i){return e.html`<div class="answer">${this._render(i,t)}</div>`}_renderAnswers(i){return e.html`${i.answers?e.html`${this._canAddAnswer()?e.html`<a class="link link-answer" @click="${this._editAnswer.bind(this,i)}"><gv-icon class="link" shape="communication:chat#5"></gv-icon>${(0,r.i18n)("gv-rating-list.reply")}</a>`:""} ${i._edit?e.html`<div class="answer answer-form"><gv-text rows="4" label="${(0,r.i18n)("gv-rating-list.answerLabel")}" required @input="${this.performUpdate}"></gv-text><div class="actions"><gv-button primary outlined @click="${this._onClose.bind(this,i)}">${(0,r.i18n)("gv-rating-list.cancel")}</gv-button><gv-button primary @click="${this._onAnswer.bind(this,i)}" .disabled="${!this._hasValidAnswer()}">${(0,r.i18n)("gv-rating-list.send")}</gv-button></div></div>`:""}<div>${(0,t.repeat)(i.answers,(e=>this._renderAnswer(i,e)))}</div>`:""}`}_onDelete(e){(0,a.dispatchCustomEvent)(this,"delete",{rating:e})}_onDeleteAnswer(e,t){(0,a.dispatchCustomEvent)(this,"delete-answer",{rating:e,answer:t})}_renderActions(t,i){return i?e.html`${this._canDeleteAnswer()?e.html`<gv-confirm danger icon="home:trash" @gv-confirm:ok="${this._onDeleteAnswer.bind(this,i,t)}" message="${(0,r.i18n)("gv-rating-list.confirmAnswerDelete")}"><gv-icon title="${(0,r.i18n)("gv-rating-list.deleteAnswer")}" class="link delete-answer" shape="home:trash"></gv-icon></gv-confirm>`:""}`:e.html`${this._canDelete(t.id)?e.html`<gv-confirm danger icon="home:trash" @gv-confirm:ok="${this._onDelete.bind(this,t)}" message="${(0,r.i18n)("gv-rating-list.confirmRatingDelete")}"><gv-icon title="${(0,r.i18n)("gv-rating-list.deleteRating")}" class="link delete-rating" shape="home:trash"></gv-icon></gv-confirm>`:e.html`<div class="fake-icon"></div>`}`}_render(t,i){const s={rating:!0,skeleton:this._skeleton,parent:null==i},r=t.author&&t.author.display_name?t.author.display_name:null,a=t.author&&t.author._links&&t.author._links.avatar?t.author._links.avatar:null;return e.html`<div class="${(0,n.classMap)(s)}"><gv-identity-picture rounded .display_name="${r}" .picture="${a}"></gv-identity-picture><div class="rating-content"><div class="title"><b>${t.title?t.title:t.author.display_name}</b>${i?"":e.html`<gv-rating .readonly="${!this._canUpdate(t.id)}" @input="${this._onUpdateRating.bind(this,t)}" value="${t.value}"></gv-rating>`}${this._renderActions(t,i)}</div><div class="sub-title">${this._getDisplayName(t)}<gv-relative-time datetime="${t.date}" noFuture></gv-relative-time></div><p class="comment">${t.comment}</p>${i?"":this._renderAnswers(t)}</div></div>`}_onUpdateRating(e,t){e.value=t.target.value,(0,a.dispatchCustomEvent)(this,"update",{rating:e})}_canAddAnswer(){return!0===this._permissions.addAnswer}_canDeleteAnswer(){return!0===this._permissions.deleteAnswer}_canUpdate(e){return Array.isArray(this._permissions.update)?this._permissions.update.includes(e):!0===this._permissions.update}_canDelete(e){return Array.isArray(this._permissions.delete)?this._permissions.delete.includes(e):!0===this._permissions.delete}_getDisplayName(t){return t.title?e.html`<span class="display-name">${t.author.display_name}</span>`:""}}exports.GvRatingList=l,window.customElements.define("gv-rating-list",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, LitElement, html } from 'lit';
17
+ import { repeat } from 'lit/directives/repeat';
18
+ import './../atoms/gv-relative-time';
19
+ import './gv-identity-picture';
20
+ import './gv-rating';
21
+ import './gv-confirm';
22
+ import { skeleton } from '../styles/skeleton';
23
+ import { link } from '../styles/link';
24
+ import { i18n } from '../lib/i18n';
25
+ import { classMap } from 'lit/directives/class-map';
26
+ import { dispatchCustomEvent } from '../lib/events';
27
+ /**
28
+ * List of ratings with answer form
29
+ *
30
+ * ## Details
31
+ * * has @theme facet
32
+ *
33
+ * ## Attribute `permissions` details
34
+ * * `delete` and `update` properties supports booleans or arrays of rating identifier.
35
+ * * `addAnswer` and `deleteAnswer` only accept booleans.
36
+ *
37
+ * @fires gv-rating-list:add-answer - When user submit answer
38
+ * @fires gv-rating-list:delete - When user delete rating
39
+ * @fires gv-rating-list:delete-answer - When user delete answer
40
+ * @fires gv-rating-list:update - When user update rating
41
+ *
42
+ * @attr {Promise<Array>} ratings - ratings
43
+ * @attr {id, avatar, display_name} user - a current user
44
+ * @attr {Object<{update, delete, addAnswer, deleteAnswer}>} permissions - The permissions
45
+ * @cssprop {Color} [--gv-rating-list--bgc=var(--gv-theme-neutral-color-lightest, #ffffff)] - Background color
46
+ * @cssprop {Color} [--gv-rating-list-answer--bgc=var(--gv-theme-neutral-color-lighter, #fafafa)] - Answer background color
47
+ * @cssprop {Color} [--gv-rating-list--bdc=var(--gv-theme-neutral-color, #f5f5f5)] - Border color
48
+ * @cssprop {Length} [--gv-rating-list--s=18px] - Height and star width
49
+ */
50
+ export class GvRatingList extends LitElement {
51
+ static get properties() {
52
+ return {
53
+ ratings: { type: Array },
54
+ user: { type: Object },
55
+ permissions: { type: Object },
56
+ required: { type: Boolean, attribute: 'required' },
57
+ _permissions: { type: Object, attribute: false },
58
+ _ratings: { type: Array, attribute: false },
59
+ };
60
+ }
61
+ static get styles() {
62
+ return [
63
+ skeleton,
64
+ link,
65
+ // language=CSS
66
+ css `
67
+ :host {
68
+ --s: var(--gv-rating-list--s, 18px);
69
+ --gv-icon--s: var(--s);
70
+ --gv-rating--s: var(--s);
71
+ margin: 0.2rem;
72
+ box-sizing: border-box;
73
+ }
74
+
75
+ .rating-list {
76
+ background-color: var(--gv-rating-list--bgc, var(--gv-theme-neutral-color-lightest, #ffffff));
77
+ }
78
+
79
+ .rating.parent {
80
+ border-bottom: 1px solid var(--gv-rating-list--bdc, var(--gv-theme-neutral-color, #f5f5f5));
81
+ }
82
+
83
+ .rating {
84
+ display: flex;
85
+ padding: 1rem 0;
86
+ }
87
+
88
+ .answer .rating {
89
+ padding: 1rem 0 0 0;
90
+ }
91
+
92
+ .sub-title {
93
+ color: grey;
94
+ display: flex;
95
+ line-height: 20px;
96
+ }
97
+
98
+ gv-confirm {
99
+ align-self: center;
100
+ }
101
+
102
+ .sub-title a.link {
103
+ text-decoration: underline;
104
+ }
105
+
106
+ gv-identity-picture {
107
+ margin: 0 1rem;
108
+ height: 60px;
109
+ width: 60px;
110
+ }
111
+
112
+ .title {
113
+ display: flex;
114
+ line-height: 20px;
115
+ }
116
+
117
+ .title b,
118
+ .rating-content {
119
+ flex: 1;
120
+ }
121
+
122
+ .link-answer {
123
+ display: inline-block;
124
+ padding: 1rem 0;
125
+ }
126
+
127
+ .link-answer gv-icon {
128
+ margin-right: 0.2rem;
129
+ --gv-icon--s: var(--s);
130
+ }
131
+
132
+ .delete-rating,
133
+ .delete-answer,
134
+ .fake-icon {
135
+ --gv-icon--s: var(--s);
136
+ min-width: var(--s);
137
+ display: inline-flex;
138
+ }
139
+
140
+ .delete-rating {
141
+ padding-right: 1rem;
142
+ }
143
+
144
+ .answer {
145
+ padding: 1rem;
146
+ margin-top: 1rem;
147
+ background-color: var(--gv-rating-list-answer--bgc, var(--gv-theme-neutral-color-lighter, #fafafa));
148
+ }
149
+
150
+ .answer-form {
151
+ display: flex;
152
+ flex-direction: column;
153
+ }
154
+
155
+ .display-name:after {
156
+ content: '|';
157
+ margin: 2px;
158
+ }
159
+
160
+ .actions {
161
+ text-align: right;
162
+ }
163
+ `,
164
+ ];
165
+ }
166
+ constructor() {
167
+ super();
168
+ this._ratings = [];
169
+ this._permissions = {
170
+ update: false,
171
+ delete: false,
172
+ addAnswer: false,
173
+ deleteAnswer: false,
174
+ };
175
+ }
176
+ set ratings(value) {
177
+ Promise.resolve(value)
178
+ .then((value) => {
179
+ if (value) {
180
+ this._skeleton = false;
181
+ this._ratings = value;
182
+ }
183
+ else {
184
+ this._skeleton = true;
185
+ }
186
+ })
187
+ .catch(() => {
188
+ this._skeleton = false;
189
+ });
190
+ }
191
+ set permissions(permissions) {
192
+ if (permissions && typeof permissions === 'object') {
193
+ this._permissions = Object.assign({}, this._permissions, permissions);
194
+ }
195
+ }
196
+ render() {
197
+ return html ` <div class="rating-list">${repeat(this._ratings, (rating) => this._render(rating))}</div> `;
198
+ }
199
+ _editAnswer(rating, e) {
200
+ e.stopPropagation();
201
+ this._ratings.forEach((rating) => (rating._edit = false));
202
+ rating._edit = true;
203
+ this.performUpdate();
204
+ }
205
+ _getAnswerValue() {
206
+ const element = this.shadowRoot.querySelector('gv-text');
207
+ if (element) {
208
+ return element.value;
209
+ }
210
+ return '';
211
+ }
212
+ _onAnswer(rating) {
213
+ const answer = this._getAnswerValue();
214
+ if (answer.trim().length > 0) {
215
+ dispatchCustomEvent(this, 'add-answer', { rating, answer });
216
+ }
217
+ }
218
+ _hasValidAnswer() {
219
+ const answer = this._getAnswerValue();
220
+ return answer.trim().length > 0;
221
+ }
222
+ _onClose(rating) {
223
+ delete rating._edit;
224
+ this.performUpdate();
225
+ }
226
+ _renderAnswer(rating, answer) {
227
+ return html `<div class="answer">${this._render(answer, rating)}</div>`;
228
+ }
229
+ _renderAnswers(rating) {
230
+ return html ` ${rating.answers
231
+ ? html ` ${this._canAddAnswer()
232
+ ? html `<a class="link link-answer" @click="${this._editAnswer.bind(this, rating)}">
233
+ <gv-icon class="link" shape="communication:chat#5"></gv-icon> ${i18n('gv-rating-list.reply')}</a
234
+ >`
235
+ : ''}
236
+ ${rating._edit
237
+ ? html `
238
+ <div class="answer answer-form">
239
+ <gv-text rows="4" label="${i18n('gv-rating-list.answerLabel')}" required @input="${this.performUpdate}"></gv-text>
240
+ <div class="actions">
241
+ <gv-button primary outlined @click="${this._onClose.bind(this, rating)}">${i18n('gv-rating-list.cancel')}</gv-button>
242
+ <gv-button primary @click="${this._onAnswer.bind(this, rating)}" .disabled="${!this._hasValidAnswer()}"
243
+ >${i18n('gv-rating-list.send')}</gv-button
244
+ >
245
+ </div>
246
+ </div>
247
+ `
248
+ : ''}
249
+ <div>${repeat(rating.answers, (answer) => this._renderAnswer(rating, answer))}</div>`
250
+ : ''}`;
251
+ }
252
+ _onDelete(rating) {
253
+ dispatchCustomEvent(this, 'delete', { rating });
254
+ }
255
+ _onDeleteAnswer(rating, answer) {
256
+ dispatchCustomEvent(this, 'delete-answer', { rating, answer });
257
+ }
258
+ _renderActions(data, parent) {
259
+ if (parent) {
260
+ return html `
261
+ ${this._canDeleteAnswer()
262
+ ? html `<gv-confirm
263
+ danger
264
+ icon="home:trash"
265
+ @gv-confirm:ok="${this._onDeleteAnswer.bind(this, parent, data)}"
266
+ message="${i18n('gv-rating-list.confirmAnswerDelete')}"
267
+ >
268
+ <gv-icon title="${i18n('gv-rating-list.deleteAnswer')}" class="link delete-answer" shape="home:trash"></gv-icon>
269
+ </gv-confirm>`
270
+ : ''}
271
+ `;
272
+ }
273
+ else {
274
+ return html `
275
+ ${this._canDelete(data.id)
276
+ ? html `<gv-confirm
277
+ danger
278
+ icon="home:trash"
279
+ @gv-confirm:ok="${this._onDelete.bind(this, data)}"
280
+ message="${i18n('gv-rating-list.confirmRatingDelete')}"
281
+ >
282
+ <gv-icon title="${i18n('gv-rating-list.deleteRating')}" class="link delete-rating" shape="home:trash"></gv-icon>
283
+ </gv-confirm>`
284
+ : html `<div class="fake-icon"></div>`}
285
+ `;
286
+ }
287
+ }
288
+ _render(data, parent) {
289
+ const classes = { rating: true, skeleton: this._skeleton, parent: parent == null };
290
+ const displayName = data.author && data.author.display_name ? data.author.display_name : null;
291
+ const picture = data.author && data.author._links && data.author._links.avatar ? data.author._links.avatar : null;
292
+ return html `
293
+ <div class="${classMap(classes)}">
294
+ <gv-identity-picture rounded .display_name="${displayName}" .picture="${picture}"></gv-identity-picture>
295
+ <div class="rating-content">
296
+ <div class="title">
297
+ <b>${data.title ? data.title : data.author.display_name}</b>${parent
298
+ ? ''
299
+ : html `<gv-rating
300
+ .readonly="${!this._canUpdate(data.id)}"
301
+ @input="${this._onUpdateRating.bind(this, data)}"
302
+ value="${data.value}"
303
+ ></gv-rating>`}${this._renderActions(data, parent)}
304
+ </div>
305
+ <div class="sub-title">${this._getDisplayName(data)}<gv-relative-time datetime="${data.date}" noFuture></gv-relative-time></div>
306
+ <p class="comment">${data.comment}</p>
307
+ ${parent ? '' : this._renderAnswers(data)}
308
+ </div>
309
+ </div>
310
+ `;
311
+ }
312
+ _onUpdateRating(rating, e) {
313
+ rating.value = e.target.value;
314
+ dispatchCustomEvent(this, 'update', { rating });
315
+ }
316
+ _canAddAnswer() {
317
+ return this._permissions.addAnswer === true;
318
+ }
319
+ _canDeleteAnswer() {
320
+ return this._permissions.deleteAnswer === true;
321
+ }
322
+ _canUpdate(ratingId) {
323
+ if (Array.isArray(this._permissions.update)) {
324
+ return this._permissions.update.includes(ratingId);
325
+ }
326
+ return this._permissions.update === true;
327
+ }
328
+ _canDelete(ratingId) {
329
+ if (Array.isArray(this._permissions.delete)) {
330
+ return this._permissions.delete.includes(ratingId);
331
+ }
332
+ return this._permissions.delete === true;
333
+ }
334
+ _getDisplayName(data) {
335
+ if (data.title) {
336
+ return html `<span class="display-name">${data.author.display_name}</span>`;
337
+ }
338
+ return '';
339
+ }
340
+ }
341
+ window.customElements.define('gv-rating-list', GvRatingList);
@@ -1 +1,234 @@
1
- Object.defineProperty(exports,"__esModule",{value:!0}),exports.GvRating=void 0;const t=require("lit"),e=require("lit/directives/repeat");require("../atoms/gv-icon");const i=require("../styles/skeleton"),s=require("lit/directives/class-map"),n=require("../lib/i18n");class r extends t.LitElement{static get properties(){return{value:{type:Number,reflect:!0},count:{type:String},skeleton:{type:Boolean},readonly:{type:Boolean},_candidate:{type:Number,attribute:!1},withDescription:{type:Boolean,attribute:"with-description"}}}static get styles(){return[t.css`:host{--gv-icon--c:var(--gv-rating--c, var(--gv-theme-color, #5a7684));--size:var(--gv-rating--s, 13px);--gv-icon--s:var(--size);font-size:var(--gv-theme-font-size-m,14px);cursor:default}.content,.rate{justify-content:space-evenly;display:inline-flex;align-items:flex-end;vertical-align:middle;height:100%}.info-title{font-size:var(--gv-theme-font-size-m,14px);line-height:16px;align-self:center;min-width:35px;text-align:center}.info-subtitle{font-size:var(--gv-theme-font-size-xs,10px);line-height:10px;opacity:.5;text-align:center}.icon{display:inline-flex;align-self:center;margin-right:calc(var(--size)/ 4);align-items:center}.edit{cursor:pointer}.edit gv-icon:hover{transform:translateY(-.5px)}gv-input{flex:1}.icon{min-height:30px}.description{min-width:100px;line-height:calc(var(--size) + 4px);margin:auto 4px}`,i.skeleton]}constructor(){super(),this.value=0,this.count=0,this.readonly=!1,this._candidate=-1,this.isSelected=!1}_getTitle(){return`${this._getAverage()}/5`}_onMouseEnter(t){if(this._candidate=t+1,this.withDescription)switch(this._candidate){case 1:this.description=(0,n.i18n)("gv-rating.description-1");break;case 2:this.description=(0,n.i18n)("gv-rating.description-2");break;case 3:this.description=(0,n.i18n)("gv-rating.description-3");break;case 4:this.description=(0,n.i18n)("gv-rating.description-4");break;case 5:this.description=(0,n.i18n)("gv-rating.description-5")}}_onMouseOut(){this._candidate=-1,this.withDescription&&!this.isSelected&&(this.description=null)}_onClick(t){this._candidate=-1,this.isSelected=!0,this.value=t+1,this.dispatchEvent(new Event("input"),{bubbles:!0,cancelable:!0})}_getAverage(){const t=parseFloat(this.value);return t>=0&&t<=5?t:0}_renderStar(e,i){return this.readonly?t.html`<gv-icon shape="general:${e}"></gv-icon>`:t.html`<gv-icon @mouseenter="${this._onMouseEnter.bind(this,i)}" @click="${this._onClick.bind(this,i)}" shape="general:${e}"></gv-icon>`}render(){const i=this._getAverage();let n=1*i;this.readonly||(n=this._candidate>-1?this._candidate:i);const r=[];for(let t=1;t<=5;t+=1)n>=t?r.push("star"):n>=t-.7?r.push("half-star"):r.push("no-star");return t.html`<div class="${(0,s.classMap)({skeleton:this.skeleton,edit:!this.readonly,content:!0})}"><div class="${(0,s.classMap)({content:!0})}"><div class="${(0,s.classMap)({rate:!0})}"><div class="icon" title="${this._getTitle()}">${this.withDescription?t.html`<div class="description">${this.description}</div>`:""} ${(0,e.repeat)(r,(t=>t),((e,i)=>t.html`${this._renderStar(e,i)}`))}</div>${this.count?t.html`<div><div class="info-title">${this.count||""}</div><div class="info-subtitle">${this._getCountTitle()}</div></div>`:""}</div></div></div>`}firstUpdated(){this.readonly||this.shadowRoot.querySelector(".edit").addEventListener("mouseout",this._onMouseOut.bind(this))}_getCountTitle(){return this.count?this.count>1?(0,n.i18n)("gv-rating.notes"):(0,n.i18n)("gv-rating.note"):""}}exports.GvRating=r,window.customElements.define("gv-rating",r);
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, LitElement, html } from 'lit';
17
+ import { repeat } from 'lit/directives/repeat';
18
+ import '../atoms/gv-icon';
19
+ import { skeleton } from '../styles/skeleton';
20
+ import { classMap } from 'lit/directives/class-map';
21
+ import { i18n } from '../lib/i18n';
22
+ const MAX_RATE = 5;
23
+ /**
24
+ * Rating component
25
+ *
26
+ * ## Details
27
+ * * has @theme facet
28
+ *
29
+ * @attr {Length} value - average of ratings between 1 and 5
30
+ * @attr {String} count - total count for the average
31
+ * @attr {Boolean} skeleton - skeleton mode
32
+ * @attr {Boolean} readonly - readonly mode
33
+ * @attr {Boolean} with-description - if true, show rate description on hover
34
+ *
35
+ * @cssprop {Color} [--gv-rating--c=var(--gv-theme-color, #5a7684)] - Color
36
+ * @cssprop {Length} [--gv-rating--s=13px] - Size
37
+ */
38
+ export class GvRating extends LitElement {
39
+ static get properties() {
40
+ return {
41
+ value: { type: Number, reflect: true },
42
+ count: { type: String },
43
+ skeleton: { type: Boolean },
44
+ readonly: { type: Boolean },
45
+ _candidate: { type: Number, attribute: false },
46
+ withDescription: { type: Boolean, attribute: 'with-description' },
47
+ };
48
+ }
49
+ static get styles() {
50
+ return [
51
+ // language=CSS
52
+ css `
53
+ :host {
54
+ --gv-icon--c: var(--gv-rating--c, var(--gv-theme-color, #5a7684));
55
+ --size: var(--gv-rating--s, 13px);
56
+ --gv-icon--s: var(--size);
57
+
58
+ font-size: var(--gv-theme-font-size-m, 14px);
59
+ cursor: default;
60
+ }
61
+
62
+ .content,
63
+ .rate {
64
+ justify-content: space-evenly;
65
+ display: inline-flex;
66
+ align-items: flex-end;
67
+ vertical-align: middle;
68
+ height: 100%;
69
+ }
70
+
71
+ .info-title {
72
+ font-size: var(--gv-theme-font-size-m, 14px);
73
+ line-height: 16px;
74
+ align-self: center;
75
+ min-width: 35px;
76
+ text-align: center;
77
+ }
78
+
79
+ .info-subtitle {
80
+ font-size: var(--gv-theme-font-size-xs, 10px);
81
+ line-height: 10px;
82
+ opacity: 0.5;
83
+ text-align: center;
84
+ }
85
+
86
+ .icon {
87
+ display: inline-flex;
88
+ align-self: center;
89
+ margin-right: calc(var(--size) / 4);
90
+ align-items: center;
91
+ }
92
+
93
+ .edit {
94
+ cursor: pointer;
95
+ }
96
+
97
+ .edit gv-icon:hover {
98
+ transform: translateY(-0.5px);
99
+ }
100
+
101
+ gv-input {
102
+ flex: 1;
103
+ }
104
+
105
+ .icon {
106
+ min-height: 30px;
107
+ }
108
+
109
+ .description {
110
+ min-width: 100px;
111
+ line-height: calc(var(--size) + 4px);
112
+ margin: auto 4px;
113
+ }
114
+ `,
115
+ skeleton,
116
+ ];
117
+ }
118
+ constructor() {
119
+ super();
120
+ this.value = 0;
121
+ this.count = 0;
122
+ this.readonly = false;
123
+ this._candidate = -1;
124
+ this.isSelected = false;
125
+ }
126
+ _getTitle() {
127
+ return `${this._getAverage()}/${MAX_RATE}`;
128
+ }
129
+ _onMouseEnter(index) {
130
+ this._candidate = index + 1;
131
+ if (this.withDescription) {
132
+ switch (this._candidate) {
133
+ case 1:
134
+ this.description = i18n('gv-rating.description-1');
135
+ break;
136
+ case 2:
137
+ this.description = i18n('gv-rating.description-2');
138
+ break;
139
+ case 3:
140
+ this.description = i18n('gv-rating.description-3');
141
+ break;
142
+ case 4:
143
+ this.description = i18n('gv-rating.description-4');
144
+ break;
145
+ case 5:
146
+ this.description = i18n('gv-rating.description-5');
147
+ break;
148
+ }
149
+ }
150
+ }
151
+ _onMouseOut() {
152
+ this._candidate = -1;
153
+ if (this.withDescription && !this.isSelected) {
154
+ this.description = null;
155
+ }
156
+ }
157
+ _onClick(index) {
158
+ this._candidate = -1;
159
+ this.isSelected = true;
160
+ this.value = index + 1;
161
+ this.dispatchEvent(new Event('input'), { bubbles: true, cancelable: true });
162
+ }
163
+ _getAverage() {
164
+ const _value = parseFloat(this.value);
165
+ if (_value >= 0 && _value <= MAX_RATE) {
166
+ return _value;
167
+ }
168
+ return 0;
169
+ }
170
+ _renderStar(star, index) {
171
+ if (this.readonly) {
172
+ return html `<gv-icon shape="general:${star}"></gv-icon>`;
173
+ }
174
+ else {
175
+ return html `<gv-icon
176
+ @mouseenter=${this._onMouseEnter.bind(this, index)}
177
+ @click=${this._onClick.bind(this, index)}
178
+ shape="general:${star}"
179
+ ></gv-icon>`;
180
+ }
181
+ }
182
+ render() {
183
+ const average = this._getAverage();
184
+ let trunc = average * 1;
185
+ if (!this.readonly) {
186
+ trunc = this._candidate > -1 ? this._candidate : average;
187
+ }
188
+ const stars = [];
189
+ for (let star = 1; star <= MAX_RATE; star += 1) {
190
+ if (trunc >= star) {
191
+ stars.push('star');
192
+ }
193
+ else if (trunc >= star - 0.7) {
194
+ stars.push('half-star');
195
+ }
196
+ else {
197
+ stars.push('no-star');
198
+ }
199
+ }
200
+ return html `
201
+ <div class="${classMap({ skeleton: this.skeleton, edit: !this.readonly, content: true })}">
202
+ <div class="${classMap({ content: true })}">
203
+ <div class="${classMap({ rate: true })}">
204
+ <div class="icon" title="${this._getTitle()}">
205
+ ${this.withDescription ? html `<div class="description">${this.description}</div>` : ''}
206
+ ${repeat(stars, (star) => star, (star, index) => html ` ${this._renderStar(star, index)} `)}
207
+ </div>
208
+ ${this.count
209
+ ? html `<div>
210
+ <div class="info-title">${this.count || ''}</div>
211
+ <div class="info-subtitle">${this._getCountTitle()}</div>
212
+ </div>`
213
+ : ''}
214
+ </div>
215
+ </div>
216
+ </div>
217
+ `;
218
+ }
219
+ firstUpdated() {
220
+ if (!this.readonly) {
221
+ this.shadowRoot.querySelector('.edit').addEventListener('mouseout', this._onMouseOut.bind(this));
222
+ }
223
+ }
224
+ _getCountTitle() {
225
+ if (this.count) {
226
+ if (this.count > 1) {
227
+ return i18n('gv-rating.notes');
228
+ }
229
+ return i18n('gv-rating.note');
230
+ }
231
+ return '';
232
+ }
233
+ }
234
+ window.customElements.define('gv-rating', GvRating);
@@ -1 +1,42 @@
1
- Object.defineProperty(exports,"__esModule",{value:!0}),exports.GvRowExpandable=void 0;const e=require("lit"),r=require("./gv-expandable");class o extends r.GvExpandable{constructor(){super(),this.icon="general:other#2",this.iconOpened="general:other#2",this.clickable=!0}static get styles(){return[...super.styles,e.css`.box:hover{background-color:var(--gv-theme-neutral-color,#f5f5f5)}`]}}exports.GvRowExpandable=o,window.customElements.define("gv-row-expandable",o);
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 } from 'lit';
17
+ import { GvExpandable } from './gv-expandable';
18
+ /**
19
+ * Expandable row
20
+ * @extends GvExpandable
21
+ *
22
+ */
23
+ export class GvRowExpandable extends GvExpandable {
24
+ constructor() {
25
+ super();
26
+ this.icon = 'general:other#2';
27
+ this.iconOpened = 'general:other#2';
28
+ this.clickable = true;
29
+ }
30
+ static get styles() {
31
+ return [
32
+ ...super.styles,
33
+ // language=CSS
34
+ css `
35
+ .box:hover {
36
+ background-color: var(--gv-theme-neutral-color, #f5f5f5);
37
+ }
38
+ `,
39
+ ];
40
+ }
41
+ }
42
+ window.customElements.define('gv-row-expandable', GvRowExpandable);