@operato/data-grist 2.0.0-alpha.7 → 2.0.0-alpha.80

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 (267) hide show
  1. package/CHANGELOG.md +297 -0
  2. package/demo/data-grist-test.html +25 -14
  3. package/demo/index.html +25 -14
  4. package/demo/report-test.html +13 -2
  5. package/dist/src/accumulator/accumulator.js +4 -4
  6. package/dist/src/accumulator/accumulator.js.map +1 -1
  7. package/dist/src/configure/rows-option-builder.js +2 -1
  8. package/dist/src/configure/rows-option-builder.js.map +1 -1
  9. package/dist/src/configure/zero-config.js +1 -0
  10. package/dist/src/configure/zero-config.js.map +1 -1
  11. package/dist/src/data-card/data-card-gutter-menu.d.ts +1 -1
  12. package/dist/src/data-card/data-card-gutter-menu.js +5 -5
  13. package/dist/src/data-card/data-card-gutter-menu.js.map +1 -1
  14. package/dist/src/data-card/data-card.d.ts +2 -2
  15. package/dist/src/data-card/data-card.js +3 -3
  16. package/dist/src/data-card/data-card.js.map +1 -1
  17. package/dist/src/data-card/event-handlers/record-card-click-handler.js +1 -1
  18. package/dist/src/data-card/event-handlers/record-card-click-handler.js.map +1 -1
  19. package/dist/src/data-card/record-card.d.ts +2 -2
  20. package/dist/src/data-card/record-card.js +26 -26
  21. package/dist/src/data-card/record-card.js.map +1 -1
  22. package/dist/src/data-grid/data-grid-accum-field.js +8 -3
  23. package/dist/src/data-grid/data-grid-accum-field.js.map +1 -1
  24. package/dist/src/data-grid/data-grid-body.d.ts +3 -3
  25. package/dist/src/data-grid/data-grid-body.js +9 -4
  26. package/dist/src/data-grid/data-grid-body.js.map +1 -1
  27. package/dist/src/data-grid/data-grid-field.d.ts +1 -1
  28. package/dist/src/data-grid/data-grid-field.js +2 -2
  29. package/dist/src/data-grid/data-grid-field.js.map +1 -1
  30. package/dist/src/data-grid/data-grid-footer.d.ts +2 -2
  31. package/dist/src/data-grid/data-grid-footer.js +17 -9
  32. package/dist/src/data-grid/data-grid-footer.js.map +1 -1
  33. package/dist/src/data-grid/data-grid-header.d.ts +1 -1
  34. package/dist/src/data-grid/data-grid-header.js +37 -37
  35. package/dist/src/data-grid/data-grid-header.js.map +1 -1
  36. package/dist/src/data-grid/data-grid.d.ts +1 -1
  37. package/dist/src/data-grid/data-grid.js +1 -1
  38. package/dist/src/data-grid/data-grid.js.map +1 -1
  39. package/dist/src/data-grist.d.ts +226 -4
  40. package/dist/src/data-grist.js +217 -25
  41. package/dist/src/data-grist.js.map +1 -1
  42. package/dist/src/data-list/data-list-gutter.js +12 -0
  43. package/dist/src/data-list/data-list-gutter.js.map +1 -1
  44. package/dist/src/data-list/data-list.d.ts +2 -2
  45. package/dist/src/data-list/data-list.js +3 -3
  46. package/dist/src/data-list/data-list.js.map +1 -1
  47. package/dist/src/data-list/event-handlers/record-partial-click-handler.js +1 -1
  48. package/dist/src/data-list/event-handlers/record-partial-click-handler.js.map +1 -1
  49. package/dist/src/data-list/record-partial.d.ts +2 -2
  50. package/dist/src/data-list/record-partial.js +20 -18
  51. package/dist/src/data-list/record-partial.js.map +1 -1
  52. package/dist/src/data-manipulator.d.ts +6 -6
  53. package/dist/src/data-manipulator.js +44 -29
  54. package/dist/src/data-manipulator.js.map +1 -1
  55. package/dist/src/data-report/data-report-body.d.ts +1 -1
  56. package/dist/src/data-report/data-report-component.d.ts +1 -1
  57. package/dist/src/data-report.d.ts +1 -1
  58. package/dist/src/editors/ox-grist-editor-checkbox.d.ts +3 -2
  59. package/dist/src/editors/ox-grist-editor-checkbox.js +9 -2
  60. package/dist/src/editors/ox-grist-editor-checkbox.js.map +1 -1
  61. package/dist/src/editors/ox-grist-editor-color.d.ts +1 -1
  62. package/dist/src/editors/ox-grist-editor-date.d.ts +1 -1
  63. package/dist/src/editors/ox-grist-editor-datetime.d.ts +2 -2
  64. package/dist/src/editors/ox-grist-editor-datetime.js +1 -2
  65. package/dist/src/editors/ox-grist-editor-datetime.js.map +1 -1
  66. package/dist/src/editors/ox-grist-editor-email.d.ts +1 -1
  67. package/dist/src/editors/ox-grist-editor-file.d.ts +3 -2
  68. package/dist/src/editors/ox-grist-editor-file.js +8 -2
  69. package/dist/src/editors/ox-grist-editor-file.js.map +1 -1
  70. package/dist/src/editors/ox-grist-editor-image.d.ts +2 -2
  71. package/dist/src/editors/ox-grist-editor-image.js +8 -8
  72. package/dist/src/editors/ox-grist-editor-image.js.map +1 -1
  73. package/dist/src/editors/ox-grist-editor-month.d.ts +1 -1
  74. package/dist/src/editors/ox-grist-editor-multiple-select.d.ts +1 -1
  75. package/dist/src/editors/ox-grist-editor-number.d.ts +3 -2
  76. package/dist/src/editors/ox-grist-editor-number.js +10 -9
  77. package/dist/src/editors/ox-grist-editor-number.js.map +1 -1
  78. package/dist/src/editors/ox-grist-editor-password.d.ts +1 -1
  79. package/dist/src/editors/ox-grist-editor-select.d.ts +1 -1
  80. package/dist/src/editors/ox-grist-editor-tel.d.ts +1 -1
  81. package/dist/src/editors/ox-grist-editor-text.d.ts +2 -1
  82. package/dist/src/editors/ox-grist-editor-text.js +3 -0
  83. package/dist/src/editors/ox-grist-editor-text.js.map +1 -1
  84. package/dist/src/editors/ox-grist-editor-textarea.d.ts +2 -1
  85. package/dist/src/editors/ox-grist-editor-textarea.js +3 -0
  86. package/dist/src/editors/ox-grist-editor-textarea.js.map +1 -1
  87. package/dist/src/editors/ox-grist-editor-time.d.ts +1 -1
  88. package/dist/src/editors/ox-grist-editor-tree.d.ts +1 -1
  89. package/dist/src/editors/ox-grist-editor-week.d.ts +1 -1
  90. package/dist/src/editors/ox-grist-editor.d.ts +4 -4
  91. package/dist/src/editors/ox-grist-editor.js +14 -12
  92. package/dist/src/editors/ox-grist-editor.js.map +1 -1
  93. package/dist/src/editors/ox-input-tree.d.ts +1 -1
  94. package/dist/src/empty-note.d.ts +2 -2
  95. package/dist/src/empty-note.js +3 -3
  96. package/dist/src/empty-note.js.map +1 -1
  97. package/dist/src/filters/filter-range-date.js +12 -1
  98. package/dist/src/filters/filter-range-date.js.map +1 -1
  99. package/dist/src/filters/filters-form.d.ts +1 -0
  100. package/dist/src/filters/filters-form.js +41 -23
  101. package/dist/src/filters/filters-form.js.map +1 -1
  102. package/dist/src/gutters/gutter-button.d.ts +1 -1
  103. package/dist/src/gutters/gutter-button.js +3 -3
  104. package/dist/src/gutters/gutter-button.js.map +1 -1
  105. package/dist/src/gutters/gutter-dirty.d.ts +1 -1
  106. package/dist/src/gutters/gutter-dirty.js +5 -5
  107. package/dist/src/gutters/gutter-dirty.js.map +1 -1
  108. package/dist/src/handlers/contextmenu-tree-mutation.js +5 -23
  109. package/dist/src/handlers/contextmenu-tree-mutation.js.map +1 -1
  110. package/dist/src/index.d.ts +0 -1
  111. package/dist/src/index.js +0 -1
  112. package/dist/src/index.js.map +1 -1
  113. package/dist/src/record-view/record-creator.d.ts +2 -2
  114. package/dist/src/record-view/record-creator.js +1 -1
  115. package/dist/src/record-view/record-creator.js.map +1 -1
  116. package/dist/src/record-view/record-view-body.d.ts +3 -3
  117. package/dist/src/record-view/record-view-body.js +4 -4
  118. package/dist/src/record-view/record-view-body.js.map +1 -1
  119. package/dist/src/record-view/record-view.d.ts +2 -2
  120. package/dist/src/record-view/record-view.js +5 -5
  121. package/dist/src/record-view/record-view.js.map +1 -1
  122. package/dist/src/renderers/ox-grist-renderer-progress.d.ts +1 -1
  123. package/dist/src/renderers/ox-grist-renderer-tree.d.ts +1 -1
  124. package/dist/src/renderers/ox-grist-renderer.d.ts +2 -2
  125. package/dist/src/sorters/sorters-control.js +3 -3
  126. package/dist/src/sorters/sorters-control.js.map +1 -1
  127. package/dist/src/types.d.ts +1 -8
  128. package/dist/src/types.js.map +1 -1
  129. package/dist/stories/accumulator.stories.d.ts +1 -1
  130. package/dist/stories/accumulator.stories.js +126 -112
  131. package/dist/stories/accumulator.stories.js.map +1 -1
  132. package/dist/stories/barcode-input-filter.stories.d.ts +1 -1
  133. package/dist/stories/barcode-input-filter.stories.js +80 -72
  134. package/dist/stories/barcode-input-filter.stories.js.map +1 -1
  135. package/dist/stories/default-filters.stories.d.ts +1 -1
  136. package/dist/stories/default-filters.stories.js +80 -72
  137. package/dist/stories/default-filters.stories.js.map +1 -1
  138. package/dist/stories/dynamic-editable.stories.d.ts +1 -1
  139. package/dist/stories/dynamic-editable.stories.js +100 -79
  140. package/dist/stories/dynamic-editable.stories.js.map +1 -1
  141. package/dist/stories/empty-sorters.stories.d.ts +1 -1
  142. package/dist/stories/empty-sorters.stories.js +80 -71
  143. package/dist/stories/empty-sorters.stories.js.map +1 -1
  144. package/dist/stories/explicit-fetch.stories.d.ts +1 -1
  145. package/dist/stories/explicit-fetch.stories.js +81 -72
  146. package/dist/stories/explicit-fetch.stories.js.map +1 -1
  147. package/dist/stories/fixed-column.stories.d.ts +1 -1
  148. package/dist/stories/fixed-column.stories.js +122 -113
  149. package/dist/stories/fixed-column.stories.js.map +1 -1
  150. package/dist/stories/grist-modes.stories.d.ts +1 -1
  151. package/dist/stories/grist-modes.stories.js +155 -125
  152. package/dist/stories/grist-modes.stories.js.map +1 -1
  153. package/dist/stories/group-header.stories.d.ts +1 -1
  154. package/dist/stories/group-header.stories.js +122 -113
  155. package/dist/stories/group-header.stories.js.map +1 -1
  156. package/dist/stories/textarea.stories.d.ts +1 -1
  157. package/dist/stories/textarea.stories.js +113 -104
  158. package/dist/stories/textarea.stories.js.map +1 -1
  159. package/dist/stories/tree-column-with-checkbox.stories.d.ts +1 -1
  160. package/dist/stories/tree-column-with-checkbox.stories.js +126 -117
  161. package/dist/stories/tree-column-with-checkbox.stories.js.map +1 -1
  162. package/dist/stories/tree-column.stories.d.ts +1 -1
  163. package/dist/stories/tree-column.stories.js +126 -117
  164. package/dist/stories/tree-column.stories.js.map +1 -1
  165. package/dist/tsconfig.tsbuildinfo +1 -1
  166. package/docs/default-value/default-value.md +1 -1
  167. package/docs/default-value/value-generator/date-generator.md +2 -2
  168. package/docs/default-value/value-generator/month-date-generator.md +2 -2
  169. package/docs/default-value/value-generator/week-date-generator.md +2 -2
  170. package/docs/default-value/value-generator/year-date-generator.md +2 -2
  171. package/package.json +21 -20
  172. package/src/accumulator/accumulator.ts +4 -4
  173. package/src/configure/rows-option-builder.ts +11 -1
  174. package/src/configure/zero-config.ts +1 -0
  175. package/src/data-card/data-card-gutter-menu.ts +5 -5
  176. package/src/data-card/data-card.ts +3 -3
  177. package/src/data-card/event-handlers/record-card-click-handler.ts +1 -1
  178. package/src/data-card/record-card.ts +30 -32
  179. package/src/data-grid/data-grid-accum-field.ts +8 -3
  180. package/src/data-grid/data-grid-body.ts +10 -5
  181. package/src/data-grid/data-grid-field.ts +1 -1
  182. package/src/data-grid/data-grid-footer.ts +18 -11
  183. package/src/data-grid/data-grid-header.ts +67 -68
  184. package/src/data-grid/data-grid.ts +3 -3
  185. package/src/data-grist.ts +274 -27
  186. package/src/data-list/data-list-gutter.ts +12 -0
  187. package/src/data-list/data-list.ts +3 -3
  188. package/src/data-list/event-handlers/record-partial-click-handler.ts +1 -1
  189. package/src/data-list/record-partial.ts +22 -22
  190. package/src/data-manipulator.ts +52 -31
  191. package/src/editors/ox-grist-editor-checkbox.ts +12 -2
  192. package/src/editors/ox-grist-editor-datetime.ts +1 -2
  193. package/src/editors/ox-grist-editor-file.ts +12 -2
  194. package/src/editors/ox-grist-editor-image.ts +10 -7
  195. package/src/editors/ox-grist-editor-number.ts +11 -9
  196. package/src/editors/ox-grist-editor-text.ts +4 -0
  197. package/src/editors/ox-grist-editor-textarea.ts +4 -0
  198. package/src/editors/ox-grist-editor.ts +14 -10
  199. package/src/empty-note.ts +3 -3
  200. package/src/filters/filter-range-date.ts +16 -1
  201. package/src/filters/filters-form.ts +69 -46
  202. package/src/gutters/gutter-button.ts +3 -3
  203. package/src/gutters/gutter-dirty.ts +5 -5
  204. package/src/handlers/contextmenu-tree-mutation.ts +5 -23
  205. package/src/index.ts +0 -1
  206. package/src/record-view/record-creator.ts +1 -1
  207. package/src/record-view/record-view-body.ts +4 -4
  208. package/src/record-view/record-view.ts +5 -5
  209. package/src/sorters/sorters-control.ts +3 -3
  210. package/src/types.ts +1 -9
  211. package/stories/accumulator.stories.ts +128 -118
  212. package/stories/barcode-input-filter.stories.ts +91 -82
  213. package/stories/default-filters.stories.ts +91 -82
  214. package/stories/dynamic-editable.stories.ts +108 -86
  215. package/stories/empty-sorters.stories.ts +92 -82
  216. package/stories/explicit-fetch.stories.ts +93 -83
  217. package/stories/fixed-column.stories.ts +134 -124
  218. package/stories/grist-modes.stories.ts +167 -141
  219. package/stories/group-header.stories.ts +134 -124
  220. package/stories/textarea.stories.ts +115 -110
  221. package/stories/tree-column-with-checkbox.stories.ts +134 -124
  222. package/stories/tree-column.stories.ts +134 -124
  223. package/themes/grist-theme.css +1 -1
  224. package/dist/src/value-generator/date-generator.d.ts +0 -6
  225. package/dist/src/value-generator/date-generator.js +0 -30
  226. package/dist/src/value-generator/date-generator.js.map +0 -1
  227. package/dist/src/value-generator/hour-time-generator.d.ts +0 -7
  228. package/dist/src/value-generator/hour-time-generator.js +0 -29
  229. package/dist/src/value-generator/hour-time-generator.js.map +0 -1
  230. package/dist/src/value-generator/index.d.ts +0 -1
  231. package/dist/src/value-generator/index.js +0 -2
  232. package/dist/src/value-generator/index.js.map +0 -1
  233. package/dist/src/value-generator/minute-time-generator.d.ts +0 -7
  234. package/dist/src/value-generator/minute-time-generator.js +0 -29
  235. package/dist/src/value-generator/minute-time-generator.js.map +0 -1
  236. package/dist/src/value-generator/month-date-generator.d.ts +0 -7
  237. package/dist/src/value-generator/month-date-generator.js +0 -31
  238. package/dist/src/value-generator/month-date-generator.js.map +0 -1
  239. package/dist/src/value-generator/now-generator.d.ts +0 -4
  240. package/dist/src/value-generator/now-generator.js +0 -8
  241. package/dist/src/value-generator/now-generator.js.map +0 -1
  242. package/dist/src/value-generator/registry.d.ts +0 -11
  243. package/dist/src/value-generator/registry.js +0 -50
  244. package/dist/src/value-generator/registry.js.map +0 -1
  245. package/dist/src/value-generator/time-generator.d.ts +0 -6
  246. package/dist/src/value-generator/time-generator.js +0 -28
  247. package/dist/src/value-generator/time-generator.js.map +0 -1
  248. package/dist/src/value-generator/today-generator.d.ts +0 -4
  249. package/dist/src/value-generator/today-generator.js +0 -8
  250. package/dist/src/value-generator/today-generator.js.map +0 -1
  251. package/dist/src/value-generator/week-date-generator.d.ts +0 -7
  252. package/dist/src/value-generator/week-date-generator.js +0 -29
  253. package/dist/src/value-generator/week-date-generator.js.map +0 -1
  254. package/dist/src/value-generator/year-date-generator.d.ts +0 -7
  255. package/dist/src/value-generator/year-date-generator.js +0 -29
  256. package/dist/src/value-generator/year-date-generator.js.map +0 -1
  257. package/src/value-generator/date-generator.ts +0 -35
  258. package/src/value-generator/hour-time-generator.ts +0 -43
  259. package/src/value-generator/index.ts +0 -1
  260. package/src/value-generator/minute-time-generator.ts +0 -43
  261. package/src/value-generator/month-date-generator.ts +0 -38
  262. package/src/value-generator/now-generator.ts +0 -10
  263. package/src/value-generator/registry.ts +0 -58
  264. package/src/value-generator/time-generator.ts +0 -33
  265. package/src/value-generator/today-generator.ts +0 -10
  266. package/src/value-generator/week-date-generator.ts +0 -40
  267. package/src/value-generator/year-date-generator.ts +0 -36
@@ -1,5 +1,5 @@
1
1
  import '@operato/popup/ox-popup.js'
2
- import '@material/mwc-icon'
2
+ import '@material/web/icon/icon.js'
3
3
 
4
4
  import { css, html, LitElement, PropertyValues, nothing, TemplateResult } from 'lit'
5
5
  import { customElement, property, state } from 'lit/decorators.js'
@@ -62,7 +62,7 @@ export class DataGridHeader extends LitElement {
62
62
  align-self: center;
63
63
  }
64
64
 
65
- span[for-title] mwc-icon {
65
+ span[for-title] md-icon {
66
66
  font-size: var(--grid-record-fontsize);
67
67
  }
68
68
 
@@ -75,11 +75,11 @@ export class DataGridHeader extends LitElement {
75
75
  border: 0;
76
76
  }
77
77
 
78
- span[sorter] mwc-icon {
78
+ span[sorter] md-icon {
79
79
  font-size: var(--grid-header-sorter-size);
80
80
  }
81
81
 
82
- span[filter] > mwc-icon {
82
+ span[filter] > md-icon {
83
83
  font-size: var(--fontsize-default);
84
84
  line-height: 20px;
85
85
  }
@@ -104,7 +104,7 @@ export class DataGridHeader extends LitElement {
104
104
  vertical-align: middle;
105
105
  }
106
106
 
107
- [filter-title] mwc-icon {
107
+ [filter-title] md-icon {
108
108
  opacity: 0.7;
109
109
  color: var(--grid-header-filter-title-icon-color);
110
110
  }
@@ -287,9 +287,6 @@ export class DataGridHeader extends LitElement {
287
287
  }
288
288
 
289
289
  updated(changes: PropertyValues) {
290
- if (changes.has('data')) {
291
- }
292
-
293
290
  if (changes.has('columns')) {
294
291
  this.row2 = this.columns.reduce((row2, column, index) => {
295
292
  if (column.hidden || !column.header?.group) {
@@ -366,12 +363,10 @@ export class DataGridHeader extends LitElement {
366
363
  if (sorters.length > 1) {
367
364
  var rank = sorters.indexOf(sorter) + 1
368
365
  return sorter.desc
369
- ? html` <mwc-icon>keyboard_arrow_down</mwc-icon><sub>${rank}</sub> `
370
- : html` <mwc-icon>keyboard_arrow_up</mwc-icon><sub>${rank}</sub> `
366
+ ? html` <md-icon>keyboard_arrow_down</md-icon><sub>${rank}</sub> `
367
+ : html` <md-icon>keyboard_arrow_up</md-icon><sub>${rank}</sub> `
371
368
  } else {
372
- return sorter.desc
373
- ? html` <mwc-icon>keyboard_arrow_down</mwc-icon> `
374
- : html` <mwc-icon>keyboard_arrow_up</mwc-icon> `
369
+ return sorter.desc ? html` <md-icon>keyboard_arrow_down</md-icon> ` : html` <md-icon>keyboard_arrow_up</md-icon> `
375
370
  }
376
371
  }
377
372
 
@@ -384,7 +379,7 @@ export class DataGridHeader extends LitElement {
384
379
  const renderer = getFilterRenderer(type)[idx]
385
380
 
386
381
  return html`
387
- <mwc-icon
382
+ <md-icon
388
383
  @click=${(e: Event) => {
389
384
  const parent = (e.target as HTMLElement).closest('[column]') as HTMLElement
390
385
  const popup = parent.querySelector('ox-popup, ox-popup-list') as OxPopup | null
@@ -401,63 +396,63 @@ export class DataGridHeader extends LitElement {
401
396
  top
402
397
  })
403
398
  }}
404
- >filter_alt</mwc-icon
399
+ >filter_alt</md-icon
405
400
  >
406
401
 
407
402
  ${!renderer
408
403
  ? html``
409
404
  : type !== 'select'
410
- ? html` <ox-popup
411
- ><div filter-title><mwc-icon>filter_alt</mwc-icon> filter by <strong>${column.name}</strong></div>
412
- ${renderer(column, value, this)}</ox-popup
413
- >`
414
- : filter!.operator === 'in'
415
- ? html`<ox-popup-list
416
- multiple
417
- attr-selected="checked"
418
- .value=${value}
419
- with-search
420
- @select=${(e: CustomEvent) =>
421
- e.target?.dispatchEvent(
422
- new CustomEvent('filter-change', {
423
- bubbles: true,
424
- composed: true,
425
- detail: {
426
- name,
427
- operator: filter!.operator,
428
- value: !e.detail
429
- ? undefined
430
- : e.detail instanceof Array && e.detail.length === 0
431
- ? undefined
432
- : e.detail
433
- }
434
- })
435
- )}
436
- ><div filter-title slot="header">
437
- <mwc-icon>filter_alt</mwc-icon> filter by <strong>${column.name}</strong>
438
- </div>
439
- ${renderer(column, value, this)}</ox-popup-list
440
- >`
441
- : html`<ox-popup-list
442
- .value=${value}
443
- with-search
444
- @select=${(e: CustomEvent) =>
445
- e.target?.dispatchEvent(
446
- new CustomEvent('filter-change', {
447
- bubbles: true,
448
- composed: true,
449
- detail: {
450
- name,
451
- operator: filter!.operator,
452
- value: e.detail ? e.detail : undefined
453
- }
454
- })
455
- )}
456
- ><div filter-title slot="header">
457
- <mwc-icon>filter_alt</mwc-icon> filter by <strong>${column.name}</strong>
458
- </div>
459
- ${renderer(column, value, this)}</ox-popup-list
460
- >`}
405
+ ? html` <ox-popup
406
+ ><div filter-title><md-icon>filter_alt</md-icon> filter by <strong>${column.name}</strong></div>
407
+ ${renderer(column, value, this)}</ox-popup
408
+ >`
409
+ : filter!.operator === 'in'
410
+ ? html`<ox-popup-list
411
+ multiple
412
+ attr-selected="checked"
413
+ .value=${value}
414
+ with-search
415
+ @select=${(e: CustomEvent) =>
416
+ e.target?.dispatchEvent(
417
+ new CustomEvent('filter-change', {
418
+ bubbles: true,
419
+ composed: true,
420
+ detail: {
421
+ name,
422
+ operator: filter!.operator,
423
+ value: !e.detail
424
+ ? undefined
425
+ : e.detail instanceof Array && e.detail.length === 0
426
+ ? undefined
427
+ : e.detail
428
+ }
429
+ })
430
+ )}
431
+ ><div filter-title slot="header">
432
+ <md-icon>filter_alt</md-icon> filter by <strong>${column.name}</strong>
433
+ </div>
434
+ ${renderer(column, value, this)}</ox-popup-list
435
+ >`
436
+ : html`<ox-popup-list
437
+ .value=${value}
438
+ with-search
439
+ @select=${(e: CustomEvent) =>
440
+ e.target?.dispatchEvent(
441
+ new CustomEvent('filter-change', {
442
+ bubbles: true,
443
+ composed: true,
444
+ detail: {
445
+ name,
446
+ operator: filter!.operator,
447
+ value: e.detail ? e.detail : undefined
448
+ }
449
+ })
450
+ )}
451
+ ><div filter-title slot="header">
452
+ <md-icon>filter_alt</md-icon> filter by <strong>${column.name}</strong>
453
+ </div>
454
+ ${renderer(column, value, this)}</ox-popup-list
455
+ >`}
461
456
  `
462
457
  }
463
458
 
@@ -474,11 +469,15 @@ export class DataGridHeader extends LitElement {
474
469
  if (sorter.desc) {
475
470
  sorters.splice(idx, 1)
476
471
  } else {
477
- sorter.desc = true
472
+ sorters.splice(idx, 1, {
473
+ ...sorter,
474
+ desc: true
475
+ })
478
476
  }
479
477
  } else {
480
478
  var sorter = {
481
- name: column.name
479
+ name: column.name,
480
+ desc: false
482
481
  }
483
482
 
484
483
  sorters.push(sorter)
@@ -159,7 +159,7 @@ export class DataGrid extends DataManipulator {
159
159
 
160
160
  if (this.focused && 'row' in this.focused) {
161
161
  var { row = 0, column = 0 } = this.focused
162
- var { records: oldrecords = [] } = changes.get('data')
162
+ var { records: oldrecords = [] } = changes.get('data') || {}
163
163
  var { records: newrecords } = this.data
164
164
 
165
165
  var oldrecord = oldrecords[row]
@@ -172,8 +172,8 @@ export class DataGrid extends DataManipulator {
172
172
  ('id' in oldrecord
173
173
  ? record.id == oldrecord.id
174
174
  : 'name' in oldrecord
175
- ? record.name == oldrecord.name
176
- : false)
175
+ ? record.name == oldrecord.name
176
+ : false)
177
177
  )
178
178
 
179
179
  this.focused = {