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

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 +358 -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 +47 -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 +55 -127
  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 +41 -79
  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 +41 -79
  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 +61 -86
  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 +41 -78
  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 +42 -79
  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 +45 -127
  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 +403 -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 +74 -140
  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 +45 -127
  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 +39 -121
  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 +49 -136
  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 +49 -136
  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 +47 -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 +54 -129
  218. package/stories/barcode-input-filter.stories.ts +53 -89
  219. package/stories/default-filters.stories.ts +53 -89
  220. package/stories/dynamic-editable.stories.ts +68 -92
  221. package/stories/empty-sorters.stories.ts +53 -89
  222. package/stories/explicit-fetch.stories.ts +54 -90
  223. package/stories/fixed-column.stories.ts +57 -137
  224. package/stories/grid-setting.stories.ts +441 -0
  225. package/stories/grist-modes.stories.ts +86 -155
  226. package/stories/group-header.stories.ts +57 -137
  227. package/stories/textarea.stories.ts +42 -127
  228. package/stories/tree-column-with-checkbox.stories.ts +53 -138
  229. package/stories/tree-column.stories.ts +53 -138
  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
@@ -6,6 +6,8 @@ import '@operato/input/ox-input-search.js'
6
6
  import { css, html, LitElement, PropertyValues, TemplateResult, nothing } from 'lit'
7
7
  import { customElement, property, queryAsync, state } from 'lit/decorators.js'
8
8
 
9
+ import { getDefaultValue } from '@operato/time-calculator'
10
+
9
11
  import { FilterConfigObject } from '..'
10
12
  import { DataGrist } from '../data-grist'
11
13
  import { ColumnConfig, FilterOperator, FilterValue, GristConfig } from '../types'
@@ -40,6 +42,7 @@ export class FiltersForm extends LitElement {
40
42
  form > * {
41
43
  display: flex;
42
44
  align-items: center;
45
+ gap: var(--input-intra-gap, 7px);
43
46
  }
44
47
 
45
48
  label span {
@@ -72,7 +75,6 @@ export class FiltersForm extends LitElement {
72
75
 
73
76
  if (grist) {
74
77
  this.config = grist.compiledConfig
75
- this.value = grist.filters || []
76
78
 
77
79
  grist.addEventListener('config-change', (e: Event) => {
78
80
  this.config = (e as CustomEvent).detail
@@ -102,6 +104,17 @@ export class FiltersForm extends LitElement {
102
104
  }
103
105
  }
104
106
 
107
+ buildDefaultValue(operator: string, defaultValue: any) {
108
+ if (defaultValue === undefined) {
109
+ return
110
+ }
111
+ if (operator == 'between') {
112
+ return (defaultValue as Array<any>).map(v => getDefaultValue(v, this))
113
+ } else {
114
+ return getDefaultValue(defaultValue, this)
115
+ }
116
+ }
117
+
105
118
  updated(changes: PropertyValues<this>) {
106
119
  if (changes.has('config')) {
107
120
  const filters = this.config.columns.filter(columnConfig => !!columnConfig.filter)
@@ -114,6 +127,15 @@ export class FiltersForm extends LitElement {
114
127
  return filter!.operator === 'search'
115
128
  })
116
129
 
130
+ const grist = this.closest('ox-grist') as DataGrist
131
+
132
+ this.value = (grist?.filters || []).map(filter => {
133
+ return {
134
+ ...filter,
135
+ value: this.buildDefaultValue(filter!.operator, filter!.value)
136
+ }
137
+ })
138
+
117
139
  this.empty = (this.searchColumns.length === 0 || this.withoutSearch) && this.filterColumns.length === 0
118
140
  }
119
141
  }
@@ -151,8 +173,8 @@ export class FiltersForm extends LitElement {
151
173
  filterLabel !== undefined
152
174
  ? filterLabel
153
175
  : typeof label === 'object' && label.renderer
154
- ? label.renderer(column)
155
- : header.renderer(column) || name
176
+ ? label.renderer(column)
177
+ : header.renderer(column) || name
156
178
 
157
179
  const idx = operator === 'between' ? 1 : 0
158
180
  const renderer = getFilterRenderer(
@@ -160,59 +182,63 @@ export class FiltersForm extends LitElement {
160
182
  ? 'text'
161
183
  : type
162
184
  )[idx]
163
- const value = this.value?.find(filter => filter.name == name)?.value
185
+ const value =
186
+ this.value?.find(filter => filter.name == name)?.value ??
187
+ this.buildDefaultValue(operator!, (filter as FilterConfigObject)?.value)
164
188
 
165
189
  if (!renderer) {
166
190
  return html``
167
191
  }
168
192
 
169
- return type !== 'select' && labelText
170
- ? html`<label filter-title ?between=${operator === 'between'}
171
- ><span>${labelText}</span> ${renderer(column, value, this)}
172
- </label> `
173
- : type !== 'select' && !labelText
193
+ return type === 'boolean' || type === 'checkbox'
174
194
  ? renderer(column, value, this)
175
- : operator === 'in'
176
- ? html`
177
- <ox-select
178
- name=${name}
179
- placeholder=${labelText}
180
- .value=${value}
181
- @change=${(e: CustomEvent) =>
182
- e.target?.dispatchEvent(
183
- new CustomEvent('filter-change', {
184
- detail: {
185
- name,
186
- operator,
187
- value: e.detail
188
- }
189
- })
190
- )}
191
- >
192
- <ox-popup-list multiple attr-selected="checked" with-search>
193
- ${renderer(column, value, this)}
194
- </ox-popup-list>
195
- </ox-select>
196
- `
197
- : html`
198
- <ox-select
199
- name=${name}
200
- placeholder=${labelText}
201
- .value=${value}
202
- @change=${(e: CustomEvent) =>
203
- e.target?.dispatchEvent(
204
- new CustomEvent('filter-change', {
205
- detail: {
206
- name,
207
- operator,
208
- value: e.detail
209
- }
210
- })
211
- )}
212
- >
213
- <ox-popup-list with-search> ${renderer(column, value, this)} </ox-popup-list>
214
- </ox-select>
215
- `
195
+ : type !== 'select' && labelText
196
+ ? html`<label filter-title ?between=${operator === 'between'}
197
+ ><span>${labelText}</span> ${renderer(column, value, this)}
198
+ </label> `
199
+ : type !== 'select' && !labelText
200
+ ? renderer(column, value, this)
201
+ : operator === 'in'
202
+ ? html`
203
+ <ox-select
204
+ name=${name}
205
+ placeholder=${labelText}
206
+ .value=${value}
207
+ @change=${(e: CustomEvent) =>
208
+ e.target?.dispatchEvent(
209
+ new CustomEvent('filter-change', {
210
+ detail: {
211
+ name,
212
+ operator,
213
+ value: e.detail
214
+ }
215
+ })
216
+ )}
217
+ >
218
+ <ox-popup-list multiple attr-selected="checked" with-search>
219
+ ${renderer(column, value, this)}
220
+ </ox-popup-list>
221
+ </ox-select>
222
+ `
223
+ : html`
224
+ <ox-select
225
+ name=${name}
226
+ placeholder=${labelText}
227
+ .value=${value}
228
+ @change=${(e: CustomEvent) =>
229
+ e.target?.dispatchEvent(
230
+ new CustomEvent('filter-change', {
231
+ detail: {
232
+ name,
233
+ operator,
234
+ value: e.detail
235
+ }
236
+ })
237
+ )}
238
+ >
239
+ <ox-popup-list with-search> ${renderer(column, value, this)} </ox-popup-list>
240
+ </ox-select>
241
+ `
216
242
  })}
217
243
  </form>
218
244
  `
@@ -1,4 +1,4 @@
1
- import '@material/mwc-icon'
1
+ import '@material/web/icon/icon.js'
2
2
 
3
3
  import { html } from 'lit'
4
4
 
@@ -23,13 +23,13 @@ export class GutterButton {
23
23
  sortable: false,
24
24
  header: {
25
25
  renderer: function (column) {
26
- return html` <mwc-icon style=${inlineHeaderStyle} title=${title}>${iconFn()}</mwc-icon> `
26
+ return html` <md-icon style=${inlineHeaderStyle} title=${title}>${iconFn()}</md-icon> `
27
27
  } as HeaderRenderer
28
28
  },
29
29
  record: {
30
30
  align: 'center',
31
31
  renderer: function (value, column, record, rowIndex, field) {
32
- return html` <mwc-icon style=${inlineRecordStyle} title=${title}>${iconFn(record)}</mwc-icon> `
32
+ return html` <md-icon style=${inlineRecordStyle} title=${title}>${iconFn(record)}</md-icon> `
33
33
  } as FieldRenderer
34
34
  },
35
35
  forGrid: true,
@@ -1,4 +1,4 @@
1
- import '@material/mwc-icon'
1
+ import '@material/web/icon/icon.js'
2
2
 
3
3
  import { css, html, LitElement } from 'lit'
4
4
  import { customElement, property } from 'lit/decorators.js'
@@ -13,7 +13,7 @@ class GutterDirtyElement extends LitElement {
13
13
  margin: auto;
14
14
  }
15
15
 
16
- mwc-icon {
16
+ md-icon {
17
17
  width: var(--grid-record-dirty-icon-size);
18
18
  height: var(--grid-record-dirty-icon-size);
19
19
  border-radius: 50%;
@@ -38,11 +38,11 @@ class GutterDirtyElement extends LitElement {
38
38
  render() {
39
39
  switch (this.value) {
40
40
  case '+':
41
- return html` <mwc-icon style=${INLINESTYLE} center add>add</mwc-icon> `
41
+ return html` <md-icon style=${INLINESTYLE} center add>add</md-icon> `
42
42
  case '-':
43
- return html` <mwc-icon style=${INLINESTYLE} center remove>remove</mwc-icon> `
43
+ return html` <md-icon style=${INLINESTYLE} center remove>remove</md-icon> `
44
44
  case 'M':
45
- return html` <mwc-icon style=${INLINESTYLE} center done>done</mwc-icon> `
45
+ return html` <md-icon style=${INLINESTYLE} center done>done</md-icon> `
46
46
  default:
47
47
  return ''
48
48
  }
@@ -9,7 +9,7 @@ function dispatchEvent(field: DataGridField, event: string) {
9
9
  new CustomEvent(event, {
10
10
  bubbles: true,
11
11
  composed: true,
12
- detail: field
12
+ detail: field.record
13
13
  })
14
14
  )
15
15
  }
@@ -42,7 +42,7 @@ export const ContextMenuTreeMutation = function (
42
42
  dispatchEvent(field, 'add-sibling-node')
43
43
  }}
44
44
  >
45
- <mwc-icon slot="icon">add</mwc-icon>
45
+ <md-icon slot="icon">add</md-icon>
46
46
  </ox-popup-menuitem>
47
47
 
48
48
  <ox-popup-menuitem
@@ -51,25 +51,7 @@ export const ContextMenuTreeMutation = function (
51
51
  dispatchEvent(field, 'add-child-node')
52
52
  }}
53
53
  >
54
- <mwc-icon slot="icon">playlist_add</mwc-icon>
55
- </ox-popup-menuitem>
56
-
57
- <ox-popup-menuitem
58
- label="move up"
59
- @click=${() => {
60
- dispatchEvent(field, 'move-up')
61
- }}
62
- >
63
- <mwc-icon slot="icon">arrow_upward</mwc-icon>
64
- </ox-popup-menuitem>
65
-
66
- <ox-popup-menuitem
67
- label="move down"
68
- @click=${() => {
69
- dispatchEvent(field, 'move-down')
70
- }}
71
- >
72
- <mwc-icon slot="icon">arrow_downward</mwc-icon>
54
+ <md-icon slot="icon">playlist_add</md-icon>
73
55
  </ox-popup-menuitem>
74
56
 
75
57
  <div separator></div>
@@ -80,7 +62,7 @@ export const ContextMenuTreeMutation = function (
80
62
  dispatchEvent(field, 'collapse-all')
81
63
  }}
82
64
  >
83
- <mwc-icon slot="icon">unfold_less</mwc-icon>
65
+ <md-icon slot="icon">unfold_less</md-icon>
84
66
  </ox-popup-menuitem>
85
67
 
86
68
  <ox-popup-menuitem
@@ -89,7 +71,7 @@ export const ContextMenuTreeMutation = function (
89
71
  dispatchEvent(field, 'expand-all')
90
72
  }}
91
73
  >
92
- <mwc-icon slot="icon">unfold_more</mwc-icon>
74
+ <md-icon slot="icon">unfold_more</md-icon>
93
75
  </ox-popup-menuitem>
94
76
  `,
95
77
  top: e.pageY,
package/src/index.ts CHANGED
@@ -12,6 +12,5 @@ export * from './gutters'
12
12
  export * from './filters'
13
13
  export * from './sorters/sorters-control'
14
14
  export * from './record-view'
15
- export * from './value-generator'
16
15
 
17
16
  export * from './utils/list-param'
@@ -1,4 +1,4 @@
1
- import '@material/mwc-icon'
1
+ import '@material/web/icon/icon.js'
2
2
  import './record-view'
3
3
 
4
4
  import { html, LitElement } from 'lit'
@@ -1,4 +1,4 @@
1
- import '@material/mwc-icon'
1
+ import '@material/web/icon/icon.js'
2
2
  import '../data-grid/data-grid-field'
3
3
 
4
4
  import { css, html, LitElement } from 'lit'
@@ -34,7 +34,7 @@ export class RecordViewBody extends LitElement {
34
34
  color: var(--record-view-label-color);
35
35
  }
36
36
 
37
- label mwc-icon {
37
+ label md-icon {
38
38
  display: none;
39
39
  }
40
40
 
@@ -43,7 +43,7 @@ export class RecordViewBody extends LitElement {
43
43
  font-weight: bold;
44
44
  }
45
45
 
46
- label[editable] mwc-icon {
46
+ label[editable] md-icon {
47
47
  display: inline-block;
48
48
  font-size: var(--record-view-label-icon-size);
49
49
  opacity: 0.5;
@@ -99,7 +99,7 @@ export class RecordViewBody extends LitElement {
99
99
 
100
100
  return html`
101
101
  <label ?editable=${editable}
102
- ><span>${mandatory ? '*' : ''}${this._renderLabel(column)}</span> <mwc-icon>edit</mwc-icon></label
102
+ ><span>${mandatory ? '*' : ''}${this._renderLabel(column)}</span> <md-icon>edit</md-icon></label
103
103
  >
104
104
  <ox-grid-field
105
105
  .rowIndex=${rowIndex}
@@ -1,4 +1,4 @@
1
- import '@material/mwc-icon'
1
+ import '@material/web/icon/icon.js'
2
2
  import './record-view-body'
3
3
  import '@operato/input/ox-input-file.js'
4
4
  import '../data-grid/data-grid-field'
@@ -53,7 +53,7 @@ export class RecordView extends LitElement {
53
53
  vertical-align: middle;
54
54
  }
55
55
 
56
- [footer] button mwc-icon {
56
+ [footer] button md-icon {
57
57
  margin-top: -3px;
58
58
  margin-right: 5px;
59
59
  font-size: var(--record-view-footer-iconbutton-size);
@@ -74,9 +74,9 @@ export class RecordView extends LitElement {
74
74
  <ox-record-view-body .columns=${this.columns} .record=${this.record} .rowIndex=${this.rowIndex}>
75
75
  </ox-record-view-body>
76
76
  <div footer>
77
- <button @click=${this.onReset.bind(this)}><mwc-icon>refresh</mwc-icon><span>Reset</span></button>
78
- <button @click=${this.onCancel.bind(this)}><mwc-icon>clear</mwc-icon><span>Cancel</span></button>
79
- <button @click=${this.onOK.bind(this)} ok><mwc-icon>radio_button_unchecked</mwc-icon><span>OK</span></button>
77
+ <button @click=${this.onReset.bind(this)}><md-icon>refresh</md-icon><span>Reset</span></button>
78
+ <button @click=${this.onCancel.bind(this)}><md-icon>clear</md-icon><span>Cancel</span></button>
79
+ <button @click=${this.onOK.bind(this)} ok><md-icon>radio_button_unchecked</md-icon><span>OK</span></button>
80
80
  </div>
81
81
  `
82
82
  }
@@ -29,9 +29,9 @@ export class SortersControl extends LitElement {
29
29
  text-transform: capitalize;
30
30
  user-select: none;
31
31
  }
32
- [option] mwc-icon {
32
+ [option] md-icon {
33
33
  margin-left: var(--margin-default);
34
- --mdc-icon-size: var(--fontsize-large);
34
+ --md-icon-size: var(--fontsize-large);
35
35
  color: var(--primary-color);
36
36
  }
37
37
  [option] sub {
@@ -99,7 +99,7 @@ export class SortersControl extends LitElement {
99
99
  ${desc === null
100
100
  ? html``
101
101
  : html`
102
- <mwc-icon>${desc ? 'keyboard_arrow_down' : 'keyboard_arrow_up'}</mwc-icon>
102
+ <md-icon>${desc ? 'keyboard_arrow_down' : 'keyboard_arrow_up'}</md-icon>
103
103
  ${rank === 0 ? html`` : html`<sub>${rank}</sub>`}
104
104
  `}
105
105
  </div>
package/src/types.ts CHANGED
@@ -427,15 +427,6 @@ export type HeaderConfig = {
427
427
  */
428
428
  export type HeaderRenderer = (column: ColumnConfig) => any
429
429
 
430
- /**
431
- * Function type for generating values.
432
- *
433
- * @callback ValueGeneratorFn
434
- * @param {...any} args - The arguments used for generating a value.
435
- * @returns {*} - The generated value.
436
- */
437
- export type ValueGeneratorFn = (...args: any[]) => any
438
-
439
430
  /**
440
431
  * Configuration for specifying default values for fields in a record.
441
432
  * Default values can be set using predefined value generator functions or custom user-defined functions.
@@ -627,6 +618,7 @@ export type ImexConfig = {
627
618
  export type RowsConfig = {
628
619
  accumulator?: boolean
629
620
  appendable: boolean
621
+ editable: boolean
630
622
  insertable: boolean
631
623
  selectable?: RowSelectableConfig
632
624
  groups: GroupConfig[]
@@ -3,7 +3,7 @@ import '../src/filters/filters-form.js'
3
3
  import '../src/sorters/sorters-control.js'
4
4
  import '../src/record-view/record-creator.js'
5
5
  import '@operato/popup/ox-popup-list.js'
6
- import '@material/mwc-icon'
6
+ import '@material/web/icon/icon.js'
7
7
 
8
8
  import { html, TemplateResult } from 'lit'
9
9
 
@@ -16,6 +16,8 @@ import {
16
16
  ValidationCallback
17
17
  } from '../src/types.js'
18
18
 
19
+ import { CommonHeaderStyles, CommonGristStyles } from '@operato/styles'
20
+
19
21
  const fetchHandler: FetchHandler = async ({ page, limit }) => {
20
22
  var total = 25
21
23
  var start = (page! - 1) * limit!
@@ -103,9 +105,14 @@ const config = {
103
105
  header: 'accval',
104
106
  record: {
105
107
  editable: true,
106
- align: 'right'
108
+ align: 'right',
109
+ defaultValue: 100
107
110
  },
108
111
  accumulator: 'avg',
112
+ // accumulator: {
113
+ // type: 'avg',
114
+ // tag: true
115
+ // },
109
116
  sortable: true,
110
117
  width: 130
111
118
  },
@@ -116,7 +123,10 @@ const config = {
116
123
  header: 'accval2',
117
124
  record: {
118
125
  editable: true,
119
- align: 'right'
126
+ align: 'right',
127
+ renderer: (value: any, column: any, record: any) => {
128
+ return value && Intl.NumberFormat('en-US').format(value)
129
+ }
120
130
  },
121
131
  accumulator: {
122
132
  type: 'sum',
@@ -163,9 +173,6 @@ const config = {
163
173
  {
164
174
  name: 'name',
165
175
  desc: true
166
- },
167
- {
168
- name: 'email'
169
176
  }
170
177
  ],
171
178
  pagination: {
@@ -196,137 +203,55 @@ interface ArgTypes {
196
203
  fetchHandler: object
197
204
  }
198
205
 
199
- const Template: Story<ArgTypes> = ({
200
- config,
201
- mode = 'GRID',
202
- urlParamsSensitive = false,
203
- fetchHandler
204
- }: ArgTypes) => html` <link
205
- href="https://fonts.googleapis.com/css?family=Material+Icons&display=block"
206
- rel="stylesheet"
207
- />
208
- <link href="/themes/app-theme.css" rel="stylesheet" />
209
- <link href="/themes/oops-theme.css" rel="stylesheet" />
210
- <link href="/themes/grist-theme.css" rel="stylesheet" />
211
-
212
- <style>
213
- ox-grist {
214
- height: 600px;
215
- }
216
-
217
- [slot='headroom'] {
218
- display: flex;
219
- flex-direction: row;
220
- align-items: center;
221
- padding: var(--padding-default) var(--padding-wide);
222
- background-color: var(--theme-white-color);
223
- box-shadow: var(--box-shadow);
224
-
225
- --mdc-icon-size: 24px;
226
- }
227
- #sorters mwc-icon,
228
- #modes mwc-icon {
229
- --mdc-icon-size: 18px;
230
- }
231
- #sorters {
232
- margin-left: auto;
233
- margin-right: var(--margin-default);
234
- padding-left: var(--padding-narrow);
235
- border-bottom: var(--border-dark-color);
236
- position: relative;
237
- color: var(--secondary-color);
238
- font-size: var(--fontsize-default);
239
- user-select: none;
240
- }
241
-
242
- #sorters > * {
243
- padding: var(--padding-narrow);
244
- vertical-align: middle;
245
- }
246
-
247
- #modes > * {
248
- padding: var(--padding-narrow);
249
- opacity: 0.5;
250
- color: var(--primary-text-color);
251
- cursor: pointer;
252
- }
253
-
254
- #modes > mwc-icon[active] {
255
- border-radius: 9px;
256
- background-color: rgba(var(--primary-color-rgb), 0.05);
257
- opacity: 1;
258
- color: var(--secondary-text-color);
259
- cursor: default;
260
- }
261
-
262
- #modes > mwc-icon:hover {
263
- opacity: 1;
264
- color: var(--secondary-text-color);
265
- }
266
-
267
- #add {
268
- width: 50px;
269
- text-align: right;
270
- }
271
-
272
- #add button {
273
- background-color: var(--primary-color);
274
- border: 0;
275
- border-radius: 50%;
276
- padding: 5px;
277
- width: 36px;
278
- height: 36px;
279
- cursor: pointer;
280
- }
281
-
282
- #add button:hover {
283
- background-color: var(--focus-background-color);
284
- box-shadow: var(--box-shadow);
285
- }
286
-
287
- #add button mwc-icon {
288
- font-size: 2em;
289
- color: var(--theme-white-color);
290
- }
206
+ const Template: Story<ArgTypes> = ({ config, mode = 'GRID', urlParamsSensitive = false, fetchHandler }: ArgTypes) =>
207
+ html` <link
208
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
209
+ rel="stylesheet"
210
+ />
211
+ <link
212
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
213
+ rel="stylesheet"
214
+ />
215
+ <link
216
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
217
+ rel="stylesheet"
218
+ />
291
219
 
292
- #filters {
293
- display: flex;
294
- justify-content: center;
295
- align-items: center;
296
- }
220
+ <link href="/themes/app-theme.css" rel="stylesheet" />
221
+ <link href="/themes/oops-theme.css" rel="stylesheet" />
222
+ <link href="/themes/grist-theme.css" rel="stylesheet" />
297
223
 
298
- #filters * {
299
- margin-right: var(--margin-default);
300
- }
224
+ <style>
225
+ ${CommonGristStyles.cssText}
226
+ ${CommonHeaderStyles.cssText}
227
+ </style>
301
228
 
302
- @media only screen and (max-width: 460px) {
303
- #filters {
304
- flex-direction: column;
229
+ <style>
230
+ ox-grist {
231
+ height: 600px;
305
232
  }
306
233
 
307
- #modes {
308
- display: none;
234
+ ox-filters-form {
235
+ flex: 1;
309
236
  }
310
- }
311
- </style>
237
+ </style>
312
238
 
313
- <ox-grist
314
- mode="GRID"
315
- .config=${config}
316
- .fetchHandler=${fetchHandler}
317
- ?url-params-sensitive=${urlParamsSensitive}
318
- @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}
319
- >
320
- <div slot="headroom">
321
- <div id="filters">
322
- <ox-filters-form autofocus></ox-filters-form>
239
+ <ox-grist
240
+ mode="GRID"
241
+ .config=${config}
242
+ .fetchHandler=${fetchHandler}
243
+ ?url-params-sensitive=${urlParamsSensitive}
244
+ @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}
245
+ >
246
+ <div slot="headroom" class="header">
247
+ <div class="filters">
248
+ <ox-filters-form autofocus></ox-filters-form>
249
+ <ox-record-creator id="add" light-popup>
250
+ <button><md-icon>add</md-icon></button>
251
+ </ox-record-creator>
252
+ </div>
323
253
  </div>
324
-
325
- <ox-record-creator id="add" light-popup>
326
- <button><mwc-icon>add</mwc-icon></button>
327
- </ox-record-creator>
328
- </div>
329
- </ox-grist>`
254
+ </ox-grist>`
330
255
 
331
256
  export const Regular = Template.bind({})
332
257
  Regular.args = {