@operato/data-grist 7.0.21 → 7.0.25

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.
@@ -57,7 +57,7 @@ export class DataGrid extends DataManipulator {
57
57
 
58
58
  div[setting] {
59
59
  position: relative;
60
- z-index: 1;
60
+ z-index: 50;
61
61
  }
62
62
 
63
63
  @media print {
package/src/data-grist.ts CHANGED
@@ -87,7 +87,7 @@ export class DataGrist extends LitElement implements DataConsumer {
87
87
  box-sizing: border-box;
88
88
  background-color: var(--grist-background-color);
89
89
 
90
- z-index: 2;
90
+ z-index: 100;
91
91
  }
92
92
  `
93
93
  ]
@@ -7,19 +7,30 @@ import { customElement, property } from 'lit/decorators.js'
7
7
  import { ZERO_RECORD } from '../configure/zero-config'
8
8
  import { ColumnConfig, GristRecord } from '../types'
9
9
  import { recordViewBodyClickHandler } from './event-handlers/record-view-body-click-handler'
10
- import { recordViewBodyKeydownHandler } from './event-handlers/record-view-body-keydown-handler'
11
10
 
12
11
  @customElement('ox-record-view-body')
13
12
  export class RecordViewBody extends LitElement {
14
13
  static styles = [
15
14
  css`
16
15
  :host {
16
+ display: block;
17
+ font-size: 16px; /* for ios safari */
18
+ place-content: center;
19
+ }
20
+
21
+ div[content] {
17
22
  display: grid;
18
- grid-template-columns: 2fr 3fr 2fr 3fr;
23
+ grid-template-columns: 1fr 2fr;
19
24
  grid-auto-rows: min-content;
20
- grid-gap: var(--record-view-gap);
21
- padding: var(--record-view-padding);
22
- font-size: 16px; /* for ios safari */
25
+ grid-gap: var(--record-view-gap, 16px);
26
+ padding: var(--record-view-padding, 16px);
27
+ box-sizing: border-box;
28
+ }
29
+
30
+ @media screen and (min-width: 601px) {
31
+ ox-grid-field {
32
+ max-width: 300px;
33
+ }
23
34
  }
24
35
 
25
36
  label {
@@ -31,6 +42,7 @@ export class RecordViewBody extends LitElement {
31
42
  font: var(--record-view-label-font);
32
43
  color: var(--record-view-label-color);
33
44
  text-align: right;
45
+ padding-right: var(--spacing-large);
34
46
  }
35
47
 
36
48
  label md-icon {
@@ -65,18 +77,6 @@ export class RecordViewBody extends LitElement {
65
77
  color: var(--record-view-focus-color);
66
78
  font-weight: bold;
67
79
  }
68
-
69
- @media only screen and (max-width: 800px) {
70
- :host {
71
- grid-template-columns: 2fr 3fr;
72
- }
73
- }
74
-
75
- @media (min-width: 1800px) {
76
- :host {
77
- grid-template-columns: 2fr 3fr 2fr 3fr 2fr 3fr;
78
- }
79
- }
80
80
  `
81
81
  ]
82
82
 
@@ -91,37 +91,62 @@ export class RecordViewBody extends LitElement {
91
91
 
92
92
  this.setAttribute('tabindex', '0')
93
93
 
94
- this.renderRoot.addEventListener('keydown', recordViewBodyKeydownHandler.bind(this))
94
+ this.addEventListener('keydown', this._onKeyDown)
95
95
  this.renderRoot.addEventListener('click', recordViewBodyClickHandler.bind(this))
96
96
  }
97
97
 
98
+ disconnectedCallback() {
99
+ super.disconnectedCallback()
100
+ this.removeEventListener('keydown', this._onKeyDown)
101
+ }
102
+
103
+ _onKeyDown(event: KeyboardEvent) {
104
+ if (event.key === 'Tab') {
105
+ const fields = Array.from(this.renderRoot.querySelectorAll('ox-grid-field[tabstop]'))
106
+ const focused = this.renderRoot.querySelector('ox-grid-field[editing]')
107
+ const focusedIndex = fields.findIndex(field => field === focused)
108
+
109
+ let nextIndex = focusedIndex + (event.shiftKey ? -1 : 1)
110
+
111
+ if (nextIndex >= fields.length || nextIndex < 0) {
112
+ return // Let the default behavior happen if it's the last or first element
113
+ }
114
+
115
+ event.preventDefault()
116
+ fields[nextIndex]?.dispatchEvent(new CustomEvent('click', { bubbles: true, composed: true }))
117
+ }
118
+ }
119
+
98
120
  render() {
99
121
  var columns = this.columns.filter(column => !column.hidden && column.type !== 'gutter')
100
122
  var record = this.record
101
123
  var rowIndex = this.rowIndex
102
124
 
103
125
  return html`
104
- ${columns.map(column => {
105
- let { editable, mandatory } = column.record
106
- if (typeof editable === 'function') {
107
- editable = editable.call(this, record[column.name], column, record, rowIndex, this)
108
- }
109
-
110
- let dirtyFields = record['__dirtyfields__'] || {}
111
-
112
- return html`
113
- <label ?editable=${editable}
114
- ><span>${mandatory ? '*' : ''}${this._renderLabel(column)}</span> <md-icon>edit</md-icon></label
115
- >
116
- <ox-grid-field
117
- .rowIndex=${rowIndex}
118
- .column=${column}
119
- .record=${record}
120
- .value=${record[column.name]}
121
- ?dirty=${!!dirtyFields[column.name]}
122
- ></ox-grid-field>
123
- `
124
- })}
126
+ <div content>
127
+ ${columns.map((column, index) => {
128
+ let { editable, mandatory } = column.record
129
+ if (typeof editable === 'function') {
130
+ editable = editable.call(this, record[column.name], column, record, rowIndex, this)
131
+ }
132
+
133
+ let dirtyFields = record['__dirtyfields__'] || {}
134
+
135
+ return html`
136
+ <label ?editable=${editable}
137
+ ><span>${mandatory ? '*' : ''}${this._renderLabel(column)}</span> <md-icon>edit</md-icon></label
138
+ >
139
+ <ox-grid-field
140
+ .rowIndex=${rowIndex}
141
+ .column=${column}
142
+ .record=${record}
143
+ .value=${record[column.name]}
144
+ ?dirty=${!!dirtyFields[column.name]}
145
+ ?tabstop=${!!editable}
146
+ ></ox-grid-field>
147
+ `
148
+ })}
149
+ </div>
125
150
  `
126
151
  }
127
152
 
@@ -209,7 +209,7 @@ const config = {
209
209
  width: 60
210
210
  },
211
211
  {
212
- type: 'string[]',
212
+ type: 'select',
213
213
  name: 'role',
214
214
  label: true,
215
215
  header: 'role',