@operato/data-grist 2.0.0-alpha.9 → 2.0.0-alpha.90

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