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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/CHANGELOG.md +287 -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 +37 -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 +1 -1
  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 +217 -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-range-date.js +12 -1
  96. package/dist/src/filters/filter-range-date.js.map +1 -1
  97. package/dist/src/filters/filters-form.d.ts +1 -0
  98. package/dist/src/filters/filters-form.js +41 -23
  99. package/dist/src/filters/filters-form.js.map +1 -1
  100. package/dist/src/gutters/gutter-button.d.ts +1 -1
  101. package/dist/src/gutters/gutter-button.js +3 -3
  102. package/dist/src/gutters/gutter-button.js.map +1 -1
  103. package/dist/src/gutters/gutter-dirty.d.ts +1 -1
  104. package/dist/src/gutters/gutter-dirty.js +5 -5
  105. package/dist/src/gutters/gutter-dirty.js.map +1 -1
  106. package/dist/src/handlers/contextmenu-tree-mutation.js +5 -23
  107. package/dist/src/handlers/contextmenu-tree-mutation.js.map +1 -1
  108. package/dist/src/index.d.ts +0 -1
  109. package/dist/src/index.js +0 -1
  110. package/dist/src/index.js.map +1 -1
  111. package/dist/src/record-view/record-creator.d.ts +2 -2
  112. package/dist/src/record-view/record-creator.js +1 -1
  113. package/dist/src/record-view/record-creator.js.map +1 -1
  114. package/dist/src/record-view/record-view-body.d.ts +3 -3
  115. package/dist/src/record-view/record-view-body.js +4 -4
  116. package/dist/src/record-view/record-view-body.js.map +1 -1
  117. package/dist/src/record-view/record-view.d.ts +2 -2
  118. package/dist/src/record-view/record-view.js +5 -5
  119. package/dist/src/record-view/record-view.js.map +1 -1
  120. package/dist/src/renderers/ox-grist-renderer-progress.d.ts +1 -1
  121. package/dist/src/renderers/ox-grist-renderer-tree.d.ts +1 -1
  122. package/dist/src/renderers/ox-grist-renderer.d.ts +2 -2
  123. package/dist/src/sorters/sorters-control.js +3 -3
  124. package/dist/src/sorters/sorters-control.js.map +1 -1
  125. package/dist/src/types.d.ts +1 -8
  126. package/dist/src/types.js.map +1 -1
  127. package/dist/stories/accumulator.stories.d.ts +1 -1
  128. package/dist/stories/accumulator.stories.js +126 -112
  129. package/dist/stories/accumulator.stories.js.map +1 -1
  130. package/dist/stories/barcode-input-filter.stories.d.ts +1 -1
  131. package/dist/stories/barcode-input-filter.stories.js +80 -72
  132. package/dist/stories/barcode-input-filter.stories.js.map +1 -1
  133. package/dist/stories/default-filters.stories.d.ts +1 -1
  134. package/dist/stories/default-filters.stories.js +80 -72
  135. package/dist/stories/default-filters.stories.js.map +1 -1
  136. package/dist/stories/dynamic-editable.stories.d.ts +1 -1
  137. package/dist/stories/dynamic-editable.stories.js +100 -79
  138. package/dist/stories/dynamic-editable.stories.js.map +1 -1
  139. package/dist/stories/empty-sorters.stories.d.ts +1 -1
  140. package/dist/stories/empty-sorters.stories.js +80 -71
  141. package/dist/stories/empty-sorters.stories.js.map +1 -1
  142. package/dist/stories/explicit-fetch.stories.d.ts +1 -1
  143. package/dist/stories/explicit-fetch.stories.js +81 -72
  144. package/dist/stories/explicit-fetch.stories.js.map +1 -1
  145. package/dist/stories/fixed-column.stories.d.ts +1 -1
  146. package/dist/stories/fixed-column.stories.js +122 -113
  147. package/dist/stories/fixed-column.stories.js.map +1 -1
  148. package/dist/stories/grist-modes.stories.d.ts +1 -1
  149. package/dist/stories/grist-modes.stories.js +155 -125
  150. package/dist/stories/grist-modes.stories.js.map +1 -1
  151. package/dist/stories/group-header.stories.d.ts +1 -1
  152. package/dist/stories/group-header.stories.js +122 -113
  153. package/dist/stories/group-header.stories.js.map +1 -1
  154. package/dist/stories/textarea.stories.d.ts +1 -1
  155. package/dist/stories/textarea.stories.js +113 -104
  156. package/dist/stories/textarea.stories.js.map +1 -1
  157. package/dist/stories/tree-column-with-checkbox.stories.d.ts +1 -1
  158. package/dist/stories/tree-column-with-checkbox.stories.js +126 -117
  159. package/dist/stories/tree-column-with-checkbox.stories.js.map +1 -1
  160. package/dist/stories/tree-column.stories.d.ts +1 -1
  161. package/dist/stories/tree-column.stories.js +126 -117
  162. package/dist/stories/tree-column.stories.js.map +1 -1
  163. package/dist/tsconfig.tsbuildinfo +1 -1
  164. package/docs/default-value/default-value.md +1 -1
  165. package/docs/default-value/value-generator/date-generator.md +2 -2
  166. package/docs/default-value/value-generator/month-date-generator.md +2 -2
  167. package/docs/default-value/value-generator/week-date-generator.md +2 -2
  168. package/docs/default-value/value-generator/year-date-generator.md +2 -2
  169. package/package.json +21 -20
  170. package/src/configure/rows-option-builder.ts +11 -1
  171. package/src/configure/zero-config.ts +1 -0
  172. package/src/data-card/data-card-gutter-menu.ts +5 -5
  173. package/src/data-card/data-card.ts +3 -3
  174. package/src/data-card/event-handlers/record-card-click-handler.ts +1 -1
  175. package/src/data-card/record-card.ts +30 -32
  176. package/src/data-grid/data-grid-accum-field.ts +8 -3
  177. package/src/data-grid/data-grid-body.ts +10 -5
  178. package/src/data-grid/data-grid-field.ts +1 -1
  179. package/src/data-grid/data-grid-footer.ts +18 -11
  180. package/src/data-grid/data-grid-header.ts +67 -65
  181. package/src/data-grid/data-grid.ts +3 -3
  182. package/src/data-grist.ts +274 -27
  183. package/src/data-list/data-list-gutter.ts +12 -0
  184. package/src/data-list/data-list.ts +3 -3
  185. package/src/data-list/event-handlers/record-partial-click-handler.ts +1 -1
  186. package/src/data-list/record-partial.ts +22 -22
  187. package/src/data-manipulator.ts +52 -31
  188. package/src/editors/ox-grist-editor-checkbox.ts +12 -2
  189. package/src/editors/ox-grist-editor-datetime.ts +1 -2
  190. package/src/editors/ox-grist-editor-file.ts +12 -2
  191. package/src/editors/ox-grist-editor-image.ts +10 -7
  192. package/src/editors/ox-grist-editor-number.ts +11 -9
  193. package/src/editors/ox-grist-editor-text.ts +4 -0
  194. package/src/editors/ox-grist-editor-textarea.ts +4 -0
  195. package/src/editors/ox-grist-editor.ts +14 -10
  196. package/src/empty-note.ts +3 -3
  197. package/src/filters/filter-range-date.ts +16 -1
  198. package/src/filters/filters-form.ts +69 -46
  199. package/src/gutters/gutter-button.ts +3 -3
  200. package/src/gutters/gutter-dirty.ts +5 -5
  201. package/src/handlers/contextmenu-tree-mutation.ts +5 -23
  202. package/src/index.ts +0 -1
  203. package/src/record-view/record-creator.ts +1 -1
  204. package/src/record-view/record-view-body.ts +4 -4
  205. package/src/record-view/record-view.ts +5 -5
  206. package/src/sorters/sorters-control.ts +3 -3
  207. package/src/types.ts +1 -9
  208. package/stories/accumulator.stories.ts +128 -118
  209. package/stories/barcode-input-filter.stories.ts +91 -82
  210. package/stories/default-filters.stories.ts +91 -82
  211. package/stories/dynamic-editable.stories.ts +108 -86
  212. package/stories/empty-sorters.stories.ts +92 -82
  213. package/stories/explicit-fetch.stories.ts +93 -83
  214. package/stories/fixed-column.stories.ts +134 -124
  215. package/stories/grist-modes.stories.ts +167 -141
  216. package/stories/group-header.stories.ts +134 -124
  217. package/stories/textarea.stories.ts +115 -110
  218. package/stories/tree-column-with-checkbox.stories.ts +134 -124
  219. package/stories/tree-column.stories.ts +134 -124
  220. package/themes/grist-theme.css +1 -1
  221. package/dist/src/value-generator/date-generator.d.ts +0 -6
  222. package/dist/src/value-generator/date-generator.js +0 -30
  223. package/dist/src/value-generator/date-generator.js.map +0 -1
  224. package/dist/src/value-generator/hour-time-generator.d.ts +0 -7
  225. package/dist/src/value-generator/hour-time-generator.js +0 -29
  226. package/dist/src/value-generator/hour-time-generator.js.map +0 -1
  227. package/dist/src/value-generator/index.d.ts +0 -1
  228. package/dist/src/value-generator/index.js +0 -2
  229. package/dist/src/value-generator/index.js.map +0 -1
  230. package/dist/src/value-generator/minute-time-generator.d.ts +0 -7
  231. package/dist/src/value-generator/minute-time-generator.js +0 -29
  232. package/dist/src/value-generator/minute-time-generator.js.map +0 -1
  233. package/dist/src/value-generator/month-date-generator.d.ts +0 -7
  234. package/dist/src/value-generator/month-date-generator.js +0 -31
  235. package/dist/src/value-generator/month-date-generator.js.map +0 -1
  236. package/dist/src/value-generator/now-generator.d.ts +0 -4
  237. package/dist/src/value-generator/now-generator.js +0 -8
  238. package/dist/src/value-generator/now-generator.js.map +0 -1
  239. package/dist/src/value-generator/registry.d.ts +0 -11
  240. package/dist/src/value-generator/registry.js +0 -50
  241. package/dist/src/value-generator/registry.js.map +0 -1
  242. package/dist/src/value-generator/time-generator.d.ts +0 -6
  243. package/dist/src/value-generator/time-generator.js +0 -28
  244. package/dist/src/value-generator/time-generator.js.map +0 -1
  245. package/dist/src/value-generator/today-generator.d.ts +0 -4
  246. package/dist/src/value-generator/today-generator.js +0 -8
  247. package/dist/src/value-generator/today-generator.js.map +0 -1
  248. package/dist/src/value-generator/week-date-generator.d.ts +0 -7
  249. package/dist/src/value-generator/week-date-generator.js +0 -29
  250. package/dist/src/value-generator/week-date-generator.js.map +0 -1
  251. package/dist/src/value-generator/year-date-generator.d.ts +0 -7
  252. package/dist/src/value-generator/year-date-generator.js +0 -29
  253. package/dist/src/value-generator/year-date-generator.js.map +0 -1
  254. package/src/value-generator/date-generator.ts +0 -35
  255. package/src/value-generator/hour-time-generator.ts +0 -43
  256. package/src/value-generator/index.ts +0 -1
  257. package/src/value-generator/minute-time-generator.ts +0 -43
  258. package/src/value-generator/month-date-generator.ts +0 -38
  259. package/src/value-generator/now-generator.ts +0 -10
  260. package/src/value-generator/registry.ts +0 -58
  261. package/src/value-generator/time-generator.ts +0 -33
  262. package/src/value-generator/today-generator.ts +0 -10
  263. package/src/value-generator/week-date-generator.ts +0 -40
  264. package/src/value-generator/year-date-generator.ts +0 -36
@@ -1 +1 @@
1
- {"version":3,"file":"data-grid-body.js","sourceRoot":"","sources":["../../../src/data-grid/data-grid-body.ts"],"names":[],"mappings":"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","sourcesContent":["import './data-grid-field'\nimport './data-grid-accum-field'\n\nimport { css, html, LitElement, nothing, PropertyValues } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport debounce from 'lodash-es/debounce'\n\nimport { TooltipStyles } from '@operato/styles'\nimport { sleep, parseToNumberOrNull } from '@operato/utils'\n\nimport { ZERO_CONFIG, ZERO_DATA } from '../configure/zero-config'\nimport { RecordViewHandler } from '../record-view/record-view-handler'\nimport { ColumnConfig, GristConfig, GristData, GristRecord } from '../types'\nimport { supportsPassive } from '../utils'\nimport { dataGridBodyStyle } from './data-grid-body-style'\nimport { DataGridField } from './data-grid-field'\nimport { dataGridBodyClickHandler } from './event-handlers/data-grid-body-click-handler'\nimport { dataGridBodyDblclickHandler } from './event-handlers/data-grid-body-dblclick-handler'\nimport { dataGridBodyFocusChangeHandler } from './event-handlers/data-grid-body-focus-change-handler'\nimport { dataGridBodyContextMenuHandler } from './event-handlers/data-grid-body-contextmenu-handler'\nimport { dataGridBodyKeydownHandler } from './event-handlers/data-grid-body-keydown-handler'\nimport { accumulate } from '../accumulator/accumulator'\n\nconst THRESHOLD = 300\nconst DATA_PADDING = 3\nconst ROW_HEIGHT = 40\nconst GAP_SIZE = 1\n\nfunction calcScrollPos(parent: DataGridBody, child: Element) {\n /* getBoundingClientRect는 safari에서 스크롤 상태에서 다른 브라우저와는 다른 값을 리턴함 - 사파리는 약간 이상 작동함. */\n var { top: ct, left: cl, right: cr, bottom: cb } = child.getBoundingClientRect()\n var { top: pt, left: pl, right: pr, bottom: pb } = parent.getBoundingClientRect()\n var { scrollLeft, scrollTop } = parent\n var scrollbarWidth = parent.clientWidth - parent.offsetWidth\n var scrollbarHeight = parent.clientHeight - parent.offsetHeight\n\n return {\n left: cl < pl ? scrollLeft - (pl - cl) : cr > pr ? scrollLeft - (pr - cr) - scrollbarWidth : undefined,\n top: ct < pt ? scrollTop - (pt - ct) : cb > pb ? scrollTop - (pb - cb) - scrollbarHeight : undefined\n }\n}\n\nconst ZERO_FOCUS = {\n row: 0,\n column: 0\n}\n\n@customElement('ox-grid-body')\nexport class DataGridBody extends LitElement {\n debounce = debounce((scrollTop: number, clientHeight: number) => {\n const maxVisibleRows = Math.ceil(clientHeight / (ROW_HEIGHT + GAP_SIZE))\n const from = Math.max(0, Math.floor(scrollTop / (ROW_HEIGHT + GAP_SIZE)) - maxVisibleRows * DATA_PADDING)\n const to = Math.min(this.data.records?.length || 0, from + maxVisibleRows * (DATA_PADDING * 2 + 1))\n\n this.from = from\n this.to = to\n }, THRESHOLD)\n\n static styles = [\n TooltipStyles,\n dataGridBodyStyle,\n css`\n [select-block] {\n position: absolute;\n left: var(--select-box-left);\n top: var(--select-box-top);\n width: var(--select-box-width);\n height: var(--select-box-height);\n border: var(--grid-record-focused-cell-border);\n background-image: var(--focused-background-image);\n pointer-events: none;\n z-index: 2;\n }\n\n [fixed] {\n position: sticky;\n background-color: var(--grid-record-background-color);\n z-index: 2; /* 고정된 열을 다른 열 위에 표시. */\n }\n\n :host([raised]) [fixed] {\n /* 고정 컬럼이 살짝 올라와 있는 느낌을 표현 */\n box-shadow: 3px 0 3px rgba(0, 0, 0, 0.1);\n }\n\n ox-grid-accum-field {\n position: sticky;\n bottom: 0;\n z-index: 1;\n }\n\n ox-grid-accum-field[fixed] {\n background-color: var(--grid-accum-record-background-color, #ccc);\n }\n `\n ]\n\n @property({ type: Object }) config: GristConfig = ZERO_CONFIG\n @property({ type: Array }) columns: ColumnConfig[] = []\n @property({ type: Object }) data: GristData = ZERO_DATA\n @property({ type: Object }) focused: { row: number; column: number } = ZERO_FOCUS\n @property({ type: Object }) editTarget: { row: number; column: number; valueWithEdit: string | null } | null = null\n @property({ type: Number }) from = -1\n @property({ type: Number }) to = -1\n @property({ type: Array }) fixedLefts: number[] = []\n\n @state() _selectBlock?: {\n start: DataGridField\n end?: DataGridField\n }\n\n @query('[select-block]') selectBlock?: HTMLDivElement\n @query('ox-grid-field[focused]') focusedField?: DataGridField\n\n private _focusedListener?: (e: KeyboardEvent) => void\n private _recordView?: any\n private _recordViewRow?: number\n private _draggable?: boolean\n\n resetEdit() {\n this.editTarget = null\n }\n\n handleOnScroll(e: WheelEvent) {\n const { scrollTop, clientHeight } = e.target as HTMLElement\n this.debounce(scrollTop, clientHeight)\n }\n\n // issue #13\n // renderOptimisticRow() {\n // return\n // }\n\n render() {\n // block이 선택되어 있으면, focused row/column은 표현하지 않는다.\n var { row: focusedRow, column: focusedColumn } = (!this._selectBlock && this.focused) || {}\n var { row: editingRow, column: editingColumn, valueWithEdit = null } = this.editTarget || {}\n\n var columns = this.columns.filter(column => !column.hidden)\n var data = this.data\n var { records } = data\n var { appendable, classifier, accumulator } = this.config.rows\n const { start, end } = this._selectBlock || {}\n\n /*\n * 레코드를 추가할 수 있는 경우에는 항상 추가 레코드를 보여준다.\n * 만약, 이전 방식처럼, 커서를 옮겨야만 새로운 레코드가 보이게 하고 싶다면, 조건부를 다음의 코드로 대체한다.\n * -- if (focusedRow == records.length)\n */\n if (appendable) {\n records = [...records, { __dirty__: '+' }]\n }\n\n if (accumulator) {\n var accumRecord = this.buildAccumulatorRecord()\n }\n\n return html`\n ${records.map((record, idxRow) => {\n var attrFocusedRow = idxRow === focusedRow\n var attrSelected = record['__selected__']\n var attrOdd = idxRow % 2\n var dirtyFields = record['__dirtyfields__'] || {}\n var { emphasized } = classifier.call(null, record, idxRow) || {}\n\n return html`\n ${columns.map(\n (column, idxColumn) => html`\n <ox-grid-field\n .data=${data}\n .type=${column.type}\n .rowIndex=${idxRow}\n .columnIndex=${idxColumn}\n .column=${column}\n .record=${record}\n .checked=${record.__selected__ ? 'checked' : record.__check_in_tree__}\n .emphasized=${emphasized}\n ?gutter=${column.type == 'gutter'}\n ?odd=${attrOdd}\n ?focused-row=${attrFocusedRow}\n ?selected-row=${attrSelected}\n ?focused=${idxRow === focusedRow && idxColumn === focusedColumn}\n ?editing=${idxRow === editingRow && idxColumn === editingColumn}\n .valueWithEdit=${valueWithEdit}\n .value=${record[column.name]}\n ?dirty=${!!dirtyFields[column.name]}\n fixed=${ifDefined(this.fixedLefts[idxColumn])}\n ></ox-grid-field>\n `\n )}\n <ox-grid-field\n .data=${data}\n .rowIndex=${idxRow}\n .columnIndex=${-1}\n .record=${record}\n .emphasized=${emphasized}\n ?odd=${attrOdd}\n ?focused-row=${attrFocusedRow}\n ?selected-row=${attrSelected}\n ></ox-grid-field>\n `\n })}\n ${accumulator\n ? html`\n ${columns.map(\n (column, idxColumn) => html`\n <ox-grid-accum-field\n .data=${data}\n .columnIndex=${idxColumn}\n .rowIndex=${records.length}\n .column=${column}\n .record=${accumRecord!}\n .value=${accumRecord[column.name]}\n fixed=${ifDefined(this.fixedLefts[idxColumn])}\n ></ox-grid-accum-field>\n `\n )}\n <ox-grid-accum-field\n .data=${data}\n .columnIndex=${-1}\n .rowIndex=${records.length}\n .record=${accumRecord!}\n ></ox-grid-accum-field>\n `\n : nothing}\n ${start && end && start !== end ? html` <div select-block></div> ` : html``}\n <slot></slot>\n `\n }\n\n firstUpdated() {\n // TODO issue #13\n // this.addEventListener('scroll', this.handleOnScroll.bind(this))\n\n /* focus() 를 받을 수 있도록 함. */\n this.setAttribute('tabindex', '-1')\n\n /*\n * focusout 으로 property를 변경시키는 경우, focusout에 의해 update가 발생하는 경우에는,\n * 그리드 내부의 컴포넌트가 갱신되는 현상을 초래하게 된다.\n * 따라서, focusout 핸들러에서 update를 유발하는 코드는 강력하게 금지시킨다.\n */\n this.addEventListener('focusout', e => {\n if (this._focusedListener) {\n this.removeEventListener('keydown', this._focusedListener)\n delete this._focusedListener\n }\n })\n\n this.addEventListener('focusin', e => {\n if (!this._focusedListener) {\n this._focusedListener = dataGridBodyKeydownHandler.bind(this)\n this.addEventListener('keydown', this._focusedListener)\n }\n })\n\n this.addEventListener('set-select-block', async e => {\n e.stopPropagation()\n\n const { startRow = -1, startColumn = -1, endRow = -1, endColumn = -1 } = ((e as CustomEvent).detail as any) || {}\n\n const start = this.getFieldByIndex(startRow, startColumn) as DataGridField\n const end = this.getFieldByIndex(endRow, endColumn) as DataGridField\n\n this.setSelectBlock(start, end)\n })\n\n this.renderRoot.addEventListener('contextmenu', (event: Event) => {\n const e = event as MouseEvent\n this.setSelectBlock()\n\n this._draggable = false\n\n var target = (e.target as Element).closest('ox-grid-field') as DataGridField\n var { rowIndex, columnIndex } = target || {}\n\n this.dispatchEvent(\n new CustomEvent('focus-change', {\n bubbles: true,\n composed: true,\n detail: {\n row: rowIndex,\n column: columnIndex\n }\n })\n )\n })\n\n this.renderRoot.addEventListener('mousedown', (event: Event) => {\n const e = event as MouseEvent\n this.setSelectBlock()\n\n if (e.buttons !== 1) {\n return\n }\n\n this._draggable = true\n\n var target = (e.target as Element).closest('ox-grid-field') as DataGridField\n var { rowIndex, columnIndex } = target || {}\n\n this.dispatchEvent(\n new CustomEvent('focus-change', {\n bubbles: true,\n composed: true,\n detail: {\n row: rowIndex,\n column: columnIndex\n }\n })\n )\n\n if (columnIndex >= 0 && target.editableOnClick && !isNaN(rowIndex) && !isNaN(columnIndex)) {\n this.startEditTarget(rowIndex, columnIndex)\n }\n })\n\n this.renderRoot.addEventListener('mousemove', (event: Event) => {\n const e = event as MouseEvent\n if (e.buttons !== 1 || !this._draggable) {\n return\n }\n\n const field = e.target as DataGridField\n if (!this._selectBlock) {\n this.setSelectBlock(this.focusedField || field, this.focusedField || field)\n\n return\n }\n\n var { start, end } = this._selectBlock || {}\n\n if (start && end !== field) {\n end = field\n\n this.setSelectBlock(start, end)\n }\n })\n\n this.renderRoot.addEventListener('mouseup', (event: Event) => {\n this._draggable = false\n })\n\n this.renderRoot.addEventListener('click', dataGridBodyClickHandler.bind(this))\n this.renderRoot.addEventListener('dblclick', dataGridBodyDblclickHandler.bind(this))\n this.renderRoot.addEventListener('contextmenu', dataGridBodyContextMenuHandler.bind(this))\n\n this.addEventListener('focus-change', dataGridBodyFocusChangeHandler.bind(this))\n\n this.addEventListener('wheel', this._onWheelEvent.bind(this))\n\n const primaryColor = getComputedStyle(this).getPropertyValue('--primary-color')\n this.style.setProperty(\n '--focused-background-image',\n `url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='10'><rect fill='${primaryColor}' x='0' y='0' width='100%' height='100%' style='opacity:.3'/></svg>\")`\n )\n\n this.addEventListener('show-record-view', (e: Event) =>\n this.popupRecordView((e as CustomEvent).detail as { row: number; record: GristRecord })\n )\n\n this.addEventListener('scroll', function () {\n this.scrollLeft == 0 ? this.removeAttribute('raised') : this.setAttribute('raised', '')\n })\n }\n\n getFieldByIndex(rowIndex: number, columnIndex: number, residue: boolean = true) {\n if (rowIndex < 0) {\n return\n }\n\n var columns = this.columns.filter(column => !column.hidden).length\n if (!residue && columnIndex >= columns) {\n return\n }\n\n return this.renderRoot.children.item(\n rowIndex * (columns + 1) /* 1 means last dummy column */ + ((columnIndex + columns) % columns)\n ) as DataGridField\n }\n\n _onWheelEvent(e: WheelEvent) {\n if (this.scrollHeight <= this.clientHeight) {\n var delta = Math.max(-1, Math.min(1, e.deltaY || 0))\n this.scrollLeft = Math.max(0, this.scrollLeft - delta * 40)\n\n var maxScrollLeft = this.scrollWidth - this.clientWidth\n\n var atStart = this.scrollLeft === 0\n var atEnd = this.scrollLeft === maxScrollLeft\n\n // 스크롤이 맨 앞으로 와 있는 상태에서 휠을 올리는 경우 또는\n // 스크롤이 맨 끝으로 가 있는 상태에서 휠을 내리는 경우에만 디폴트 동작 허용\n if ((atStart && delta > 0) || (atEnd && delta < 0)) {\n return true\n }\n\n e.preventDefault()\n }\n }\n\n startEditTarget(row: number, column: number, valueWithEdit: string | null = null) {\n var { editable } = this.columns.filter(column => !column.hidden)[column].record\n if (typeof editable === 'function') {\n const curRow = this.data.records[row] || {}\n const curCol = this.columns[column + 1]\n editable = editable.call(this, curRow[curCol.name], curCol, curRow, row, this)\n }\n\n if (!editable) {\n return\n }\n\n if (this.editTarget && this.editTarget.row == row && this.editTarget.column == column) {\n return\n }\n\n this.editTarget = {\n row,\n column,\n valueWithEdit\n }\n }\n\n shouldUpdate(changes: any) {\n if (!changes.has('editTarget')) {\n /*\n * 큰 변화에 대해서는 실제 update가 발생되기 전에 editTarget을 초기화한다.\n */\n this.editTarget = null\n }\n\n return super.shouldUpdate(changes)\n }\n\n updated(changes: PropertyValues<this>) {\n if (changes.has('focused')) {\n let element = this.renderRoot?.querySelector('[focused]')\n if (!element) {\n return\n }\n\n let { top, left } = calcScrollPos(this, element)\n // TODO this.scroll()을 사용하면, 효과가 좋으나 left 계산에 문제가 있는 것 같음.\n // this.scroll({\n // top,\n // left,\n // behavior: 'smooth'\n // })\n if (top !== undefined) {\n this.scrollTop = top\n }\n if (left !== undefined) {\n this.scrollLeft = left\n }\n }\n\n if (this._recordView) {\n this._recordView.record = this.data.records[this._recordViewRow!]\n }\n }\n\n focus() {\n super.focus()\n\n if (this.focused === ZERO_FOCUS) {\n let { records } = this.data\n let row = records.findIndex(record => record['__selected__'])\n\n this.focused = { row: row == -1 ? 0 : row, column: 0 }\n }\n }\n\n popupRecordView({ record, row }: { row: number; record: GristRecord }) {\n var titleField = this.config.list.fields[0] || 'name'\n var title = record[titleField]\n\n /* field가 오브젝트형인 경우에는 렌더러를 타이틀로 사용한다. */\n if (typeof title == 'object') {\n var column = this.config.columns.find(column => column.name == titleField)\n title = column?.record.renderer(title, column, record, row, this /* cautious */)\n }\n\n this._recordViewRow = row\n this._recordView = RecordViewHandler(\n this.config.columns,\n record,\n row,\n this,\n {\n title\n },\n () => {\n delete this._recordView\n delete this._recordViewRow\n }\n )\n }\n\n getSelectedBlockValues(): Array<Array<any>> | any | undefined {\n var { start, end } = this._selectBlock || {}\n\n if (!(start && end)) {\n start = this.focusedField\n\n end = start\n }\n\n if (start && end) {\n const startRowIndex = start.rowIndex < end.rowIndex ? start.rowIndex : end.rowIndex\n const endRowIndex = start.rowIndex < end.rowIndex ? end.rowIndex : start.rowIndex\n const startColumnIndex = start.columnIndex < end.columnIndex ? start.columnIndex : end.columnIndex\n const endColumnIndex = start.columnIndex < end.columnIndex ? end.columnIndex : start.columnIndex\n\n const columnArray = new Array(endColumnIndex - startColumnIndex + 1).fill(startColumnIndex)\n const columns = this.columns.filter(column => !column.hidden)\n\n return (\n '<table>' +\n new Array(endRowIndex - startRowIndex + 1)\n .fill(startRowIndex)\n .map((start, index) => {\n const rowIndex = start + index\n const record = this.data.records[rowIndex]\n\n const tds = columnArray\n .map((start, index) => {\n const columnIndex = start + index\n const column = columns[columnIndex]\n const value = record?.[column.name]\n const type = typeof value\n const text =\n value === undefined || value === null ? '' : type == 'object' ? JSON.stringify(value) : value\n\n return `<td type=${type}>${text}</td>`\n })\n .join('')\n return `<tr>${tds}</tr>`\n })\n .join('') +\n '</table>'\n )\n }\n }\n\n async copy() {\n const copied = this.getSelectedBlockValues()\n\n await navigator.clipboard.write([\n new ClipboardItem({\n 'text/html': new Blob([copied], { type: 'text/html' }),\n 'text/plain': new Blob([copied], { type: 'text/plain' })\n })\n ])\n\n const selectBlock = this.selectBlock || this.focusedField\n if (selectBlock) {\n const backgroundColor = selectBlock.style.backgroundColor\n const opacity = selectBlock.style.opacity\n\n selectBlock.setAttribute('data-tooltip', 'copied to clipboard!')\n selectBlock.style.backgroundColor = 'red'\n selectBlock.style.opacity = '0.5'\n await sleep(500)\n selectBlock.removeAttribute('data-tooltip')\n selectBlock.style.backgroundColor = backgroundColor\n selectBlock.style.opacity = opacity\n }\n }\n\n async paste() {\n try {\n const selection = window.getSelection()\n\n const clipboardItems = await navigator.clipboard.read()\n if (!clipboardItems) {\n return\n }\n\n var type: string | undefined\n var content: string | undefined\n\n for (const clipboardItem of clipboardItems) {\n try {\n var blob = await clipboardItem.getType('text/html')\n content = blob && (await blob.text())\n type = 'text/html'\n } catch (e) {\n try {\n blob = await clipboardItem.getType('text/plain')\n content = blob && (await blob.text())\n type = 'text/plain'\n } catch (e) {}\n }\n\n break\n }\n\n if (!content) {\n return\n }\n\n const { row, column } = this.focused\n const { records } = this.data\n const columns = this.columns.filter(column => !column.hidden)\n\n if (type === 'text/html') {\n const div = document.createElement('div')\n div.innerHTML = content!.trim()\n const table = div.querySelector('table') as HTMLTableElement\n if (!table) {\n return\n }\n\n if (selection) {\n this.resetEdit()\n selection.removeAllRanges()\n\n // 포커스가 빠지기 전에 isWorking으로 focusout 이벤트에 대한 값 변경을 막음\n this.focusedField!.isWorking = true\n await this.updateComplete\n this.focusedField!.isWorking = false\n }\n const rows = table.querySelectorAll('tr')\n\n rows.forEach((record, rowIndex) => {\n if (!(record instanceof HTMLTableRowElement)) {\n return\n }\n\n var targetRecord = records[row + rowIndex] || { __dirty__: '+' }\n if (row + rowIndex >= records.length) {\n records.push(targetRecord)\n }\n\n const cells = record.querySelectorAll('td')\n cells.forEach((item, columnIndex) => {\n const targetColumn = columns[column + columnIndex]\n var value = item.textContent as any\n let type = targetColumn.type || item.getAttribute('type') || 'string'\n type = type.includes('object') ? 'object' : type // 오브젝트 타입 예외처리\n let { editable } = targetColumn.record\n if (typeof editable === 'function') {\n editable = editable.call(this, value, targetColumn, targetRecord, row, this)\n }\n\n switch (type) {\n case 'object':\n try {\n value = JSON.parse(value || 'null')\n } catch (err) {}\n break\n case 'boolean':\n value = !!value && !!String(value).match(/true/i)\n break\n case 'number':\n value = parseToNumberOrNull(value)\n break\n default:\n value = value\n }\n\n if (targetColumn && !targetColumn.gutterName && editable) {\n this.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: targetRecord[targetColumn.name],\n after: value,\n column: targetColumn,\n record: targetRecord,\n row: row + rowIndex\n }\n })\n )\n }\n })\n })\n\n return\n } else if (!selection && type === 'text/plain') {\n const targetRecord = records[row] || { __dirty__: '+' }\n const targetColumn = columns[column]\n let { editable } = targetColumn.record\n if (typeof editable === 'function') {\n editable = editable.call(this, content, targetColumn, targetRecord, row, this)\n }\n\n if (targetColumn && !targetColumn.gutterName && editable) {\n this.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: targetRecord[targetColumn.name],\n after: content,\n column: targetColumn,\n record: targetRecord,\n row: row\n }\n })\n )\n }\n }\n } catch (e) {}\n }\n\n setSelectBlock(start?: DataGridField, end?: DataGridField) {\n if (start?.columnIndex == -1) {\n start = this.getFieldByIndex(start.rowIndex, this.columns.filter(column => !column.hidden).length - 1)\n }\n\n if (end?.columnIndex == -1) {\n end = this.getFieldByIndex(end.rowIndex, this.columns.filter(column => !column.hidden).length - 1)\n }\n\n this._selectBlock = start && { start, end }\n\n if (start && end) {\n window.getSelection()?.removeAllRanges()\n\n if (start !== end) {\n const left = start.columnIndex < end.columnIndex ? start : end\n const right = left === start ? end : start\n const top = start.rowIndex < end.rowIndex ? start : end\n const bottom = top === start ? end : start\n\n const { offsetLeft } = left\n const { offsetTop } = top\n const width = right.offsetLeft - offsetLeft + right.offsetWidth\n const height = bottom.offsetTop - offsetTop + bottom.offsetHeight\n\n this.style.setProperty('--select-box-left', offsetLeft - 1 + 'px')\n this.style.setProperty('--select-box-top', offsetTop - 1 + 'px')\n this.style.setProperty('--select-box-width', width + 'px')\n this.style.setProperty('--select-box-height', height + 'px')\n }\n\n this.focus()\n }\n }\n\n buildAccumulatorRecord(): GristRecord {\n var columns = this.columns.filter(column => !column.hidden)\n\n return columns.reduce((record, column) => {\n if (column.accumulator) {\n record[column.name] = accumulate(this.data, column, column.accumulator)\n }\n return record\n }, {} as GristRecord)\n }\n}\n"]}
1
+ {"version":3,"file":"data-grid-body.js","sourceRoot":"","sources":["../../../src/data-grid/data-grid-body.ts"],"names":[],"mappings":"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","sourcesContent":["import './data-grid-field'\nimport './data-grid-accum-field'\n\nimport { css, html, LitElement, nothing, PropertyValues } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport debounce from 'lodash-es/debounce'\n\nimport { TooltipStyles } from '@operato/styles'\nimport { sleep, parseToNumberOrNull } from '@operato/utils'\n\nimport { ZERO_CONFIG, ZERO_DATA } from '../configure/zero-config'\nimport { RecordViewHandler } from '../record-view/record-view-handler'\nimport { ColumnConfig, GristConfig, GristData, GristRecord } from '../types'\nimport { supportsPassive } from '../utils'\nimport { dataGridBodyStyle } from './data-grid-body-style'\nimport { DataGridField } from './data-grid-field'\nimport { dataGridBodyClickHandler } from './event-handlers/data-grid-body-click-handler'\nimport { dataGridBodyDblclickHandler } from './event-handlers/data-grid-body-dblclick-handler'\nimport { dataGridBodyFocusChangeHandler } from './event-handlers/data-grid-body-focus-change-handler'\nimport { dataGridBodyContextMenuHandler } from './event-handlers/data-grid-body-contextmenu-handler'\nimport { dataGridBodyKeydownHandler } from './event-handlers/data-grid-body-keydown-handler'\nimport { accumulate } from '../accumulator/accumulator'\n\nconst THRESHOLD = 300\nconst DATA_PADDING = 3\nconst ROW_HEIGHT = 40\nconst GAP_SIZE = 1\n\nfunction calcScrollPos(parent: DataGridBody, child: Element) {\n /* getBoundingClientRect는 safari에서 스크롤 상태에서 다른 브라우저와는 다른 값을 리턴함 - 사파리는 약간 이상 작동함. */\n var { top: ct, left: cl, right: cr, bottom: cb } = child.getBoundingClientRect()\n var { top: pt, left: pl, right: pr, bottom: pb } = parent.getBoundingClientRect()\n var { scrollLeft, scrollTop } = parent\n var scrollbarWidth = parent.clientWidth - parent.offsetWidth\n var scrollbarHeight = parent.clientHeight - parent.offsetHeight\n\n return {\n left: cl < pl ? scrollLeft - (pl - cl) : cr > pr ? scrollLeft - (pr - cr) - scrollbarWidth : undefined,\n top: ct < pt ? scrollTop - (pt - ct) : cb > pb ? scrollTop - (pb - cb) - scrollbarHeight : undefined\n }\n}\n\nconst ZERO_FOCUS = {\n row: 0,\n column: 0\n}\n\n@customElement('ox-grid-body')\nexport class DataGridBody extends LitElement {\n debounce = debounce((scrollTop: number, clientHeight: number) => {\n const maxVisibleRows = Math.ceil(clientHeight / (ROW_HEIGHT + GAP_SIZE))\n const from = Math.max(0, Math.floor(scrollTop / (ROW_HEIGHT + GAP_SIZE)) - maxVisibleRows * DATA_PADDING)\n const to = Math.min(this.data.records?.length || 0, from + maxVisibleRows * (DATA_PADDING * 2 + 1))\n\n this.from = from\n this.to = to\n }, THRESHOLD)\n\n static styles = [\n TooltipStyles,\n dataGridBodyStyle,\n css`\n [select-block] {\n position: absolute;\n left: var(--select-box-left);\n top: var(--select-box-top);\n width: var(--select-box-width);\n height: var(--select-box-height);\n border: var(--grid-record-focused-cell-border);\n background-image: var(--focused-background-image);\n pointer-events: none;\n z-index: 2;\n }\n\n [fixed] {\n position: sticky;\n background-color: var(--grid-record-background-color);\n z-index: 2; /* 고정된 열을 다른 열 위에 표시. */\n }\n\n :host([raised]) [fixed] {\n /* 고정 컬럼이 살짝 올라와 있는 느낌을 표현 */\n box-shadow: 3px 0 3px rgba(0, 0, 0, 0.1);\n }\n\n ox-grid-accum-field {\n position: sticky;\n bottom: 0;\n z-index: 1;\n }\n\n ox-grid-accum-field[fixed] {\n background-color: var(--grid-accum-record-background-color, #ccc);\n }\n `\n ]\n\n @property({ type: Object }) config: GristConfig = ZERO_CONFIG\n @property({ type: Array }) columns: ColumnConfig[] = []\n @property({ type: Object }) data: GristData = ZERO_DATA\n @property({ type: Object }) focused: { row: number; column: number } = ZERO_FOCUS\n @property({ type: Object }) editTarget: { row: number; column: number; valueWith: string | null } | null = null\n @property({ type: Number }) from = -1\n @property({ type: Number }) to = -1\n @property({ type: Array }) fixedLefts: number[] = []\n\n @state() _selectBlock?: {\n start: DataGridField\n end?: DataGridField\n }\n\n @query('[select-block]') selectBlock?: HTMLDivElement\n @query('ox-grid-field[focused]') focusedField?: DataGridField\n\n private _focusedListener?: (e: KeyboardEvent) => void\n private _recordView?: any\n private _recordViewRow?: number\n private _draggable?: boolean\n\n resetEdit() {\n this.editTarget = null\n }\n\n handleOnScroll(e: WheelEvent) {\n const { scrollTop, clientHeight } = e.target as HTMLElement\n this.debounce(scrollTop, clientHeight)\n }\n\n // issue #13\n // renderOptimisticRow() {\n // return\n // }\n\n render() {\n // block이 선택되어 있으면, focused row/column은 표현하지 않는다.\n var { row: focusedRow, column: focusedColumn } = (!this._selectBlock && this.focused) || {}\n var { row: editingRow, column: editingColumn, valueWith = null } = this.editTarget || {}\n\n var columns = this.columns.filter(column => !column.hidden)\n var data = this.data\n var { records } = data\n var { appendable, classifier, accumulator } = this.config.rows\n const { start, end } = this._selectBlock || {}\n\n /*\n * 레코드를 추가할 수 있는 경우에는 항상 추가 레코드를 보여준다.\n * 만약, 이전 방식처럼, 커서를 옮겨야만 새로운 레코드가 보이게 하고 싶다면, 조건부를 다음의 코드로 대체한다.\n * -- if (focusedRow == records.length)\n */\n if (appendable) {\n records = [...records, { __dirty__: '+' }]\n }\n\n if (accumulator) {\n var accumRecord = this.buildAccumulatorRecord()\n }\n\n return html`\n ${records.map((record, idxRow) => {\n var attrFocusedRow = idxRow === focusedRow\n var attrSelected = record['__selected__']\n var attrOdd = idxRow % 2\n var dirtyFields = record['__dirtyfields__'] || {}\n var { emphasized } = classifier.call(null, record, idxRow) || {}\n\n return html`\n ${columns.map(\n (column, idxColumn) => html`\n <ox-grid-field\n .data=${data}\n .type=${column.type}\n .rowIndex=${idxRow}\n .columnIndex=${idxColumn}\n .column=${column}\n .record=${record}\n .checked=${record.__selected__ ? 'checked' : record.__check_in_tree__}\n .emphasized=${emphasized}\n ?gutter=${column.type == 'gutter'}\n ?odd=${attrOdd}\n ?focused-row=${attrFocusedRow}\n ?selected-row=${attrSelected}\n ?focused=${idxRow === focusedRow && idxColumn === focusedColumn}\n ?editing=${idxRow === editingRow && idxColumn === editingColumn}\n .valueWith=${valueWith}\n .value=${record[column.name]}\n ?dirty=${!!dirtyFields[column.name]}\n fixed=${ifDefined(this.fixedLefts[idxColumn])}\n ></ox-grid-field>\n `\n )}\n <ox-grid-field\n .data=${data}\n .rowIndex=${idxRow}\n .columnIndex=${-1}\n .record=${record}\n .emphasized=${emphasized}\n ?odd=${attrOdd}\n ?focused-row=${attrFocusedRow}\n ?selected-row=${attrSelected}\n ></ox-grid-field>\n `\n })}\n ${accumulator\n ? html`\n ${columns.map(\n (column, idxColumn) => html`\n <ox-grid-accum-field\n .data=${data}\n .columnIndex=${idxColumn}\n .rowIndex=${records.length}\n .column=${column}\n .record=${accumRecord!}\n .value=${accumRecord[column.name]}\n fixed=${ifDefined(this.fixedLefts[idxColumn])}\n ></ox-grid-accum-field>\n `\n )}\n <ox-grid-accum-field\n .data=${data}\n .columnIndex=${-1}\n .rowIndex=${records.length}\n .record=${accumRecord!}\n ></ox-grid-accum-field>\n `\n : nothing}\n ${start && end && start !== end ? html` <div select-block></div> ` : html``}\n <slot></slot>\n `\n }\n\n firstUpdated() {\n // TODO issue #13\n // this.addEventListener('scroll', this.handleOnScroll.bind(this))\n\n /* focus() 를 받을 수 있도록 함. */\n this.setAttribute('tabindex', '-1')\n\n /*\n * focusout 으로 property를 변경시키는 경우, focusout에 의해 update가 발생하는 경우에는,\n * 그리드 내부의 컴포넌트가 갱신되는 현상을 초래하게 된다.\n * 따라서, focusout 핸들러에서 update를 유발하는 코드는 강력하게 금지시킨다.\n */\n this.addEventListener('focusout', e => {\n if (this._focusedListener) {\n this.removeEventListener('keydown', this._focusedListener)\n delete this._focusedListener\n }\n })\n\n this.addEventListener('focusin', e => {\n if (!this._focusedListener) {\n this._focusedListener = dataGridBodyKeydownHandler.bind(this)\n this.addEventListener('keydown', this._focusedListener)\n }\n })\n\n this.addEventListener('set-select-block', async e => {\n e.stopPropagation()\n\n const { startRow = -1, startColumn = -1, endRow = -1, endColumn = -1 } = ((e as CustomEvent).detail as any) || {}\n\n const start = this.getFieldByIndex(startRow, startColumn) as DataGridField\n const end = this.getFieldByIndex(endRow, endColumn) as DataGridField\n\n this.setSelectBlock(start, end)\n })\n\n this.renderRoot.addEventListener('contextmenu', (event: Event) => {\n const e = event as MouseEvent\n this.setSelectBlock()\n\n this._draggable = false\n\n var target = (e.target as Element).closest('ox-grid-field') as DataGridField\n var { rowIndex, columnIndex } = target || {}\n\n this.dispatchEvent(\n new CustomEvent('focus-change', {\n bubbles: true,\n composed: true,\n detail: {\n row: rowIndex,\n column: columnIndex\n }\n })\n )\n })\n\n this.renderRoot.addEventListener('mousedown', (event: Event) => {\n const e = event as MouseEvent\n this.setSelectBlock()\n\n if (e.buttons !== 1) {\n return\n }\n\n this._draggable = true\n\n var target = (e.target as Element).closest('ox-grid-field') as DataGridField\n var { rowIndex, columnIndex } = target || {}\n\n this.dispatchEvent(\n new CustomEvent('focus-change', {\n bubbles: true,\n composed: true,\n detail: {\n row: rowIndex,\n column: columnIndex\n }\n })\n )\n\n if (columnIndex >= 0 && target.editableOnClick && !isNaN(rowIndex) && !isNaN(columnIndex)) {\n this.startEditTarget(rowIndex, columnIndex)\n }\n })\n\n this.renderRoot.addEventListener('mousemove', (event: Event) => {\n const e = event as MouseEvent\n if (e.buttons !== 1 || !this._draggable) {\n return\n }\n\n const field = e.target as DataGridField\n if (!this._selectBlock) {\n this.setSelectBlock(this.focusedField || field, this.focusedField || field)\n\n return\n }\n\n var { start, end } = this._selectBlock || {}\n\n if (start && end !== field) {\n end = field\n\n this.setSelectBlock(start, end)\n }\n })\n\n this.renderRoot.addEventListener('mouseup', (event: Event) => {\n this._draggable = false\n })\n\n this.renderRoot.addEventListener('click', dataGridBodyClickHandler.bind(this))\n this.renderRoot.addEventListener('dblclick', dataGridBodyDblclickHandler.bind(this))\n this.renderRoot.addEventListener('contextmenu', dataGridBodyContextMenuHandler.bind(this))\n\n this.addEventListener('focus-change', dataGridBodyFocusChangeHandler.bind(this))\n\n this.addEventListener('wheel', this._onWheelEvent.bind(this))\n\n const primaryColor = getComputedStyle(this).getPropertyValue('--primary-color')\n this.style.setProperty(\n '--focused-background-image',\n `url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='10'><rect fill='${primaryColor}' x='0' y='0' width='100%' height='100%' style='opacity:.3'/></svg>\")`\n )\n\n this.addEventListener('show-record-view', (e: Event) =>\n this.popupRecordView((e as CustomEvent).detail as { row: number; record: GristRecord })\n )\n\n this.addEventListener('scroll', function () {\n this.scrollLeft == 0 ? this.removeAttribute('raised') : this.setAttribute('raised', '')\n })\n }\n\n getFieldByIndex(rowIndex: number, columnIndex: number, residue: boolean = true) {\n if (rowIndex < 0) {\n return\n }\n\n var columns = this.columns.filter(column => !column.hidden).length\n if (!residue && columnIndex >= columns) {\n return\n }\n\n return this.renderRoot.children.item(\n rowIndex * (columns + 1) /* 1 means last dummy column */ + ((columnIndex + columns) % columns)\n ) as DataGridField\n }\n\n _onWheelEvent(e: WheelEvent) {\n if (this.scrollHeight <= this.clientHeight) {\n var delta = Math.max(-1, Math.min(1, e.deltaY || 0))\n this.scrollLeft = Math.max(0, this.scrollLeft - delta * 40)\n\n var maxScrollLeft = this.scrollWidth - this.clientWidth\n\n var atStart = this.scrollLeft === 0\n var atEnd = this.scrollLeft === maxScrollLeft\n\n // 스크롤이 맨 앞으로 와 있는 상태에서 휠을 올리는 경우 또는\n // 스크롤이 맨 끝으로 가 있는 상태에서 휠을 내리는 경우에만 디폴트 동작 허용\n if ((atStart && delta > 0) || (atEnd && delta < 0)) {\n return true\n }\n\n e.preventDefault()\n }\n }\n\n startEditTarget(row: number, column: number, valueWith: string | null = null) {\n var { editable } = this.columns.filter(column => !column.hidden)[column].record\n if (typeof editable === 'function') {\n const curRow = this.data.records[row] || {}\n const curCol = this.columns[column + 1]\n editable = editable.call(this, curRow[curCol.name], curCol, curRow, row, this)\n }\n\n if (!editable) {\n return\n }\n\n if (this.editTarget && this.editTarget.row == row && this.editTarget.column == column) {\n return\n }\n\n this.editTarget = {\n row,\n column,\n valueWith\n }\n }\n\n shouldUpdate(changes: any) {\n if (!changes.has('editTarget')) {\n /*\n * 큰 변화에 대해서는 실제 update가 발생되기 전에 editTarget을 초기화한다.\n */\n this.editTarget = null\n }\n\n return super.shouldUpdate(changes)\n }\n\n updated(changes: PropertyValues<this>) {\n if (changes.has('focused')) {\n let element = this.renderRoot?.querySelector('[focused]')\n if (!element) {\n return\n }\n\n let { top, left } = calcScrollPos(this, element)\n // TODO this.scroll()을 사용하면, 효과가 좋으나 left 계산에 문제가 있는 것 같음.\n // this.scroll({\n // top,\n // left,\n // behavior: 'smooth'\n // })\n if (top !== undefined) {\n this.scrollTop = top\n }\n if (left !== undefined) {\n this.scrollLeft = left\n }\n }\n\n if (this._recordView) {\n this._recordView.record = this.data.records[this._recordViewRow!]\n }\n }\n\n focus() {\n super.focus()\n\n if (this.focused === ZERO_FOCUS) {\n let { records } = this.data\n let row = records.findIndex(record => record['__selected__'])\n\n this.focused = { row: row == -1 ? 0 : row, column: 0 }\n }\n }\n\n popupRecordView({ record, row }: { row: number; record: GristRecord }) {\n var titleField = this.config.list.fields[0] || 'name'\n var title = record[titleField]\n\n /* field가 오브젝트형인 경우에는 렌더러를 타이틀로 사용한다. */\n if (typeof title == 'object') {\n var column = this.config.columns.find(column => column.name == titleField)\n title = column?.record.renderer(title, column, record, row, this /* cautious */)\n }\n\n this._recordViewRow = row\n this._recordView = RecordViewHandler(\n this.config.columns,\n record,\n row,\n this,\n {\n title\n },\n () => {\n delete this._recordView\n delete this._recordViewRow\n }\n )\n }\n\n getSelectedBlockValues(): Array<Array<any>> | any | undefined {\n var { start, end } = this._selectBlock || {}\n\n if (!(start && end)) {\n start = this.focusedField\n\n end = start\n }\n\n if (start && end) {\n const startRowIndex = start.rowIndex < end.rowIndex ? start.rowIndex : end.rowIndex\n const endRowIndex = start.rowIndex < end.rowIndex ? end.rowIndex : start.rowIndex\n const startColumnIndex = start.columnIndex < end.columnIndex ? start.columnIndex : end.columnIndex\n const endColumnIndex = start.columnIndex < end.columnIndex ? end.columnIndex : start.columnIndex\n\n const columnArray = new Array(endColumnIndex - startColumnIndex + 1).fill(startColumnIndex)\n const columns = this.columns.filter(column => !column.hidden)\n\n return (\n '<table>' +\n new Array(endRowIndex - startRowIndex + 1)\n .fill(startRowIndex)\n .map((start, index) => {\n const rowIndex = start + index\n const record = this.data.records[rowIndex]\n\n const tds = columnArray\n .map((start, index) => {\n const columnIndex = start + index\n const column = columns[columnIndex]\n const value = record?.[column.name]\n const type = typeof value\n const text =\n value === undefined || value === null ? '' : type == 'object' ? JSON.stringify(value) : value\n\n return `<td type=${type}>${text}</td>`\n })\n .join('')\n return `<tr>${tds}</tr>`\n })\n .join('') +\n '</table>'\n )\n }\n }\n\n async copy() {\n const copied = this.getSelectedBlockValues()\n\n await navigator.clipboard.write([\n new ClipboardItem({\n 'text/html': new Blob([copied], { type: 'text/html' }),\n 'text/plain': new Blob([copied], { type: 'text/plain' })\n })\n ])\n\n const selectBlock = this.selectBlock || this.focusedField\n if (selectBlock) {\n const backgroundColor = selectBlock.style.backgroundColor\n const opacity = selectBlock.style.opacity\n\n selectBlock.setAttribute('data-tooltip', 'copied to clipboard!')\n selectBlock.style.backgroundColor = 'red'\n selectBlock.style.opacity = '0.5'\n await sleep(500)\n selectBlock.removeAttribute('data-tooltip')\n selectBlock.style.backgroundColor = backgroundColor\n selectBlock.style.opacity = opacity\n }\n }\n\n async paste() {\n try {\n const selection = window.getSelection()\n\n const clipboardItems = await navigator.clipboard.read()\n if (!clipboardItems) {\n return\n }\n\n var type: string | undefined\n var content: string | undefined\n\n for (const clipboardItem of clipboardItems) {\n try {\n var blob = await clipboardItem.getType('text/html')\n content = blob && (await blob.text())\n type = 'text/html'\n } catch (e) {\n try {\n blob = await clipboardItem.getType('text/plain')\n content = blob && (await blob.text())\n type = 'text/plain'\n } catch (e) {}\n }\n\n break\n }\n\n if (!content) {\n return\n }\n\n const { row, column } = this.focused\n const { records } = this.data\n const columns = this.columns.filter(column => !column.hidden)\n\n if (type === 'text/html') {\n const div = document.createElement('div')\n div.innerHTML = content!.trim()\n const table = div.querySelector('table') as HTMLTableElement\n if (!table) {\n return\n }\n\n if (selection) {\n this.resetEdit()\n selection.removeAllRanges()\n\n // 포커스가 빠지기 전에 isWorking으로 focusout 이벤트에 대한 값 변경을 막음\n this.focusedField!.isWorking = true\n await this.updateComplete\n this.focusedField!.isWorking = false\n }\n const rows = table.querySelectorAll('tr')\n\n rows.forEach((record, rowIndex) => {\n if (!(record instanceof HTMLTableRowElement)) {\n return\n }\n\n var targetRecord = records[row + rowIndex] || { __dirty__: '+' }\n if (row + rowIndex >= records.length) {\n records.push(targetRecord)\n }\n\n const cells = record.querySelectorAll('td')\n cells.forEach((item, columnIndex) => {\n const targetColumn = columns[column + columnIndex]\n var value = item.textContent as any\n let type = targetColumn.type || item.getAttribute('type') || 'string'\n type = type.includes('object') ? 'object' : type // 오브젝트 타입 예외처리\n let { editable } = targetColumn.record\n if (typeof editable === 'function') {\n editable = editable.call(this, value, targetColumn, targetRecord, row, this)\n }\n\n switch (type) {\n case 'object':\n case 'parameters':\n try {\n value = JSON.parse(value || 'null')\n } catch (err) {}\n break\n case 'boolean':\n case 'checkbox':\n value = !!value && !!String(value).match(/true/i)\n break\n case 'number':\n case 'float':\n case 'integer':\n case 'progress':\n value = parseToNumberOrNull(value)\n break\n default:\n value = value\n }\n\n if (targetColumn && !targetColumn.gutterName && editable) {\n this.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: targetRecord[targetColumn.name],\n after: value,\n column: targetColumn,\n record: targetRecord,\n row: row + rowIndex\n }\n })\n )\n }\n })\n })\n\n return\n } else if (!selection && type === 'text/plain') {\n const targetRecord = records[row] || { __dirty__: '+' }\n const targetColumn = columns[column]\n let { editable } = targetColumn.record\n if (typeof editable === 'function') {\n editable = editable.call(this, content, targetColumn, targetRecord, row, this)\n }\n\n if (targetColumn && !targetColumn.gutterName && editable) {\n this.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: targetRecord[targetColumn.name],\n after: content,\n column: targetColumn,\n record: targetRecord,\n row: row\n }\n })\n )\n }\n }\n } catch (e) {}\n }\n\n setSelectBlock(start?: DataGridField, end?: DataGridField) {\n if (start?.columnIndex == -1) {\n start = this.getFieldByIndex(start.rowIndex, this.columns.filter(column => !column.hidden).length - 1)\n }\n\n if (end?.columnIndex == -1) {\n end = this.getFieldByIndex(end.rowIndex, this.columns.filter(column => !column.hidden).length - 1)\n }\n\n this._selectBlock = start && { start, end }\n\n if (start && end) {\n window.getSelection()?.removeAllRanges()\n\n if (start !== end) {\n const left = start.columnIndex < end.columnIndex ? start : end\n const right = left === start ? end : start\n const top = start.rowIndex < end.rowIndex ? start : end\n const bottom = top === start ? end : start\n\n const { offsetLeft } = left\n const { offsetTop } = top\n const width = right.offsetLeft - offsetLeft + right.offsetWidth\n const height = bottom.offsetTop - offsetTop + bottom.offsetHeight\n\n this.style.setProperty('--select-box-left', offsetLeft - 1 + 'px')\n this.style.setProperty('--select-box-top', offsetTop - 1 + 'px')\n this.style.setProperty('--select-box-width', width + 'px')\n this.style.setProperty('--select-box-height', height + 'px')\n }\n\n this.focus()\n }\n }\n\n buildAccumulatorRecord(): GristRecord {\n var columns = this.columns.filter(column => !column.hidden)\n\n return columns.reduce((record, column) => {\n if (column.accumulator) {\n record[column.name] = accumulate(this.data, column, column.accumulator)\n }\n return record\n }, {} as GristRecord)\n }\n}\n"]}
@@ -9,7 +9,7 @@ export declare class DataGridField extends LitElement {
9
9
  columnIndex: number;
10
10
  editing: boolean;
11
11
  value: {};
12
- valueWithEdit: string | null;
12
+ valueWith: string | null;
13
13
  emphasized: any;
14
14
  fixed?: string;
15
15
  type?: string;
@@ -15,7 +15,7 @@ let DataGridField = class DataGridField extends LitElement {
15
15
  this.columnIndex = 0;
16
16
  this.editing = false;
17
17
  this.value = {};
18
- this.valueWithEdit = null;
18
+ this.valueWith = null;
19
19
  this.emphasized = false;
20
20
  this.isWorking = false;
21
21
  this._onFieldChange = e => { };
@@ -182,7 +182,7 @@ __decorate([
182
182
  ], DataGridField.prototype, "value", void 0);
183
183
  __decorate([
184
184
  property({ type: String })
185
- ], DataGridField.prototype, "valueWithEdit", void 0);
185
+ ], DataGridField.prototype, "valueWith", void 0);
186
186
  __decorate([
187
187
  property({ attribute: false })
188
188
  ], DataGridField.prototype, "emphasized", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"data-grid-field.js","sourceRoot":"","sources":["../../../src/data-grid/data-grid-field.ts"],"names":[],"mappings":"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","sourcesContent":["import { css, html, LitElement, PropertyValues, TemplateResult } from 'lit'\n// import { guard } from 'lit/directives/guard.js'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport { TooltipStyles } from '@operato/styles'\n\nimport { ZERO_COLUMN } from '../configure/zero-config'\nimport { ColumnConfig, GristRecord } from '../types'\nimport { getRenderer } from '../renderers'\n\nconst DEFAULT_TEXT_ALIGN = 'left'\n\n@customElement('ox-grid-field')\nexport class DataGridField extends LitElement {\n static styles = [\n TooltipStyles,\n css`\n :host {\n display: flex;\n\n align-items: center;\n justify-content: var(--data-grid-field-justify-content, flex-start);\n position: relative;\n\n white-space: nowrap;\n background-color: var(--grid-record-background-color);\n padding: var(--grid-record-padding);\n border: 1px solid transparent;\n border-width: 1px 0;\n border-bottom: var(--grid-record-border-bottom);\n\n font-size: var(--grid-record-wide-fontsize);\n min-height: 19px;\n }\n :host([gutter]) {\n padding: var(--grid-gutter-padding);\n text-align: center;\n }\n :host([gutter]) * {\n cursor: default;\n }\n\n :host([editing]) {\n border-top: var(--grid-record-editing-border);\n border-bottom: var(--grid-record-editing-border);\n }\n\n :host([focused]) {\n --grid-record-border-bottom: var(--grid-record-focused-cell-border);\n }\n\n :host([dirty])::after {\n content: '';\n position: absolute;\n right: 0;\n top: 0;\n\n width: 0px;\n height: 0px;\n border-top: 9px solid red;\n border-left: 9px solid transparent;\n }\n\n span,\n pre {\n display: block;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n * {\n margin: 0;\n text-align: var(--data-grid-field-text-align);\n }\n\n *[center] {\n flex: none;\n margin: 0 auto;\n }\n `\n ]\n\n @property({ type: String, attribute: true }) align = DEFAULT_TEXT_ALIGN\n @property({ type: Object }) record: GristRecord = {}\n @property({ type: Object }) column: ColumnConfig = ZERO_COLUMN\n @property({ type: Number }) rowIndex = 0\n @property({ type: Number }) columnIndex = 0\n @property({ type: Boolean }) editing = false\n @property({ type: Object }) value = {}\n @property({ type: String }) valueWithEdit: string | null = null\n @property({ attribute: false }) emphasized: any = false\n @property({ type: String }) fixed?: string\n @property({ type: String }) type?: string\n @property({ type: Boolean }) isWorking: boolean = false\n\n /* check in tree의 변화에 대응하기 위함임. 만일, record control 오브젝트로 통일되면 대체될 것임. */\n @property({ type: String }) checked?: string\n\n private _editCancelled?: boolean\n private _onFieldChange: (e: Event) => void = e => {}\n private _onKeydownInEditingMode: (e: KeyboardEvent) => void = e => {}\n\n render(): TemplateResult {\n if (!this.column) {\n return html``\n }\n\n var { value, column, record, rowIndex } = this\n var { renderer, editor } = column.record\n\n return html`\n ${this.editing\n ? editor?.call(this, value, column, record, rowIndex, this)\n : renderer?.call(this, value, column, record, rowIndex, this)}\n `\n }\n\n updated(changes: PropertyValues<this>) {\n if (changes.has('editing')) {\n if (this.editing) {\n this._onKeydownInEditingMode = ((e: KeyboardEvent) => {\n if (e.key === 'Esc' || e.key === 'Escape') {\n /* 편집 취소 */\n this._editCancelled = true\n }\n }).bind(this)\n\n this._onFieldChange = ((e: Event) => {\n this._editCancelled && e.stopPropagation()\n }).bind(this)\n\n delete this._editCancelled\n this.addEventListener('field-change', this._onFieldChange)\n this.addEventListener('keydown', this._onKeydownInEditingMode)\n } else {\n this.removeEventListener('field-change', this._onFieldChange)\n this.removeEventListener('keydown', this._onKeydownInEditingMode)\n }\n }\n\n if (changes.has('column')) {\n var align = this.column.record.align || DEFAULT_TEXT_ALIGN\n if (align != DEFAULT_TEXT_ALIGN) {\n let justify = 'center'\n switch (align) {\n case 'right':\n justify = 'flex-end'\n break\n }\n this.style.setProperty('--data-grid-field-justify-content', justify)\n this.style.setProperty('--data-grid-field-text-align', align)\n }\n }\n\n if (changes.has('fixed')) {\n if (this.fixed) {\n this.style.left = this.fixed + 'px'\n }\n }\n\n const emphasized =\n this.column.record.classifier.call(this, this.record, this.rowIndex)?.emphasized || this.emphasized\n\n if (!!emphasized) {\n this.setAttribute('emphasized-row', '')\n\n if (Symbol.iterator in Object(emphasized)) {\n const [backgroundColor, foregroundColor] = emphasized as string[]\n backgroundColor && this.style.setProperty('--grid-record-emphasized-background-color', backgroundColor)\n foregroundColor && this.style.setProperty('--grid-record-emphasized-color', foregroundColor)\n }\n } else {\n this.removeAttribute('emphasized-row')\n }\n }\n\n get editableOnClick() {\n const renderer = this.renderRoot.firstElementChild as HTMLElement\n //@ts-ignore\n return renderer && 'editableOnClick' in renderer ? renderer.editableOnClick : true\n }\n}\n"]}
1
+ {"version":3,"file":"data-grid-field.js","sourceRoot":"","sources":["../../../src/data-grid/data-grid-field.ts"],"names":[],"mappings":"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","sourcesContent":["import { css, html, LitElement, PropertyValues, TemplateResult } from 'lit'\n// import { guard } from 'lit/directives/guard.js'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport { TooltipStyles } from '@operato/styles'\n\nimport { ZERO_COLUMN } from '../configure/zero-config'\nimport { ColumnConfig, GristRecord } from '../types'\nimport { getRenderer } from '../renderers'\n\nconst DEFAULT_TEXT_ALIGN = 'left'\n\n@customElement('ox-grid-field')\nexport class DataGridField extends LitElement {\n static styles = [\n TooltipStyles,\n css`\n :host {\n display: flex;\n\n align-items: center;\n justify-content: var(--data-grid-field-justify-content, flex-start);\n position: relative;\n\n white-space: nowrap;\n background-color: var(--grid-record-background-color);\n padding: var(--grid-record-padding);\n border: 1px solid transparent;\n border-width: 1px 0;\n border-bottom: var(--grid-record-border-bottom);\n\n font-size: var(--grid-record-wide-fontsize);\n min-height: 19px;\n }\n :host([gutter]) {\n padding: var(--grid-gutter-padding);\n text-align: center;\n }\n :host([gutter]) * {\n cursor: default;\n }\n\n :host([editing]) {\n border-top: var(--grid-record-editing-border);\n border-bottom: var(--grid-record-editing-border);\n }\n\n :host([focused]) {\n --grid-record-border-bottom: var(--grid-record-focused-cell-border);\n }\n\n :host([dirty])::after {\n content: '';\n position: absolute;\n right: 0;\n top: 0;\n\n width: 0px;\n height: 0px;\n border-top: 9px solid red;\n border-left: 9px solid transparent;\n }\n\n span,\n pre {\n display: block;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n * {\n margin: 0;\n text-align: var(--data-grid-field-text-align);\n }\n\n *[center] {\n flex: none;\n margin: 0 auto;\n }\n `\n ]\n\n @property({ type: String, attribute: true }) align = DEFAULT_TEXT_ALIGN\n @property({ type: Object }) record: GristRecord = {}\n @property({ type: Object }) column: ColumnConfig = ZERO_COLUMN\n @property({ type: Number }) rowIndex = 0\n @property({ type: Number }) columnIndex = 0\n @property({ type: Boolean }) editing = false\n @property({ type: Object }) value = {}\n @property({ type: String }) valueWith: string | null = null\n @property({ attribute: false }) emphasized: any = false\n @property({ type: String }) fixed?: string\n @property({ type: String }) type?: string\n @property({ type: Boolean }) isWorking: boolean = false\n\n /* check in tree의 변화에 대응하기 위함임. 만일, record control 오브젝트로 통일되면 대체될 것임. */\n @property({ type: String }) checked?: string\n\n private _editCancelled?: boolean\n private _onFieldChange: (e: Event) => void = e => {}\n private _onKeydownInEditingMode: (e: KeyboardEvent) => void = e => {}\n\n render(): TemplateResult {\n if (!this.column) {\n return html``\n }\n\n var { value, column, record, rowIndex } = this\n var { renderer, editor } = column.record\n\n return html`\n ${this.editing\n ? editor?.call(this, value, column, record, rowIndex, this)\n : renderer?.call(this, value, column, record, rowIndex, this)}\n `\n }\n\n updated(changes: PropertyValues<this>) {\n if (changes.has('editing')) {\n if (this.editing) {\n this._onKeydownInEditingMode = ((e: KeyboardEvent) => {\n if (e.key === 'Esc' || e.key === 'Escape') {\n /* 편집 취소 */\n this._editCancelled = true\n }\n }).bind(this)\n\n this._onFieldChange = ((e: Event) => {\n this._editCancelled && e.stopPropagation()\n }).bind(this)\n\n delete this._editCancelled\n this.addEventListener('field-change', this._onFieldChange)\n this.addEventListener('keydown', this._onKeydownInEditingMode)\n } else {\n this.removeEventListener('field-change', this._onFieldChange)\n this.removeEventListener('keydown', this._onKeydownInEditingMode)\n }\n }\n\n if (changes.has('column')) {\n var align = this.column.record.align || DEFAULT_TEXT_ALIGN\n if (align != DEFAULT_TEXT_ALIGN) {\n let justify = 'center'\n switch (align) {\n case 'right':\n justify = 'flex-end'\n break\n }\n this.style.setProperty('--data-grid-field-justify-content', justify)\n this.style.setProperty('--data-grid-field-text-align', align)\n }\n }\n\n if (changes.has('fixed')) {\n if (this.fixed) {\n this.style.left = this.fixed + 'px'\n }\n }\n\n const emphasized =\n this.column.record.classifier.call(this, this.record, this.rowIndex)?.emphasized || this.emphasized\n\n if (!!emphasized) {\n this.setAttribute('emphasized-row', '')\n\n if (Symbol.iterator in Object(emphasized)) {\n const [backgroundColor, foregroundColor] = emphasized as string[]\n backgroundColor && this.style.setProperty('--grid-record-emphasized-background-color', backgroundColor)\n foregroundColor && this.style.setProperty('--grid-record-emphasized-color', foregroundColor)\n }\n } else {\n this.removeAttribute('emphasized-row')\n }\n }\n\n get editableOnClick() {\n const renderer = this.renderRoot.firstElementChild as HTMLElement\n //@ts-ignore\n return renderer && 'editableOnClick' in renderer ? renderer.editableOnClick : true\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import '@material/mwc-icon';
1
+ import '@material/web/icon/icon.js';
2
2
  import { LitElement } from 'lit';
3
3
  import { GristData, PaginationConfig } from '../types';
4
4
  export declare class DataGridFooter extends LitElement {
@@ -7,5 +7,5 @@ export declare class DataGridFooter extends LitElement {
7
7
  pagination: PaginationConfig;
8
8
  _gotoPage(page: number): void;
9
9
  _changeLimit(limit: number): void;
10
- render(): import("lit").TemplateResult<1>;
10
+ render(): import("lit-html").TemplateResult<1>;
11
11
  }
@@ -1,5 +1,5 @@
1
1
  import { __decorate } from "tslib";
2
- import '@material/mwc-icon';
2
+ import '@material/web/icon/icon.js';
3
3
  import { css, html, LitElement } from 'lit';
4
4
  import { customElement, property } from 'lit/decorators.js';
5
5
  import { ZERO_DATA, ZERO_PAGES } from '../configure/zero-config';
@@ -28,18 +28,18 @@ let DataGridFooter = class DataGridFooter extends LitElement {
28
28
  var end = records.length == 0 ? 0 : begin + records.length - 1;
29
29
  var totalPage = Math.max(1, Math.ceil(total / limit));
30
30
  return html `
31
- <a ?inactive=${page <= 1} @click=${() => this._gotoPage(1)}><mwc-icon>skip_previous</mwc-icon></a>
32
- <a ?inactive=${page <= 1} @click=${() => this._gotoPage(page - 1)}><mwc-icon>navigate_before</mwc-icon></a>
31
+ <a ?inactive=${page <= 1} @click=${() => this._gotoPage(1)}><md-icon>skip_previous</md-icon></a>
32
+ <a ?inactive=${page <= 1} @click=${() => this._gotoPage(page - 1)}><md-icon>navigate_before</md-icon></a>
33
33
  <span>page <strong>${page}</strong>&nbsp;/&nbsp;${totalPage}</span>
34
- <a ?inactive=${page >= totalPage} @click=${() => this._gotoPage(page + 1)}><mwc-icon>navigate_next</mwc-icon></a>
35
- <a ?inactive=${page >= totalPage} @click=${() => this._gotoPage(totalPage)}><mwc-icon>skip_next</mwc-icon></a>
34
+ <a ?inactive=${page >= totalPage} @click=${() => this._gotoPage(page + 1)}><md-icon>navigate_next</md-icon></a>
35
+ <a ?inactive=${page >= totalPage} @click=${() => this._gotoPage(totalPage)}><md-icon>skip_next</md-icon></a>
36
36
 
37
37
  <span class="filler"></span>
38
38
 
39
39
  <span class="limit">
40
40
  ${pages.map(size => html `
41
- <a ?selected=${limit == size} @click=${() => this._changeLimit(size)}>${stringifyBigNumber(size)}</a>
42
- `)}
41
+ <a ?selected=${limit == size} @click=${() => this._changeLimit(size)}>${stringifyBigNumber(size)}</a>
42
+ `)}
43
43
  records
44
44
  </span>
45
45
  <span>&nbsp;</span>
@@ -54,17 +54,18 @@ DataGridFooter.styles = [
54
54
  :host {
55
55
  display: flex;
56
56
  flex-direction: row;
57
+ gap: 4px;
57
58
  overflow: hidden;
58
59
 
59
60
  padding: var(--grid-footer-padding);
60
61
  background-color: var(--grid-footer-background-color);
61
62
  font-size: var(--grid-footer-font-size);
63
+ align-items: center;
62
64
  }
63
65
 
64
66
  :host * {
65
67
  white-space: nowrap;
66
68
  overflow: hidden;
67
- padding: 0 2px;
68
69
 
69
70
  text-overflow: ellipsis;
70
71
  text-align: center;
@@ -75,11 +76,18 @@ DataGridFooter.styles = [
75
76
  flex: 1;
76
77
  }
77
78
 
78
- mwc-icon {
79
+ md-icon {
79
80
  font-size: 1.5em;
80
81
  vertical-align: middle;
81
82
  }
82
83
 
84
+ .limit {
85
+ display: flex;
86
+ flex-direction: row;
87
+ gap: 6px;
88
+ align-items: center;
89
+ }
90
+
83
91
  .limit a {
84
92
  color: var(--grid-footer-limit-color);
85
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"data-grid-footer.js","sourceRoot":"","sources":["../../../src/data-grid/data-grid-footer.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/mwc-icon'\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport { ZERO_DATA, ZERO_PAGES } from '../configure/zero-config'\nimport { GristData, PaginationConfig } from '../types'\nimport { stringifyBigNumber } from '@operato/utils'\n\n@customElement('ox-grid-footer')\nexport class DataGridFooter extends LitElement {\n static styles = [\n css`\n :host {\n display: flex;\n flex-direction: row;\n overflow: hidden;\n\n padding: var(--grid-footer-padding);\n background-color: var(--grid-footer-background-color);\n font-size: var(--grid-footer-font-size);\n }\n\n :host * {\n white-space: nowrap;\n overflow: hidden;\n padding: 0 2px;\n\n text-overflow: ellipsis;\n text-align: center;\n color: var(--grid-footer-color);\n }\n\n .filler {\n flex: 1;\n }\n\n mwc-icon {\n font-size: 1.5em;\n vertical-align: middle;\n }\n\n .limit a {\n color: var(--grid-footer-limit-color);\n }\n\n .limit a[selected] {\n color: var(--grid-footer-color);\n font-weight: bold;\n text-decoration: underline;\n }\n\n a[inactive] * {\n color: var(--grid-footer-inactive-color);\n }\n `\n ]\n\n @property() data: GristData = ZERO_DATA\n @property() pagination: PaginationConfig = {}\n\n _gotoPage(page: number) {\n var { pages = ZERO_PAGES } = this.pagination || {}\n var { limit = pages[0], total = 0 } = this.data\n\n if (page > Math.ceil(total / limit) || page <= 0) {\n return\n }\n this.dispatchEvent(new CustomEvent('page-change', { bubbles: true, composed: true, detail: page }))\n }\n\n _changeLimit(limit: number) {\n this.dispatchEvent(new CustomEvent('limit-change', { bubbles: true, composed: true, detail: limit }))\n }\n\n render() {\n var { pages = ZERO_PAGES } = this.pagination || {}\n var { records = [], page = 1, limit = pages[0], total = 0 } = this.data\n\n var begin = records.length == 0 ? 0 : limit * (page - 1) + 1\n var end = records.length == 0 ? 0 : begin + records.length - 1\n var totalPage = Math.max(1, Math.ceil(total / limit))\n\n return html`\n <a ?inactive=${page <= 1} @click=${() => this._gotoPage(1)}><mwc-icon>skip_previous</mwc-icon></a>\n <a ?inactive=${page <= 1} @click=${() => this._gotoPage(page - 1)}><mwc-icon>navigate_before</mwc-icon></a>\n <span>page <strong>${page}</strong>&nbsp;/&nbsp;${totalPage}</span>\n <a ?inactive=${page >= totalPage} @click=${() => this._gotoPage(page + 1)}><mwc-icon>navigate_next</mwc-icon></a>\n <a ?inactive=${page >= totalPage} @click=${() => this._gotoPage(totalPage)}><mwc-icon>skip_next</mwc-icon></a>\n\n <span class=\"filler\"></span>\n\n <span class=\"limit\">\n ${pages.map(\n size =>\n html`\n <a ?selected=${limit == size} @click=${() => this._changeLimit(size)}>${stringifyBigNumber(size)}</a>\n `\n )}\n records\n </span>\n <span>&nbsp;</span>\n <span>${begin} - ${end}</span>\n <span>&nbsp;/&nbsp;</span>\n <span>total ${total || 0} records.</span>\n `\n }\n}\n"]}
1
+ {"version":3,"file":"data-grid-footer.js","sourceRoot":"","sources":["../../../src/data-grid/data-grid-footer.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport { ZERO_DATA, ZERO_PAGES } from '../configure/zero-config'\nimport { GristData, PaginationConfig } from '../types'\nimport { stringifyBigNumber } from '@operato/utils'\n\n@customElement('ox-grid-footer')\nexport class DataGridFooter extends LitElement {\n static styles = [\n css`\n :host {\n display: flex;\n flex-direction: row;\n gap: 4px;\n overflow: hidden;\n\n padding: var(--grid-footer-padding);\n background-color: var(--grid-footer-background-color);\n font-size: var(--grid-footer-font-size);\n align-items: center;\n }\n\n :host * {\n white-space: nowrap;\n overflow: hidden;\n\n text-overflow: ellipsis;\n text-align: center;\n color: var(--grid-footer-color);\n }\n\n .filler {\n flex: 1;\n }\n\n md-icon {\n font-size: 1.5em;\n vertical-align: middle;\n }\n\n .limit {\n display: flex;\n flex-direction: row;\n gap: 6px;\n align-items: center;\n }\n\n .limit a {\n color: var(--grid-footer-limit-color);\n }\n\n .limit a[selected] {\n color: var(--grid-footer-color);\n font-weight: bold;\n text-decoration: underline;\n }\n\n a[inactive] * {\n color: var(--grid-footer-inactive-color);\n }\n `\n ]\n\n @property() data: GristData = ZERO_DATA\n @property() pagination: PaginationConfig = {}\n\n _gotoPage(page: number) {\n var { pages = ZERO_PAGES } = this.pagination || {}\n var { limit = pages[0], total = 0 } = this.data\n\n if (page > Math.ceil(total / limit) || page <= 0) {\n return\n }\n this.dispatchEvent(new CustomEvent('page-change', { bubbles: true, composed: true, detail: page }))\n }\n\n _changeLimit(limit: number) {\n this.dispatchEvent(new CustomEvent('limit-change', { bubbles: true, composed: true, detail: limit }))\n }\n\n render() {\n var { pages = ZERO_PAGES } = this.pagination || {}\n var { records = [], page = 1, limit = pages[0], total = 0 } = this.data\n\n var begin = records.length == 0 ? 0 : limit * (page - 1) + 1\n var end = records.length == 0 ? 0 : begin + records.length - 1\n var totalPage = Math.max(1, Math.ceil(total / limit))\n\n return html`\n <a ?inactive=${page <= 1} @click=${() => this._gotoPage(1)}><md-icon>skip_previous</md-icon></a>\n <a ?inactive=${page <= 1} @click=${() => this._gotoPage(page - 1)}><md-icon>navigate_before</md-icon></a>\n <span>page <strong>${page}</strong>&nbsp;/&nbsp;${totalPage}</span>\n <a ?inactive=${page >= totalPage} @click=${() => this._gotoPage(page + 1)}><md-icon>navigate_next</md-icon></a>\n <a ?inactive=${page >= totalPage} @click=${() => this._gotoPage(totalPage)}><md-icon>skip_next</md-icon></a>\n\n <span class=\"filler\"></span>\n\n <span class=\"limit\">\n ${pages.map(\n size => html`\n <a ?selected=${limit == size} @click=${() => this._changeLimit(size)}>${stringifyBigNumber(size)}</a>\n `\n )}\n records\n </span>\n <span>&nbsp;</span>\n <span>${begin} - ${end}</span>\n <span>&nbsp;/&nbsp;</span>\n <span>total ${total || 0} records.</span>\n `\n }\n}\n"]}
@@ -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
  import { LitElement, PropertyValues, TemplateResult } from 'lit';
4
4
  import { ColumnConfig, FilterValue, GristData, SortersConfig } from '../types';
5
5
  export declare class DataGridHeader extends LitElement {
@@ -1,6 +1,6 @@
1
1
  import { __decorate } from "tslib";
2
2
  import '@operato/popup/ox-popup.js';
3
- import '@material/mwc-icon';
3
+ import '@material/web/icon/icon.js';
4
4
  import { css, html, LitElement, nothing } from 'lit';
5
5
  import { customElement, property, state } from 'lit/decorators.js';
6
6
  import { ifDefined } from 'lit/directives/if-defined.js';
@@ -196,13 +196,11 @@ let DataGridHeader = class DataGridHeader extends LitElement {
196
196
  if (sorters.length > 1) {
197
197
  var rank = sorters.indexOf(sorter) + 1;
198
198
  return sorter.desc
199
- ? html ` <mwc-icon>keyboard_arrow_down</mwc-icon><sub>${rank}</sub> `
200
- : html ` <mwc-icon>keyboard_arrow_up</mwc-icon><sub>${rank}</sub> `;
199
+ ? html ` <md-icon>keyboard_arrow_down</md-icon><sub>${rank}</sub> `
200
+ : html ` <md-icon>keyboard_arrow_up</md-icon><sub>${rank}</sub> `;
201
201
  }
202
202
  else {
203
- return sorter.desc
204
- ? html ` <mwc-icon>keyboard_arrow_down</mwc-icon> `
205
- : html ` <mwc-icon>keyboard_arrow_up</mwc-icon> `;
203
+ return sorter.desc ? html ` <md-icon>keyboard_arrow_down</md-icon> ` : html ` <md-icon>keyboard_arrow_up</md-icon> `;
206
204
  }
207
205
  }
208
206
  _renderFilterHeader(column) {
@@ -214,7 +212,7 @@ let DataGridHeader = class DataGridHeader extends LitElement {
214
212
  const idx = filter.operator === 'between' ? 1 : 0;
215
213
  const renderer = getFilterRenderer(type)[idx];
216
214
  return html `
217
- <mwc-icon
215
+ <md-icon
218
216
  @click=${(e) => {
219
217
  const parent = e.target.closest('[column]');
220
218
  const popup = parent.querySelector('ox-popup, ox-popup-list');
@@ -229,23 +227,23 @@ let DataGridHeader = class DataGridHeader extends LitElement {
229
227
  top
230
228
  });
231
229
  }}
232
- >filter_alt</mwc-icon
230
+ >filter_alt</md-icon
233
231
  >
234
232
 
235
233
  ${!renderer
236
234
  ? html ``
237
235
  : type !== 'select'
238
236
  ? html ` <ox-popup
239
- ><div filter-title><mwc-icon>filter_alt</mwc-icon> filter by <strong>${column.name}</strong></div>
240
- ${renderer(column, value, this)}</ox-popup
241
- >`
237
+ ><div filter-title><md-icon>filter_alt</md-icon> filter by <strong>${column.name}</strong></div>
238
+ ${renderer(column, value, this)}</ox-popup
239
+ >`
242
240
  : filter.operator === 'in'
243
241
  ? html `<ox-popup-list
244
- multiple
245
- attr-selected="checked"
246
- .value=${value}
247
- with-search
248
- @select=${(e) => {
242
+ multiple
243
+ attr-selected="checked"
244
+ .value=${value}
245
+ with-search
246
+ @select=${(e) => {
249
247
  var _a;
250
248
  return (_a = e.target) === null || _a === void 0 ? void 0 : _a.dispatchEvent(new CustomEvent('filter-change', {
251
249
  bubbles: true,
@@ -261,15 +259,15 @@ let DataGridHeader = class DataGridHeader extends LitElement {
261
259
  }
262
260
  }));
263
261
  }}
264
- ><div filter-title slot="header">
265
- <mwc-icon>filter_alt</mwc-icon> filter by <strong>${column.name}</strong>
266
- </div>
267
- ${renderer(column, value, this)}</ox-popup-list
268
- >`
262
+ ><div filter-title slot="header">
263
+ <md-icon>filter_alt</md-icon> filter by <strong>${column.name}</strong>
264
+ </div>
265
+ ${renderer(column, value, this)}</ox-popup-list
266
+ >`
269
267
  : html `<ox-popup-list
270
- .value=${value}
271
- with-search
272
- @select=${(e) => {
268
+ .value=${value}
269
+ with-search
270
+ @select=${(e) => {
273
271
  var _a;
274
272
  return (_a = e.target) === null || _a === void 0 ? void 0 : _a.dispatchEvent(new CustomEvent('filter-change', {
275
273
  bubbles: true,
@@ -281,11 +279,11 @@ let DataGridHeader = class DataGridHeader extends LitElement {
281
279
  }
282
280
  }));
283
281
  }}
284
- ><div filter-title slot="header">
285
- <mwc-icon>filter_alt</mwc-icon> filter by <strong>${column.name}</strong>
286
- </div>
287
- ${renderer(column, value, this)}</ox-popup-list
288
- >`}
282
+ ><div filter-title slot="header">
283
+ <md-icon>filter_alt</md-icon> filter by <strong>${column.name}</strong>
284
+ </div>
285
+ ${renderer(column, value, this)}</ox-popup-list
286
+ >`}
289
287
  `;
290
288
  }
291
289
  _changeSort(column) {
@@ -300,12 +298,16 @@ let DataGridHeader = class DataGridHeader extends LitElement {
300
298
  sorters.splice(idx, 1);
301
299
  }
302
300
  else {
303
- sorter.desc = true;
301
+ sorters.splice(idx, 1, {
302
+ ...sorter,
303
+ desc: true
304
+ });
304
305
  }
305
306
  }
306
307
  else {
307
308
  var sorter = {
308
- name: column.name
309
+ name: column.name,
310
+ desc: false
309
311
  };
310
312
  sorters.push(sorter);
311
313
  }
@@ -409,7 +411,7 @@ DataGridHeader.styles = [
409
411
  align-self: center;
410
412
  }
411
413
 
412
- span[for-title] mwc-icon {
414
+ span[for-title] md-icon {
413
415
  font-size: var(--grid-record-fontsize);
414
416
  }
415
417
 
@@ -422,11 +424,11 @@ DataGridHeader.styles = [
422
424
  border: 0;
423
425
  }
424
426
 
425
- span[sorter] mwc-icon {
427
+ span[sorter] md-icon {
426
428
  font-size: var(--grid-header-sorter-size);
427
429
  }
428
430
 
429
- span[filter] > mwc-icon {
431
+ span[filter] > md-icon {
430
432
  font-size: var(--fontsize-default);
431
433
  line-height: 20px;
432
434
  }
@@ -451,7 +453,7 @@ DataGridHeader.styles = [
451
453
  vertical-align: middle;
452
454
  }
453
455
 
454
- [filter-title] mwc-icon {
456
+ [filter-title] md-icon {
455
457
  opacity: 0.7;
456
458
  color: var(--grid-header-filter-title-icon-color);
457
459
  }