@operato/data-grist 2.0.0-alpha.11 → 2.0.0-alpha.111

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 (303) hide show
  1. package/CHANGELOG.md +472 -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/column-builder.js.map +1 -1
  6. package/dist/src/configure/rows-option-builder.js +2 -1
  7. package/dist/src/configure/rows-option-builder.js.map +1 -1
  8. package/dist/src/configure/zero-config.js +1 -0
  9. package/dist/src/configure/zero-config.js.map +1 -1
  10. package/dist/src/data-card/data-card-gutter-menu.d.ts +1 -1
  11. package/dist/src/data-card/data-card-gutter-menu.js +5 -5
  12. package/dist/src/data-card/data-card-gutter-menu.js.map +1 -1
  13. package/dist/src/data-card/data-card.d.ts +2 -2
  14. package/dist/src/data-card/data-card.js +3 -3
  15. package/dist/src/data-card/data-card.js.map +1 -1
  16. package/dist/src/data-card/event-handlers/record-card-click-handler.js +1 -1
  17. package/dist/src/data-card/event-handlers/record-card-click-handler.js.map +1 -1
  18. package/dist/src/data-card/record-card.d.ts +2 -2
  19. package/dist/src/data-card/record-card.js +26 -26
  20. package/dist/src/data-card/record-card.js.map +1 -1
  21. package/dist/src/data-grid/data-grid-accum-field.js +8 -3
  22. package/dist/src/data-grid/data-grid-accum-field.js.map +1 -1
  23. package/dist/src/data-grid/data-grid-body-style.js +1 -0
  24. package/dist/src/data-grid/data-grid-body-style.js.map +1 -1
  25. package/dist/src/data-grid/data-grid-body.d.ts +3 -3
  26. package/dist/src/data-grid/data-grid-body.js +9 -4
  27. package/dist/src/data-grid/data-grid-body.js.map +1 -1
  28. package/dist/src/data-grid/data-grid-field.d.ts +1 -1
  29. package/dist/src/data-grid/data-grid-field.js +2 -2
  30. package/dist/src/data-grid/data-grid-field.js.map +1 -1
  31. package/dist/src/data-grid/data-grid-footer.d.ts +2 -2
  32. package/dist/src/data-grid/data-grid-footer.js +17 -9
  33. package/dist/src/data-grid/data-grid-footer.js.map +1 -1
  34. package/dist/src/data-grid/data-grid-header.d.ts +1 -1
  35. package/dist/src/data-grid/data-grid-header.js +38 -35
  36. package/dist/src/data-grid/data-grid-header.js.map +1 -1
  37. package/dist/src/data-grid/data-grid.d.ts +1 -1
  38. package/dist/src/data-grid/data-grid.js +12 -2
  39. package/dist/src/data-grid/data-grid.js.map +1 -1
  40. package/dist/src/data-grist.d.ts +1 -1
  41. package/dist/src/data-grist.js +23 -22
  42. package/dist/src/data-grist.js.map +1 -1
  43. package/dist/src/data-list/data-list-gutter.js +12 -0
  44. package/dist/src/data-list/data-list-gutter.js.map +1 -1
  45. package/dist/src/data-list/data-list.d.ts +2 -2
  46. package/dist/src/data-list/data-list.js +3 -3
  47. package/dist/src/data-list/data-list.js.map +1 -1
  48. package/dist/src/data-list/event-handlers/record-partial-click-handler.js +1 -1
  49. package/dist/src/data-list/event-handlers/record-partial-click-handler.js.map +1 -1
  50. package/dist/src/data-list/record-partial.d.ts +2 -2
  51. package/dist/src/data-list/record-partial.js +20 -18
  52. package/dist/src/data-list/record-partial.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-select.js +37 -25
  79. package/dist/src/editors/ox-grist-editor-select.js.map +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-checkbox.js +12 -5
  98. package/dist/src/filters/filter-checkbox.js.map +1 -1
  99. package/dist/src/filters/filter-range-date.js +12 -1
  100. package/dist/src/filters/filter-range-date.js.map +1 -1
  101. package/dist/src/filters/filter-select.js +30 -16
  102. package/dist/src/filters/filter-select.js.map +1 -1
  103. package/dist/src/filters/filter-styles.js +47 -28
  104. package/dist/src/filters/filter-styles.js.map +1 -1
  105. package/dist/src/filters/filters-form.d.ts +7 -1
  106. package/dist/src/filters/filters-form.js +154 -71
  107. package/dist/src/filters/filters-form.js.map +1 -1
  108. package/dist/src/gutters/gutter-button.d.ts +1 -1
  109. package/dist/src/gutters/gutter-button.js +3 -3
  110. package/dist/src/gutters/gutter-button.js.map +1 -1
  111. package/dist/src/gutters/gutter-dirty.d.ts +1 -1
  112. package/dist/src/gutters/gutter-dirty.js +5 -5
  113. package/dist/src/gutters/gutter-dirty.js.map +1 -1
  114. package/dist/src/handlers/contextmenu-tree-mutation.js +4 -22
  115. package/dist/src/handlers/contextmenu-tree-mutation.js.map +1 -1
  116. package/dist/src/index.d.ts +0 -1
  117. package/dist/src/index.js +0 -1
  118. package/dist/src/index.js.map +1 -1
  119. package/dist/src/record-view/record-creator.d.ts +2 -2
  120. package/dist/src/record-view/record-creator.js +1 -1
  121. package/dist/src/record-view/record-creator.js.map +1 -1
  122. package/dist/src/record-view/record-view-body.d.ts +3 -3
  123. package/dist/src/record-view/record-view-body.js +4 -4
  124. package/dist/src/record-view/record-view-body.js.map +1 -1
  125. package/dist/src/record-view/record-view.d.ts +2 -2
  126. package/dist/src/record-view/record-view.js +5 -5
  127. package/dist/src/record-view/record-view.js.map +1 -1
  128. package/dist/src/renderers/ox-grist-renderer-progress.d.ts +1 -1
  129. package/dist/src/renderers/ox-grist-renderer-select.js +34 -4
  130. package/dist/src/renderers/ox-grist-renderer-select.js.map +1 -1
  131. package/dist/src/renderers/ox-grist-renderer-tree.d.ts +1 -1
  132. package/dist/src/renderers/ox-grist-renderer.d.ts +2 -2
  133. package/dist/src/sorters/sorters-control.js +3 -3
  134. package/dist/src/sorters/sorters-control.js.map +1 -1
  135. package/dist/src/types.d.ts +15 -9
  136. package/dist/src/types.js.map +1 -1
  137. package/dist/stories/{accumulator.stories.d.ts → accumulator-format.stories.d.ts} +1 -1
  138. package/dist/stories/{accumulator.stories.js → accumulator-format.stories.js} +58 -129
  139. package/dist/stories/accumulator-format.stories.js.map +1 -0
  140. package/dist/stories/barcode-input-filter.stories.d.ts +1 -1
  141. package/dist/stories/barcode-input-filter.stories.js +41 -79
  142. package/dist/stories/barcode-input-filter.stories.js.map +1 -1
  143. package/dist/stories/bounded-select-filters.stories.d.ts +25 -0
  144. package/dist/stories/bounded-select-filters.stories.js +264 -0
  145. package/dist/stories/bounded-select-filters.stories.js.map +1 -0
  146. package/dist/stories/bounded-select-record.stories.d.ts +25 -0
  147. package/dist/stories/bounded-select-record.stories.js +267 -0
  148. package/dist/stories/bounded-select-record.stories.js.map +1 -0
  149. package/dist/stories/creatable-only-column.stories.d.ts +25 -0
  150. package/dist/stories/creatable-only-column.stories.js +211 -0
  151. package/dist/stories/creatable-only-column.stories.js.map +1 -0
  152. package/dist/stories/default-filters.stories.d.ts +1 -1
  153. package/dist/stories/default-filters.stories.js +84 -79
  154. package/dist/stories/default-filters.stories.js.map +1 -1
  155. package/dist/stories/dynamic-editable.stories.d.ts +1 -1
  156. package/dist/stories/dynamic-editable.stories.js +61 -86
  157. package/dist/stories/dynamic-editable.stories.js.map +1 -1
  158. package/dist/stories/empty-sorters.stories.d.ts +1 -1
  159. package/dist/stories/empty-sorters.stories.js +41 -78
  160. package/dist/stories/empty-sorters.stories.js.map +1 -1
  161. package/dist/stories/explicit-fetch.stories.d.ts +1 -1
  162. package/dist/stories/explicit-fetch.stories.js +42 -79
  163. package/dist/stories/explicit-fetch.stories.js.map +1 -1
  164. package/dist/stories/fixed-column.stories.d.ts +1 -1
  165. package/dist/stories/fixed-column.stories.js +45 -127
  166. package/dist/stories/fixed-column.stories.js.map +1 -1
  167. package/dist/stories/grid-setting.stories.d.ts +36 -0
  168. package/dist/stories/grid-setting.stories.js +403 -0
  169. package/dist/stories/grid-setting.stories.js.map +1 -0
  170. package/dist/stories/grist-modes.stories.d.ts +1 -1
  171. package/dist/stories/grist-modes.stories.js +74 -140
  172. package/dist/stories/grist-modes.stories.js.map +1 -1
  173. package/dist/stories/group-header.stories.d.ts +1 -1
  174. package/dist/stories/group-header.stories.js +45 -127
  175. package/dist/stories/group-header.stories.js.map +1 -1
  176. package/dist/stories/textarea.stories.d.ts +1 -1
  177. package/dist/stories/textarea.stories.js +39 -121
  178. package/dist/stories/textarea.stories.js.map +1 -1
  179. package/dist/stories/tree-column-with-checkbox.stories.d.ts +1 -1
  180. package/dist/stories/tree-column-with-checkbox.stories.js +49 -136
  181. package/dist/stories/tree-column-with-checkbox.stories.js.map +1 -1
  182. package/dist/stories/tree-column.stories.d.ts +1 -1
  183. package/dist/stories/tree-column.stories.js +49 -136
  184. package/dist/stories/tree-column.stories.js.map +1 -1
  185. package/dist/tsconfig.tsbuildinfo +1 -1
  186. package/docs/default-value/default-value.md +1 -1
  187. package/docs/default-value/value-generator/date-generator.md +31 -2
  188. package/docs/default-value/value-generator/hour-time-generator.md +33 -0
  189. package/docs/default-value/value-generator/minute-time-generator.md +33 -0
  190. package/docs/default-value/value-generator/month-date-generator.md +4 -2
  191. package/docs/default-value/value-generator/now-generator.md +29 -0
  192. package/docs/default-value/value-generator/time-generator.md +31 -0
  193. package/docs/default-value/value-generator/today-generator.md +29 -0
  194. package/docs/default-value/value-generator/week-date-generator.md +33 -2
  195. package/docs/default-value/value-generator/year-date-generator.md +33 -2
  196. package/package.json +21 -20
  197. package/src/configure/column-builder.ts +1 -0
  198. package/src/configure/rows-option-builder.ts +11 -1
  199. package/src/configure/zero-config.ts +1 -0
  200. package/src/data-card/data-card-gutter-menu.ts +5 -5
  201. package/src/data-card/data-card.ts +3 -3
  202. package/src/data-card/event-handlers/record-card-click-handler.ts +1 -1
  203. package/src/data-card/record-card.ts +30 -32
  204. package/src/data-grid/data-grid-accum-field.ts +8 -3
  205. package/src/data-grid/data-grid-body-style.ts +1 -0
  206. package/src/data-grid/data-grid-body.ts +10 -5
  207. package/src/data-grid/data-grid-field.ts +1 -1
  208. package/src/data-grid/data-grid-footer.ts +18 -11
  209. package/src/data-grid/data-grid-header.ts +68 -65
  210. package/src/data-grid/data-grid.ts +14 -4
  211. package/src/data-grist.ts +25 -24
  212. package/src/data-list/data-list-gutter.ts +12 -0
  213. package/src/data-list/data-list.ts +3 -3
  214. package/src/data-list/event-handlers/record-partial-click-handler.ts +1 -1
  215. package/src/data-list/record-partial.ts +22 -22
  216. package/src/editors/ox-grist-editor-checkbox.ts +12 -2
  217. package/src/editors/ox-grist-editor-datetime.ts +1 -2
  218. package/src/editors/ox-grist-editor-file.ts +12 -2
  219. package/src/editors/ox-grist-editor-image.ts +10 -7
  220. package/src/editors/ox-grist-editor-number.ts +11 -9
  221. package/src/editors/ox-grist-editor-select.ts +41 -28
  222. package/src/editors/ox-grist-editor-text.ts +4 -0
  223. package/src/editors/ox-grist-editor-textarea.ts +4 -0
  224. package/src/editors/ox-grist-editor.ts +14 -10
  225. package/src/empty-note.ts +3 -3
  226. package/src/filters/filter-checkbox.ts +15 -5
  227. package/src/filters/filter-range-date.ts +16 -1
  228. package/src/filters/filter-select.ts +41 -28
  229. package/src/filters/filter-styles.ts +47 -28
  230. package/src/filters/filters-form.ts +159 -59
  231. package/src/gutters/gutter-button.ts +3 -3
  232. package/src/gutters/gutter-dirty.ts +5 -5
  233. package/src/handlers/contextmenu-tree-mutation.ts +4 -22
  234. package/src/index.ts +0 -1
  235. package/src/record-view/record-creator.ts +1 -1
  236. package/src/record-view/record-view-body.ts +4 -4
  237. package/src/record-view/record-view.ts +5 -5
  238. package/src/renderers/ox-grist-renderer-select.ts +41 -6
  239. package/src/sorters/sorters-control.ts +3 -3
  240. package/src/types.ts +20 -10
  241. package/stories/{accumulator.stories.ts → accumulator-format.stories.ts} +56 -130
  242. package/stories/barcode-input-filter.stories.ts +53 -89
  243. package/stories/bounded-select-filters.stories.ts +313 -0
  244. package/stories/bounded-select-record.stories.ts +316 -0
  245. package/stories/creatable-only-column.stories.ts +231 -0
  246. package/stories/default-filters.stories.ts +96 -89
  247. package/stories/dynamic-editable.stories.ts +68 -92
  248. package/stories/empty-sorters.stories.ts +53 -89
  249. package/stories/explicit-fetch.stories.ts +54 -90
  250. package/stories/fixed-column.stories.ts +57 -137
  251. package/stories/grid-setting.stories.ts +441 -0
  252. package/stories/grist-modes.stories.ts +86 -155
  253. package/stories/group-header.stories.ts +57 -137
  254. package/stories/textarea.stories.ts +42 -127
  255. package/stories/tree-column-with-checkbox.stories.ts +53 -138
  256. package/stories/tree-column.stories.ts +53 -138
  257. package/themes/grist-theme.css +3 -1
  258. package/yarn-error.log +16971 -0
  259. package/dist/src/value-generator/date-generator.d.ts +0 -6
  260. package/dist/src/value-generator/date-generator.js +0 -30
  261. package/dist/src/value-generator/date-generator.js.map +0 -1
  262. package/dist/src/value-generator/hour-time-generator.d.ts +0 -7
  263. package/dist/src/value-generator/hour-time-generator.js +0 -29
  264. package/dist/src/value-generator/hour-time-generator.js.map +0 -1
  265. package/dist/src/value-generator/index.d.ts +0 -1
  266. package/dist/src/value-generator/index.js +0 -2
  267. package/dist/src/value-generator/index.js.map +0 -1
  268. package/dist/src/value-generator/minute-time-generator.d.ts +0 -7
  269. package/dist/src/value-generator/minute-time-generator.js +0 -29
  270. package/dist/src/value-generator/minute-time-generator.js.map +0 -1
  271. package/dist/src/value-generator/month-date-generator.d.ts +0 -7
  272. package/dist/src/value-generator/month-date-generator.js +0 -31
  273. package/dist/src/value-generator/month-date-generator.js.map +0 -1
  274. package/dist/src/value-generator/now-generator.d.ts +0 -4
  275. package/dist/src/value-generator/now-generator.js +0 -8
  276. package/dist/src/value-generator/now-generator.js.map +0 -1
  277. package/dist/src/value-generator/registry.d.ts +0 -11
  278. package/dist/src/value-generator/registry.js +0 -50
  279. package/dist/src/value-generator/registry.js.map +0 -1
  280. package/dist/src/value-generator/time-generator.d.ts +0 -6
  281. package/dist/src/value-generator/time-generator.js +0 -28
  282. package/dist/src/value-generator/time-generator.js.map +0 -1
  283. package/dist/src/value-generator/today-generator.d.ts +0 -4
  284. package/dist/src/value-generator/today-generator.js +0 -8
  285. package/dist/src/value-generator/today-generator.js.map +0 -1
  286. package/dist/src/value-generator/week-date-generator.d.ts +0 -7
  287. package/dist/src/value-generator/week-date-generator.js +0 -29
  288. package/dist/src/value-generator/week-date-generator.js.map +0 -1
  289. package/dist/src/value-generator/year-date-generator.d.ts +0 -7
  290. package/dist/src/value-generator/year-date-generator.js +0 -29
  291. package/dist/src/value-generator/year-date-generator.js.map +0 -1
  292. package/dist/stories/accumulator.stories.js.map +0 -1
  293. package/src/value-generator/date-generator.ts +0 -35
  294. package/src/value-generator/hour-time-generator.ts +0 -43
  295. package/src/value-generator/index.ts +0 -1
  296. package/src/value-generator/minute-time-generator.ts +0 -43
  297. package/src/value-generator/month-date-generator.ts +0 -38
  298. package/src/value-generator/now-generator.ts +0 -10
  299. package/src/value-generator/registry.ts +0 -58
  300. package/src/value-generator/time-generator.ts +0 -33
  301. package/src/value-generator/today-generator.ts +0 -10
  302. package/src/value-generator/week-date-generator.ts +0 -40
  303. package/src/value-generator/year-date-generator.ts +0 -36
@@ -10,6 +10,7 @@ export const dataGridBodyStyle = css`
10
10
  outline: none;
11
11
  color: var(--grid-record-color);
12
12
  position: relative;
13
+ border-bottom: var(--grid-body-bottom-border);
13
14
  }
14
15
 
15
16
  ox-grid-field[odd] {
@@ -100,7 +100,7 @@ export class DataGridBody extends LitElement {
100
100
  @property({ type: Array }) columns: ColumnConfig[] = []
101
101
  @property({ type: Object }) data: GristData = ZERO_DATA
102
102
  @property({ type: Object }) focused: { row: number; column: number } = ZERO_FOCUS
103
- @property({ type: Object }) editTarget: { row: number; column: number; valueWithEdit: string | null } | null = null
103
+ @property({ type: Object }) editTarget: { row: number; column: number; valueWith: string | null } | null = null
104
104
  @property({ type: Number }) from = -1
105
105
  @property({ type: Number }) to = -1
106
106
  @property({ type: Array }) fixedLefts: number[] = []
@@ -135,7 +135,7 @@ export class DataGridBody extends LitElement {
135
135
  render() {
136
136
  // block이 선택되어 있으면, focused row/column은 표현하지 않는다.
137
137
  var { row: focusedRow, column: focusedColumn } = (!this._selectBlock && this.focused) || {}
138
- var { row: editingRow, column: editingColumn, valueWithEdit = null } = this.editTarget || {}
138
+ var { row: editingRow, column: editingColumn, valueWith = null } = this.editTarget || {}
139
139
 
140
140
  var columns = this.columns.filter(column => !column.hidden)
141
141
  var data = this.data
@@ -182,7 +182,7 @@ export class DataGridBody extends LitElement {
182
182
  ?selected-row=${attrSelected}
183
183
  ?focused=${idxRow === focusedRow && idxColumn === focusedColumn}
184
184
  ?editing=${idxRow === editingRow && idxColumn === editingColumn}
185
- .valueWithEdit=${valueWithEdit}
185
+ .valueWith=${valueWith}
186
186
  .value=${record[column.name]}
187
187
  ?dirty=${!!dirtyFields[column.name]}
188
188
  fixed=${ifDefined(this.fixedLefts[idxColumn])}
@@ -400,7 +400,7 @@ export class DataGridBody extends LitElement {
400
400
  }
401
401
  }
402
402
 
403
- startEditTarget(row: number, column: number, valueWithEdit: string | null = null) {
403
+ startEditTarget(row: number, column: number, valueWith: string | null = null) {
404
404
  var { editable } = this.columns.filter(column => !column.hidden)[column].record
405
405
  if (typeof editable === 'function') {
406
406
  const curRow = this.data.records[row] || {}
@@ -419,7 +419,7 @@ export class DataGridBody extends LitElement {
419
419
  this.editTarget = {
420
420
  row,
421
421
  column,
422
- valueWithEdit
422
+ valueWith
423
423
  }
424
424
  }
425
425
 
@@ -647,14 +647,19 @@ export class DataGridBody extends LitElement {
647
647
 
648
648
  switch (type) {
649
649
  case 'object':
650
+ case 'parameters':
650
651
  try {
651
652
  value = JSON.parse(value || 'null')
652
653
  } catch (err) {}
653
654
  break
654
655
  case 'boolean':
656
+ case 'checkbox':
655
657
  value = !!value && !!String(value).match(/true/i)
656
658
  break
657
659
  case 'number':
660
+ case 'float':
661
+ case 'integer':
662
+ case 'progress':
658
663
  value = parseToNumberOrNull(value)
659
664
  break
660
665
  default:
@@ -87,7 +87,7 @@ export class DataGridField extends LitElement {
87
87
  @property({ type: Number }) columnIndex = 0
88
88
  @property({ type: Boolean }) editing = false
89
89
  @property({ type: Object }) value = {}
90
- @property({ type: String }) valueWithEdit: string | null = null
90
+ @property({ type: String }) valueWith: string | null = null
91
91
  @property({ attribute: false }) emphasized: any = false
92
92
  @property({ type: String }) fixed?: string
93
93
  @property({ type: String }) type?: string
@@ -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'
@@ -14,17 +14,18 @@ export class DataGridFooter extends LitElement {
14
14
  :host {
15
15
  display: flex;
16
16
  flex-direction: row;
17
+ gap: 4px;
17
18
  overflow: hidden;
18
19
 
19
20
  padding: var(--grid-footer-padding);
20
21
  background-color: var(--grid-footer-background-color);
21
22
  font-size: var(--grid-footer-font-size);
23
+ align-items: center;
22
24
  }
23
25
 
24
26
  :host * {
25
27
  white-space: nowrap;
26
28
  overflow: hidden;
27
- padding: 0 2px;
28
29
 
29
30
  text-overflow: ellipsis;
30
31
  text-align: center;
@@ -35,11 +36,18 @@ export class DataGridFooter extends LitElement {
35
36
  flex: 1;
36
37
  }
37
38
 
38
- mwc-icon {
39
+ md-icon {
39
40
  font-size: 1.5em;
40
41
  vertical-align: middle;
41
42
  }
42
43
 
44
+ .limit {
45
+ display: flex;
46
+ flex-direction: row;
47
+ gap: 6px;
48
+ align-items: center;
49
+ }
50
+
43
51
  .limit a {
44
52
  color: var(--grid-footer-limit-color);
45
53
  }
@@ -82,20 +90,19 @@ export class DataGridFooter extends LitElement {
82
90
  var totalPage = Math.max(1, Math.ceil(total / limit))
83
91
 
84
92
  return html`
85
- <a ?inactive=${page <= 1} @click=${() => this._gotoPage(1)}><mwc-icon>skip_previous</mwc-icon></a>
86
- <a ?inactive=${page <= 1} @click=${() => this._gotoPage(page - 1)}><mwc-icon>navigate_before</mwc-icon></a>
93
+ <a ?inactive=${page <= 1} @click=${() => this._gotoPage(1)}><md-icon>skip_previous</md-icon></a>
94
+ <a ?inactive=${page <= 1} @click=${() => this._gotoPage(page - 1)}><md-icon>navigate_before</md-icon></a>
87
95
  <span>page <strong>${page}</strong>&nbsp;/&nbsp;${totalPage}</span>
88
- <a ?inactive=${page >= totalPage} @click=${() => this._gotoPage(page + 1)}><mwc-icon>navigate_next</mwc-icon></a>
89
- <a ?inactive=${page >= totalPage} @click=${() => this._gotoPage(totalPage)}><mwc-icon>skip_next</mwc-icon></a>
96
+ <a ?inactive=${page >= totalPage} @click=${() => this._gotoPage(page + 1)}><md-icon>navigate_next</md-icon></a>
97
+ <a ?inactive=${page >= totalPage} @click=${() => this._gotoPage(totalPage)}><md-icon>skip_next</md-icon></a>
90
98
 
91
99
  <span class="filler"></span>
92
100
 
93
101
  <span class="limit">
94
102
  ${pages.map(
95
- size =>
96
- html`
97
- <a ?selected=${limit == size} @click=${() => this._changeLimit(size)}>${stringifyBigNumber(size)}</a>
98
- `
103
+ size => html`
104
+ <a ?selected=${limit == size} @click=${() => this._changeLimit(size)}>${stringifyBigNumber(size)}</a>
105
+ `
99
106
  )}
100
107
  records
101
108
  </span>
@@ -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: 1;
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}
package/src/data-grist.ts CHANGED
@@ -59,7 +59,7 @@ export class DataGrist extends LitElement implements DataConsumer {
59
59
 
60
60
  padding: var(--ox-grist-padding);
61
61
 
62
- --mdc-icon-size: var(--grid-record-wide-fontsize);
62
+ --md-icon-size: var(--grid-record-wide-fontsize);
63
63
  }
64
64
 
65
65
  #wrap {
@@ -85,7 +85,7 @@ export class DataGrist extends LitElement implements DataConsumer {
85
85
  box-sizing: border-box;
86
86
  background-color: var(--grist-background-color);
87
87
 
88
- z-index: 1;
88
+ z-index: 2;
89
89
  }
90
90
  `
91
91
  ]
@@ -401,31 +401,32 @@ export class DataGrist extends LitElement implements DataConsumer {
401
401
  .pagination=${this.pagination || {}}
402
402
  ?empty=${empty}
403
403
  >
404
+ <slot name="setting" slot="setting"> </slot>
404
405
  </ox-grid>
405
406
  `
406
407
  : this.mode == 'CARD'
407
- ? html`
408
- <ox-card
409
- id="grist"
410
- .config=${this.compiledConfig}
411
- .data=${this._data}
412
- .sorters=${this.sorters || []}
413
- .filters=${this.filters || []}
414
- ?empty=${empty}
415
- >
416
- </ox-card>
417
- `
418
- : html`
419
- <ox-list
420
- id="grist"
421
- .config=${this.compiledConfig}
422
- .data=${this._data}
423
- .sorters=${this.sorters || []}
424
- .filters=${this.filters || []}
425
- ?empty=${empty}
426
- >
427
- </ox-list>
428
- `}
408
+ ? html`
409
+ <ox-card
410
+ id="grist"
411
+ .config=${this.compiledConfig}
412
+ .data=${this._data}
413
+ .sorters=${this.sorters || []}
414
+ .filters=${this.filters || []}
415
+ ?empty=${empty}
416
+ >
417
+ </ox-card>
418
+ `
419
+ : html`
420
+ <ox-list
421
+ id="grist"
422
+ .config=${this.compiledConfig}
423
+ .data=${this._data}
424
+ .sorters=${this.sorters || []}
425
+ .filters=${this.filters || []}
426
+ ?empty=${empty}
427
+ >
428
+ </ox-list>
429
+ `}
429
430
  </div>
430
431
 
431
432
  <div id="spinner" ?show=${this._showSpinner}></div>
@@ -22,6 +22,18 @@ export class DataListGutter extends LitElement {
22
22
  font-size: var(--grid-record-wide-fontsize);
23
23
  text-overflow: ellipsis;
24
24
  color: var(--grid-record-color);
25
+
26
+ padding-right: 10px;
27
+ }
28
+
29
+ :host-context(.expand)::after {
30
+ content: '';
31
+ position: absolute;
32
+ left: 50%;
33
+ top: 50%;
34
+ transform: translate(-50%, -50%);
35
+ width: 150%;
36
+ height: 220%;
25
37
  }
26
38
 
27
39
  * {
@@ -1,4 +1,4 @@
1
- import '@material/mwc-icon'
1
+ import '@material/web/icon/icon.js'
2
2
  import './record-partial'
3
3
 
4
4
  import { css, html, PropertyValues } from 'lit'
@@ -25,7 +25,7 @@ export class DataList extends DataManipulator {
25
25
  }
26
26
 
27
27
  #upward {
28
- --mdc-icon-size: 26px;
28
+ --md-icon-size: 26px;
29
29
  position: absolute;
30
30
  top: var(--data-list-fab-position-vertical);
31
31
  right: var(--data-list-fab-position-horizontal);
@@ -118,7 +118,7 @@ export class DataList extends DataManipulator {
118
118
  ${this.empty ? html` <ox-empty-note title="NO RECORDS"></ox-empty-note> ` : html``}
119
119
  ${this.isTop
120
120
  ? html``
121
- : html` <mwc-icon id="upward" @click=${(e: Event) => this.gotoTop(e)}>arrow_upward</mwc-icon> `}
121
+ : html` <md-icon id="upward" @click=${(e: Event) => this.gotoTop(e)}>arrow_upward</md-icon> `}
122
122
  `
123
123
  }
124
124
 
@@ -29,6 +29,6 @@ export function recordPartialClickHandler(this: RecordPartial, e: MouseEvent): v
29
29
  rowsClick(this.config.columns, this.data, column, this.record, rowIndex, target)
30
30
  } else {
31
31
  /* content 가 클릭된 경우 - 레코드뷰 팝업을 실행한다. */
32
- this.popupRecordView()
32
+ this.config.rows.editable && this.popupRecordView()
33
33
  }
34
34
  }
@@ -1,4 +1,4 @@
1
- import '@material/mwc-icon'
1
+ import '@material/web/icon/icon.js'
2
2
  import './data-list-gutter'
3
3
  import './data-list-field'
4
4
  import '../record-view'
@@ -39,6 +39,7 @@ export class RecordPartial extends LitElement {
39
39
  border-bottom: var(--data-list-item-border-bottom);
40
40
  position: relative;
41
41
  min-height: 42px;
42
+ padding-left: 7px;
42
43
  }
43
44
 
44
45
  :host([dirty])::before {
@@ -168,32 +169,31 @@ export class RecordPartial extends LitElement {
168
169
  }
169
170
 
170
171
  return html`
171
- ${dirtyIcon ? html` <mwc-icon dirty>${dirtyIcon}</mwc-icon> ` : html``}
172
+ ${dirtyIcon ? html` <md-icon dirty>${dirtyIcon}</md-icon> ` : html``}
172
173
  ${gutters.map(
173
- gutter =>
174
- html`
175
- <ox-list-gutter
176
- .rowIndex=${rowIndex}
177
- .column=${gutter}
178
- .record=${record}
179
- .value=${record[gutter.name]}
180
- ></ox-list-gutter>
181
- `
174
+ gutter => html`
175
+ <ox-list-gutter
176
+ class=${gutter.name === 'detail' ? 'expand' : ''}
177
+ .rowIndex=${rowIndex}
178
+ .column=${gutter}
179
+ .record=${record}
180
+ .value=${record[gutter.name]}
181
+ ></ox-list-gutter>
182
+ `
182
183
  )}
183
184
 
184
185
  <div content>
185
186
  ${displayColumns.map(
186
- (column, idx) =>
187
- html`
188
- <ox-list-field
189
- .rowIndex=${rowIndex}
190
- .column=${column}
191
- .record=${record}
192
- .value=${record[column?.name || '']}
193
- ?name=${idx == 0}
194
- ?desc=${idx == 1}
195
- ></ox-list-field>
196
- `
187
+ (column, idx) => html`
188
+ <ox-list-field
189
+ .rowIndex=${rowIndex}
190
+ .column=${column}
191
+ .record=${record}
192
+ .value=${record[column?.name || '']}
193
+ ?name=${idx == 0}
194
+ ?desc=${idx == 1}
195
+ ></ox-list-field>
196
+ `
197
197
  )}
198
198
  </div>
199
199
  ${thumbnail
@@ -4,8 +4,18 @@ import { html } from 'lit'
4
4
 
5
5
  @customElement('ox-grist-editor-checkbox')
6
6
  export class OxGristEditorCheckbox extends OxGristEditor {
7
- formatFromEditor(e: Event) {
8
- return (e.target as HTMLInputElement).checked
7
+ _onchange(e: Event) {
8
+ e.stopPropagation()
9
+
10
+ const input = e.target as HTMLInputElement
11
+
12
+ this._dirtyValue = this.formatFromEditor(input.checked)
13
+ }
14
+
15
+ formatFromEditor(value: any) {
16
+ if (typeof value == 'boolean') {
17
+ return value
18
+ }
9
19
  }
10
20
 
11
21
  formatForEditor(value: any): any {
@@ -15,8 +15,7 @@ export class OxGristEditorDateTime extends OxGristEditor {
15
15
  return new Date(timestamp - tzoffset).toISOString().slice(0, -1)
16
16
  }
17
17
 
18
- formatFromEditor(e: Event) {
19
- var value = (e.target as HTMLInputElement).value
18
+ formatFromEditor(value: any) {
20
19
  var datetime = new Date(value)
21
20
 
22
21
  return datetime.getTime()
@@ -5,8 +5,18 @@ import { OxGristEditor } from './ox-grist-editor.js'
5
5
 
6
6
  @customElement('ox-grist-editor-file')
7
7
  export class OxGristEditorFile extends OxGristEditor {
8
- formatFromEditor(e: Event): any {
9
- return (e.target as HTMLInputElement).files
8
+ _onchange(e: Event) {
9
+ e.stopPropagation()
10
+
11
+ const input = e.target as HTMLInputElement
12
+
13
+ this._dirtyValue = this.formatFromEditor(input.files)
14
+
15
+ this._onfocusout()
16
+ }
17
+
18
+ formatFromEditor(value: any): any {
19
+ return value
10
20
  }
11
21
 
12
22
  get editorTemplate() {