@neovici/cosmoz-omnitable 8.0.0 → 8.1.0

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.
@@ -281,11 +281,9 @@ export default `<style>
281
281
  .footer {
282
282
  display: flex;
283
283
  align-items: center;
284
- border-top: solid 1px #e8e8e8;
285
284
  background-color: var(--cosmoz-omnitable-footer-bg-color, #f5f5f5);
286
- min-height: 25px;
287
- height: 63px;
288
- margin-bottom: 1px; /* Chrome overflow rendering bug? When only component in a view */
285
+ height: 64px;
286
+ padding: 0 24px;
289
287
  }
290
288
 
291
289
  .footer-controls {
@@ -296,33 +294,43 @@ export default `<style>
296
294
  }
297
295
 
298
296
  .footer-control {
299
- margin-left: 3%;
300
297
  display: flex;
301
298
  align-items: center;
302
299
  }
300
+ .footer-control + .footer-control {
301
+ margin-left: 34px;
302
+ }
303
+ .footer-control::part(input-label) {
304
+ opacity: 0.7;
305
+ }
306
+ .footer-control::part(input-line) {
307
+ margin-top: 1px;
308
+ }
309
+ .footer-control::part(chip) {
310
+ background-color: #CBCFDB;
311
+ }
312
+ .footer-control::part(chip-clear) {
313
+ background-color: #81899B;
314
+ fill: #CBCFDB;
315
+ }
303
316
 
304
317
  .footer-tableStats {
305
318
  display: flex;
306
319
  flex-direction: column;
307
320
  align-items: flex-end;
308
- margin-right: 3%;
309
321
  }
310
322
 
311
323
  .footer-tableStats :first-child {
312
324
  margin-bottom: 5px;
313
325
  }
314
326
 
315
- .footer-control-label {
316
- margin-right: 10px;
317
- }
318
-
319
327
  .item-row-wrapper {
320
328
  display: block;
321
329
  width: 100%;
322
330
  }
323
331
 
324
332
  .itemRow {
325
- border-bottom-color: #e2e2e2;
333
+ border-bottom-color: var(--cosmoz-omnitable-border-color, #e1e2e5);
326
334
  border-bottom-width: 1px;
327
335
  border-bottom-style: var(--cosmoz-omnitable-item-row-border-bottom-style, solid);
328
336
  /* set a min-height for rows so that rows with empty values are visible */
@@ -333,7 +341,7 @@ export default `<style>
333
341
  }
334
342
 
335
343
  .itemRow[selected] {
336
- background-color: rgb(195, 212, 248) !important;
344
+ background-color: var(--cosmoz-omnitable-selection-color, rgb(195, 212, 248)) !important;
337
345
  @apply --cosmoz-omnitable-selected-row;
338
346
  }
339
347
 
@@ -346,7 +354,7 @@ export default `<style>
346
354
  flex-direction: column;
347
355
  padding: 5px 4%;
348
356
  line-height: 1.3em;
349
- border-bottom: solid 1px #e2e2e2;
357
+ border-bottom: solid 1px var(--cosmoz-omnitable-border-color, #e1e2e5);
350
358
  background-color: #fafafa;
351
359
  }
352
360
 
@@ -358,10 +366,10 @@ export default `<style>
358
366
  .groupRow {
359
367
  display: flex;
360
368
  align-items: center;
361
- background-color: #efefef;
362
- font-weight: 400;
363
- color: #48515b;
364
- border-bottom: solid 1px #d6d6d6;
369
+ background-color: #f5f6f9;;
370
+ font-weight: 700;
371
+ color: #101010;
372
+ border-bottom: 1px solid var(--cosmoz-omnitable-border-color, #e1e2e5);
365
373
  }
366
374
 
367
375
  .groupRow.groupRow-folded {
@@ -386,6 +394,17 @@ export default `<style>
386
394
  flex: auto;
387
395
  }
388
396
 
397
+ .groupRow-badge {
398
+ background: #8BE5C6;
399
+ color: #fff;
400
+ line-height: 30px;
401
+ width: 30px;
402
+ text-align: center;
403
+ border-radius: 50%;
404
+ font-size: 13px;
405
+ font-weight: 500;
406
+ }
407
+
389
408
  .rtl {
390
409
  direction: rtl;
391
410
  }
@@ -400,10 +419,12 @@ export default `<style>
400
419
 
401
420
  cosmoz-bottom-bar {
402
421
  background-color: var(--cosmoz-omnitable-bottom-bar-color, #5f5a92);
403
- color: white;
404
422
  overflow: hidden;
405
423
  z-index: auto;
406
424
  }
425
+ cosmoz-bottom-bar::part(bar) {
426
+ padding: 0 24px;
427
+ }
407
428
 
408
429
  cosmoz-bottom-bar::slotted(*) {
409
430
  background-color: #4c4875;
@@ -417,31 +438,6 @@ export default `<style>
417
438
  cursor: not-allowed;
418
439
  }
419
440
 
420
- #dropdownExtra paper-button, #dropdownExtra ::slotted(paper-button) {
421
- display: flex;
422
- flex-direction: row;
423
- align-items: center;
424
- position: relative;
425
- @apply --cosmoz-bottom-bar-menu-item;
426
- }
427
-
428
- #dropdownExtra paper-button:hover, #dropdownExtra ::slotted(paper-button:hover) {
429
- background: #eee;
430
- }
431
-
432
- #dropdownExtra {
433
- padding: 0;
434
- }
435
-
436
- #listboxSizer {
437
- max-height: 0;
438
- padding: 0 !important;
439
- }
440
-
441
- #dropdownExtraButton {
442
- color: var(--cosmoz-bottom-bar-menubutton-color, var(--light-primary-color));
443
- background-color: var(--cosmoz-bottom-bar-menubutton-background-color, var(--dark-primary-color));
444
- }
445
441
 
446
442
  .boolean-cell[editable] {
447
443
  overflow: initial;
@@ -1,12 +1,7 @@
1
1
  /* eslint-disable max-lines */
2
2
  import '@polymer/iron-icons/iron-icons';
3
3
  import '@polymer/iron-icon/iron-icon';
4
- import '@polymer/iron-label/iron-label';
5
- import '@polymer/paper-button/paper-button';
6
- import '@polymer/paper-dropdown-menu/paper-dropdown-menu';
7
4
  import '@polymer/paper-icon-button/paper-icon-button';
8
- import '@polymer/paper-item/paper-item';
9
- import '@polymer/paper-listbox/paper-listbox';
10
5
  import '@polymer/paper-spinner/paper-spinner-lite';
11
6
 
12
7
  import '@neovici/cosmoz-grouped-list';
@@ -32,7 +27,7 @@ import { useOmnitable } from './lib/use-omnitable';
32
27
  import './lib/cosmoz-omnitable-settings';
33
28
  import { saveAsCsvAction } from './lib/save-as-csv-action';
34
29
  import { saveAsXlsxAction } from './lib/save-as-xlsx-action';
35
-
30
+ import { defaultPlacement } from '@neovici/cosmoz-dropdown';
36
31
  /**
37
32
  * @polymer
38
33
  * @customElement
@@ -126,7 +121,7 @@ class Omnitable extends hauntedPolymer(useOmnitable)(mixin({ isEmpty }, translat
126
121
  <cosmoz-omnitable-group-row column="[[ groupOnColumn ]]" item="[[ item.items.0 ]]" selected="[[ selected ]]" folded="[[ folded ]]">
127
122
  </cosmoz-omnitable-group-row>
128
123
  </h3>
129
- <div>[[ item.items.length ]]</div>
124
+ <div class="groupRow-badge">[[ item.items.length ]]</div>
130
125
  <paper-icon-button class="fold" icon="[[ _getFoldIcon(folded) ]]" on-tap="_toggleGroup"></paper-icon-button>
131
126
  </div>
132
127
  </template>
@@ -140,38 +135,40 @@ class Omnitable extends hauntedPolymer(useOmnitable)(mixin({ isEmpty }, translat
140
135
  source="[[ _onCompleteValues(columns, 'groupOn', groupOnColumn) ]]" value="[[ groupOnColumn ]]" limit="1" text-property="title"
141
136
  always-float-label item-height="48" item-limit="8"
142
137
  class="footer-control" on-change="[[ _onCompleteChange('groupOn') ]]" default-index="-1" show-single show-selection
143
- ></cosmoz-autocomplete>
138
+ >
139
+ <svg slot="suffix" viewBox="0 0 24 24" preserveAspectRatio="xMidYMid meet" focusable="false" width="24" fill="currentColor"><path d="M7 10l5 5 5-5z"></path></svg>
140
+ </cosmoz-autocomplete>
144
141
  <cosmoz-autocomplete
145
142
  label="[[ _('Sort on', t) ]] [[ _computeSortDirection(descending, t) ]]" placeholder="[[ _('No sorting', t) ]]"
146
143
  source="[[ _onCompleteValues(columns, 'sortOn', sortOnColumn) ]]" value="[[ sortOnColumn ]]" limit="1" text-property="title"
147
144
  always-float-label item-height="48" item-limit="8"
148
145
  class="footer-control" on-change="[[ _onCompleteChange('sortOn') ]]" default-index="-1" show-single show-selection
149
- ></cosmoz-autocomplete>
146
+ >
147
+ <svg slot="suffix" viewBox="0 0 24 24" preserveAspectRatio="xMidYMid meet" focusable="false" width="24" fill="currentColor"><path d="M7 10l5 5 5-5z"></path></svg>
148
+ </cosmoz-autocomplete>
150
149
  </div>
151
150
  <div class="footer-tableStats">
152
151
  <span>[[ ngettext('{0} group', '{0} groups', groupsCount, t) ]]</span>
153
152
  <span>[[ _renderRowStats(numProcessedItems, totalAvailable, t) ]]</span>
154
153
  </div>
155
154
  <cosmoz-bottom-bar id="bottomBar" class="footer-actionBar" match-parent
156
- on-action="_onAction" active$="[[ !isEmpty(selectedItems.length) ]]" computed-bar-height="{{ computedBarHeight }}">
155
+ on-action="_onAction" active$="[[ !isEmpty(selectedItems.length) ]]">
157
156
  <slot name="info" slot="info">[[ ngettext('{0} selected item', '{0} selected items', selectedItems.length, t) ]]</slot>
158
157
  <slot name="actions" id="actions"></slot>
159
158
  <!-- These slots are needed by cosmoz-bottom-bar
160
159
  as it might change the slot of the actions to distribute them in the menu -->
161
160
  <slot name="bottom-bar-toolbar" slot="bottom-bar-toolbar"></slot>
162
161
  <slot name="bottom-bar-menu" slot="bottom-bar-menu"></slot>
163
- <paper-menu-button id="extraMenu" slot="extra" no-animations
164
- vertical-offset="[[ computedBarHeight ]]" vertical-align="bottom" horizontal-align="right">
165
- <paper-icon-button id="dropdownExtraButton" class="dropdown-trigger" slot="dropdown-trigger" icon="file-download" toggles raised>
166
- </paper-icon-button>
167
- <paper-listbox id="dropdownExtra" class="dropdown-content" slot="dropdown-content">
168
- <span id="listboxSizer"></span>
169
- <paper-button on-click="_saveAsCsvAction">[[ _('Save as CSV', t) ]]</paper-button>
170
- <paper-button on-click="_saveAsXlsxAction">[[ _('Save as XLSX', t) ]]</paper-button>
171
- <slot name="download-menu"></slot>
172
- </paper-listbox>
173
- </paper-menu-button>
174
-
162
+ <cosmoz-dropdown-menu slot="extra" placement="[[ topPlacement ]]">
163
+ <svg slot="button" width="14" height="18" viewBox="0 0 14 18" fill="none" stroke="currentColor" xmlns="http://www.w3.org/2000/svg">
164
+ <path d="M1 8.5L7.00024 14.5L13 8.5" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
165
+ <path d="M13 17L1 17" stroke-width="2" stroke-linecap="round"/>
166
+ <path d="M7 1V13" stroke-width="2" stroke-linecap="round"/>
167
+ </svg>
168
+ <button on-click="_saveAsCsvAction">[[ _('Save as CSV', t) ]]</button>
169
+ <button on-click="_saveAsXlsxAction">[[ _('Save as XLSX', t) ]]</button>
170
+ <slot name="download-menu"></slot>
171
+ </cosmoz-dropdown-menu>
175
172
  </cosmoz-bottom-bar>
176
173
  </div>
177
174
  </div>
@@ -269,7 +266,10 @@ class Omnitable extends hauntedPolymer(useOmnitable)(mixin({ isEmpty }, translat
269
266
  */
270
267
  _allSelected: { type: Boolean },
271
268
  computedBarHeight: { type: Number },
272
- settingsId: { type: String, value: undefined }
269
+ settingsId: { type: String, value: undefined },
270
+ topPlacement: {
271
+ value: ['top-right', ...defaultPlacement]
272
+ }
273
273
  };
274
274
  }
275
275
 
@@ -1,23 +1,13 @@
1
1
  import { html, component, useCallback } from 'haunted';
2
- import { usePosition } from '@neovici/cosmoz-autocomplete/lib/use-position';
3
- import { useFocus } from '@neovici/cosmoz-autocomplete/lib/use-focus';
4
- import { portal } from '@neovici/cosmoz-utils/lib/directives/portal';
5
2
  import { useMeta } from '@neovici/cosmoz-utils/lib/hooks/use-meta';
6
3
  import { checkbox } from '../cosmoz-omnitable-styles';
7
4
  import { nothing } from 'lit-html';
8
5
  import { isEmpty } from '@neovici/cosmoz-utils/lib/template';
9
- const settingsStyles = `
6
+ import { defaultPlacement } from '@neovici/cosmoz-dropdown';
7
+ const placement = ['bottom-right', ...defaultPlacement],
8
+ settingsStyles = `
10
9
  :host {
11
- position: fixed;
12
- top: 0;
13
- left: 0;
14
- z-index: 2;
15
- font-family: var(--paper-font-subhead_-_font-family, initial);
16
- background: #fff;
17
- min-width: 72px;
18
- box-shadow: 0 3px 4px 0 rgb(0 0 0 / 14%), 0 1px 8px 0 rgb(0 0 0 / 12%), 0 3px 3px -2px rgb(0 0 0 / 40%);
19
10
  box-sizing: border-box;
20
- border-radius: 5px;
21
11
  padding: 12px;
22
12
  display: flex;
23
13
  flex-direction: column;
@@ -76,11 +66,8 @@ const settingsStyles = `
76
66
  return isFinite(idx) ? idx : undefined;
77
67
  },
78
68
 
79
- preventDefault = e => e.preventDefault(),
80
-
81
69
  // eslint-disable-next-line max-lines-per-function
82
70
  useSettings = host => {
83
- usePosition({ anchor: host.anchor, host });
84
71
 
85
72
  const
86
73
  { settings, onSettings } = host,
@@ -195,7 +182,7 @@ const settingsStyles = `
195
182
  return [
196
183
  html`
197
184
  <style>${ settingsStyles }</style>
198
- <div class="list">${ settings.map(renderItem(thru)) }</div>
185
+ <div class="list">${ settings?.map(renderItem(thru)) }</div>
199
186
  `,
200
187
  settingsId
201
188
  ? html`<div class="footer">
@@ -206,51 +193,38 @@ const settingsStyles = `
206
193
  ];
207
194
  },
208
195
 
209
- Settings = host => {
210
- const { settings, onSettings, onSave, onReset, collapsed, settingsId, hasChanges, badge, filters } = host,
211
- { active, onFocus, onToggle } = useFocus(host),
212
- anchor = useCallback(() => host.shadowRoot.querySelector('.anchor'), []);
213
-
214
- return html`
215
- <style>
216
- .anchor {
217
- border: none;
218
- padding: 0;
219
- font-size: 0;
220
- vertical-align: bottom;
221
- margin-bottom: 10px;
222
- outline: none;
223
- background: transparent;
224
- cursor: pointer;
225
- position: relative;
226
- }
227
- .anchor * { pointer-events: none; }
228
- .anchor:hover {
229
- background: #eee;
230
- }
231
- .badge {
232
- position: absolute;
233
- top: 1px;
234
- right: -4px;
235
- background-color: var(--cosmoz-omnitable-checkbox-checked-color, var(--primary-color));
236
- width: 8px;
237
- height: 8px;
238
- border-radius: 100%;
239
- }
240
- </style>
241
- <button class="anchor" @focus=${ onFocus } @blur=${ onFocus } @click=${ onToggle } @mousedown=${ preventDefault }>
242
- <svg viewBox="0 0 24 24" width="24"><path d="M10 18h5V5h-5v13zm-6 0h5V5H4v13zM16 5v13h5V5h-5z"></path></svg>
243
- ${ badge ? html`<div class="badge"></div>` : nothing }
244
- </button>
245
- ${ active
246
- ? portal(html`<cosmoz-omnitable-settings-ui
247
- tabindex="-1" .anchor=${ anchor } .settings=${ settings } .onSettings=${ onSettings } .collapsed=${ collapsed }
248
- .settingsId=${ settingsId } .hasChanges=${ hasChanges } .onSave=${ onSave } .onReset=${ onReset }
249
- .filters=${ filters }
250
- @focusin=${ onFocus } @focusout=${ onFocus } data-dropdown>`)
251
- : [] }
252
- `;
253
- };
254
-
196
+ Settings = ({ anchor, settings, onSettings, collapsed, settingsId, hasChanges, onSave, onReset, filters, badge }) => html`
197
+ <style>
198
+ :host {
199
+ display: contents;
200
+ --cosmoz-dropdown-box-shadow: 0 3px 4px 0 rgb(0 0 0 / 14%), 0 1px 8px 0 rgb(0 0 0 / 12%), 0 3px 3px -2px rgb(0 0 0 / 40%);
201
+ }
202
+ cosmoz-dropdown::part(button) {
203
+ --cosmoz-dropdown-button-size: 24px;
204
+ margin-bottom: 10px;
205
+ padding: 0;
206
+ background: transparent;
207
+ }
208
+ cosmoz-dropdown::part(anchor) {
209
+ display: inline-block;
210
+ }
211
+ .badge {
212
+ position: absolute;
213
+ top: 1px;
214
+ right: -4px;
215
+ background-color: var(--cosmoz-omnitable-checkbox-checked-color, var(--primary-color));
216
+ width: 8px;
217
+ height: 8px;
218
+ border-radius: 100%;
219
+ }
220
+ </style>
221
+ <cosmoz-dropdown .render=${ () => html`<cosmoz-omnitable-settings-ui
222
+ .anchor=${ anchor } .settings=${ settings } .onSettings=${ onSettings } .collapsed=${ collapsed }
223
+ .settingsId=${ settingsId } .hasChanges=${ hasChanges } .onSave=${ onSave } .onReset=${ onReset }
224
+ .filters=${ filters }></cosmoz-omnitable-settings-ui>` } .placement=${ placement }>
225
+ <svg viewBox="0 0 24 24" width="24" slot="button"><path d="M10 18h5V5h-5v13zm-6 0h5V5H4v13zM16 5v13h5V5h-5z"></path></svg>
226
+ ${ badge ? html`<div class="badge" slot="button"></div>` : nothing }
227
+ </cosmoz-dropdown>
228
+ `;
255
229
  customElements.define('cosmoz-omnitable-settings', component(Settings));
256
230
  customElements.define('cosmoz-omnitable-settings-ui', component(SettingsUI));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neovici/cosmoz-omnitable",
3
- "version": "8.0.0",
3
+ "version": "8.1.0",
4
4
  "description": "[![Build Status](https://travis-ci.org/Neovici/cosmoz-omnitable.svg?branch=master)](https://travis-ci.org/Neovici/cosmoz-omnitable)",
5
5
  "keywords": [
6
6
  "web-components"
@@ -53,8 +53,9 @@
53
53
  },
54
54
  "dependencies": {
55
55
  "@neovici/cosmoz-autocomplete": "^2.17.1",
56
- "@neovici/cosmoz-bottom-bar": "^4.1.0",
56
+ "@neovici/cosmoz-bottom-bar": "^4.4.0",
57
57
  "@neovici/cosmoz-datetime-input": "^3.0.3",
58
+ "@neovici/cosmoz-dropdown": "^1.5.0",
58
59
  "@neovici/cosmoz-grouped-list": "^3.2.0",
59
60
  "@neovici/cosmoz-i18next": "^3.1.1",
60
61
  "@neovici/cosmoz-page-router": "^6.0.3",
@@ -62,13 +63,9 @@
62
63
  "@neovici/nullxlsx": "^3.0.0",
63
64
  "@polymer/iron-icon": "^3.0.0",
64
65
  "@polymer/iron-icons": "^3.0.0",
65
- "@polymer/iron-label": "^3.0.0",
66
- "@polymer/paper-button": "^3.0.0",
67
66
  "@polymer/paper-dropdown-menu": "^3.2.0",
68
67
  "@polymer/paper-icon-button": "^3.0.0",
69
68
  "@polymer/paper-input": "^3.2.0",
70
- "@polymer/paper-item": "^3.0.0",
71
- "@polymer/paper-listbox": "^3.0.0",
72
69
  "@polymer/paper-spinner": "^3.0.0",
73
70
  "@polymer/polymer": "^3.3.0",
74
71
  "@webcomponents/shadycss": "^1.10.0",
@@ -77,24 +74,26 @@
77
74
  "lit-html": "^1.3.0"
78
75
  },
79
76
  "devDependencies": {
80
- "@commitlint/cli": "^13.0.0",
81
- "@commitlint/config-conventional": "^13.0.0",
77
+ "@commitlint/cli": "^15.0.0",
78
+ "@commitlint/config-conventional": "^15.0.0",
82
79
  "@neovici/cosmoz-viewinfo": "^3.1.3",
83
- "@neovici/eslint-config": "^1.3.2",
80
+ "@neovici/eslint-config": "^1.3.3",
84
81
  "@open-wc/testing": "^2.5.28",
85
82
  "@polymer/iron-component-page": "^4.0.0",
86
83
  "@polymer/iron-demo-helpers": "^3.0.0",
87
84
  "@polymer/iron-test-helpers": "^3.0.0",
85
+ "@polymer/paper-button": "^3.0.1",
86
+ "@polymer/paper-item": "^3.0.1",
87
+ "@polymer/paper-listbox": "^3.0.1",
88
88
  "@polymer/paper-toggle-button": "^3.0.0",
89
89
  "@semantic-release/changelog": "^6.0.0",
90
90
  "@semantic-release/git": "^10.0.0",
91
91
  "@web/dev-server": "^0.1.10",
92
92
  "@web/test-runner": "^0.13.0",
93
93
  "@web/test-runner-selenium": "^0.5.0",
94
- "eslint": "^7.0.0",
95
94
  "husky": "^7.0.0",
96
95
  "semantic-release": "^18.0.0",
97
- "sinon": "^11.0.0",
96
+ "sinon": "^12.0.0",
98
97
  "web-animations-js": "^2.3.2"
99
98
  }
100
99
  }