@operato/data-grist 8.0.0-alpha.8 → 8.0.0-beta.1

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 (218) hide show
  1. package/CHANGELOG.md +186 -0
  2. package/dist/src/data-grid/data-grid-body.js +21 -7
  3. package/dist/src/data-grid/data-grid-body.js.map +1 -1
  4. package/dist/src/data-grid/data-grid-footer.js +2 -0
  5. package/dist/src/data-grid/data-grid-footer.js.map +1 -1
  6. package/dist/src/data-grid/data-grid-header.d.ts +1 -1
  7. package/dist/src/data-grid/data-grid-header.js +13 -9
  8. package/dist/src/data-grid/data-grid-header.js.map +1 -1
  9. package/dist/src/editors/ox-grist-editor-varname.d.ts +6 -0
  10. package/dist/src/editors/ox-grist-editor-varname.js +36 -0
  11. package/dist/src/editors/ox-grist-editor-varname.js.map +1 -0
  12. package/dist/src/editors/ox-grist-editor.js +3 -3
  13. package/dist/src/editors/ox-grist-editor.js.map +1 -1
  14. package/dist/src/editors/registry.js +3 -1
  15. package/dist/src/editors/registry.js.map +1 -1
  16. package/dist/src/gutters/gutter-sequence.d.ts +1 -1
  17. package/dist/src/record-view/index.d.ts +1 -1
  18. package/dist/src/record-view/index.js +1 -1
  19. package/dist/src/record-view/index.js.map +1 -1
  20. package/dist/src/record-view/{record-creator.d.ts → ox-record-creator.d.ts} +8 -4
  21. package/dist/src/record-view/{record-creator.js → ox-record-creator.js} +90 -34
  22. package/dist/src/record-view/ox-record-creator.js.map +1 -0
  23. package/dist/src/renderers/ox-grist-renderer-boolean.js +1 -1
  24. package/dist/src/renderers/ox-grist-renderer-boolean.js.map +1 -1
  25. package/dist/stories/accumulator-format.stories.d.ts +1 -1
  26. package/dist/stories/accumulator-format.stories.js +1 -1
  27. package/dist/stories/accumulator-format.stories.js.map +1 -1
  28. package/dist/stories/click-event-custom.stories.d.ts +45 -0
  29. package/dist/stories/click-event-custom.stories.js +247 -0
  30. package/dist/stories/click-event-custom.stories.js.map +1 -0
  31. package/dist/stories/click-event.stories.d.ts +1 -1
  32. package/dist/stories/click-event.stories.js +1 -1
  33. package/dist/stories/click-event.stories.js.map +1 -1
  34. package/dist/stories/fixed-column.stories.d.ts +1 -1
  35. package/dist/stories/fixed-column.stories.js +1 -1
  36. package/dist/stories/fixed-column.stories.js.map +1 -1
  37. package/dist/stories/grid-setting.stories.d.ts +1 -1
  38. package/dist/stories/grid-setting.stories.js +1 -1
  39. package/dist/stories/grid-setting.stories.js.map +1 -1
  40. package/dist/stories/grist-modes.stories.d.ts +1 -1
  41. package/dist/stories/grist-modes.stories.js +1 -1
  42. package/dist/stories/grist-modes.stories.js.map +1 -1
  43. package/dist/stories/group-header.stories.d.ts +1 -1
  44. package/dist/stories/group-header.stories.js +1 -1
  45. package/dist/stories/group-header.stories.js.map +1 -1
  46. package/dist/stories/textarea.stories.d.ts +1 -1
  47. package/dist/stories/textarea.stories.js +1 -1
  48. package/dist/stories/textarea.stories.js.map +1 -1
  49. package/dist/stories/tree-column-with-checkbox.stories.d.ts +1 -1
  50. package/dist/stories/tree-column-with-checkbox.stories.js +1 -1
  51. package/dist/stories/tree-column-with-checkbox.stories.js.map +1 -1
  52. package/dist/stories/tree-column.stories.d.ts +1 -1
  53. package/dist/stories/tree-column.stories.js +1 -1
  54. package/dist/stories/tree-column.stories.js.map +1 -1
  55. package/dist/tsconfig.tsbuildinfo +1 -1
  56. package/package.json +20 -20
  57. package/themes/calendar-theme.css +3 -1
  58. package/.storybook/main.js +0 -3
  59. package/.storybook/preview.js +0 -52
  60. package/.storybook/server.mjs +0 -8
  61. package/dist/src/record-view/record-creator.js.map +0 -1
  62. package/src/accumulator/accumulator.ts +0 -63
  63. package/src/configure/column-builder.ts +0 -114
  64. package/src/configure/config-builder.ts +0 -40
  65. package/src/configure/filters-option-builder.ts +0 -8
  66. package/src/configure/imex-option-builder.ts +0 -5
  67. package/src/configure/list-option-builder.ts +0 -9
  68. package/src/configure/rows-option-builder.ts +0 -38
  69. package/src/configure/tree-option-builder.ts +0 -22
  70. package/src/configure/zero-config.ts +0 -83
  71. package/src/const.ts +0 -1
  72. package/src/data-card/data-card-field.ts +0 -94
  73. package/src/data-card/data-card-gutter-menu.ts +0 -94
  74. package/src/data-card/data-card-gutter.ts +0 -103
  75. package/src/data-card/data-card.ts +0 -154
  76. package/src/data-card/event-handlers/record-card-click-handler.ts +0 -34
  77. package/src/data-card/event-handlers/record-card-dblclick-handler.ts +0 -34
  78. package/src/data-card/record-card.ts +0 -298
  79. package/src/data-consumer.ts +0 -11
  80. package/src/data-grid/data-grid-accum-field.ts +0 -109
  81. package/src/data-grid/data-grid-body-style.ts +0 -85
  82. package/src/data-grid/data-grid-body.ts +0 -749
  83. package/src/data-grid/data-grid-field.ts +0 -227
  84. package/src/data-grid/data-grid-footer.ts +0 -117
  85. package/src/data-grid/data-grid-header.ts +0 -574
  86. package/src/data-grid/data-grid.ts +0 -293
  87. package/src/data-grid/event-handlers/data-grid-body-click-handler.ts +0 -69
  88. package/src/data-grid/event-handlers/data-grid-body-contextmenu-handler.ts +0 -32
  89. package/src/data-grid/event-handlers/data-grid-body-dblclick-handler.ts +0 -42
  90. package/src/data-grid/event-handlers/data-grid-body-focus-change-handler.ts +0 -24
  91. package/src/data-grid/event-handlers/data-grid-body-keydown-handler.ts +0 -234
  92. package/src/data-grist.ts +0 -1233
  93. package/src/data-list/data-list-field.ts +0 -82
  94. package/src/data-list/data-list-gutter.ts +0 -108
  95. package/src/data-list/data-list.ts +0 -145
  96. package/src/data-list/event-handlers/record-partial-click-handler.ts +0 -34
  97. package/src/data-list/event-handlers/record-partial-dblclick-handler.ts +0 -33
  98. package/src/data-list/event-handlers/record-partial-long-press-handler.ts +0 -33
  99. package/src/data-list/record-partial.ts +0 -264
  100. package/src/data-manipulator.ts +0 -426
  101. package/src/data-provider.ts +0 -271
  102. package/src/data-report/data-report-body-style.ts +0 -58
  103. package/src/data-report/data-report-body.ts +0 -189
  104. package/src/data-report/data-report-component.ts +0 -138
  105. package/src/data-report/data-report-field.ts +0 -83
  106. package/src/data-report/data-report-header.ts +0 -242
  107. package/src/data-report/event-handlers/data-report-body-click-handler.ts +0 -38
  108. package/src/data-report/event-handlers/data-report-body-dblclick-handler.ts +0 -25
  109. package/src/data-report/event-handlers/data-report-body-keydown-handler.ts +0 -68
  110. package/src/data-report.ts +0 -424
  111. package/src/editors/index.ts +0 -4
  112. package/src/editors/ox-grist-editor-checkbox.ts +0 -28
  113. package/src/editors/ox-grist-editor-color.ts +0 -10
  114. package/src/editors/ox-grist-editor-date.ts +0 -10
  115. package/src/editors/ox-grist-editor-datetime.ts +0 -27
  116. package/src/editors/ox-grist-editor-email.ts +0 -10
  117. package/src/editors/ox-grist-editor-file.ts +0 -28
  118. package/src/editors/ox-grist-editor-image.ts +0 -31
  119. package/src/editors/ox-grist-editor-month.ts +0 -10
  120. package/src/editors/ox-grist-editor-multiple-select.ts +0 -57
  121. package/src/editors/ox-grist-editor-number.ts +0 -27
  122. package/src/editors/ox-grist-editor-password.ts +0 -10
  123. package/src/editors/ox-grist-editor-select.ts +0 -55
  124. package/src/editors/ox-grist-editor-tel.ts +0 -10
  125. package/src/editors/ox-grist-editor-text.ts +0 -14
  126. package/src/editors/ox-grist-editor-textarea.ts +0 -16
  127. package/src/editors/ox-grist-editor-time.ts +0 -10
  128. package/src/editors/ox-grist-editor-tree.ts +0 -27
  129. package/src/editors/ox-grist-editor-week.ts +0 -10
  130. package/src/editors/ox-grist-editor.ts +0 -207
  131. package/src/editors/ox-input-tree.ts +0 -226
  132. package/src/editors/registry.ts +0 -80
  133. package/src/empty-note.ts +0 -46
  134. package/src/filters/filter-checkbox.ts +0 -49
  135. package/src/filters/filter-input-barcode.ts +0 -34
  136. package/src/filters/filter-input.ts +0 -30
  137. package/src/filters/filter-range-date.ts +0 -81
  138. package/src/filters/filter-range-number.ts +0 -64
  139. package/src/filters/filter-select-buttons.ts +0 -60
  140. package/src/filters/filter-select.ts +0 -68
  141. package/src/filters/filter-styles.ts +0 -119
  142. package/src/filters/filters-form.ts +0 -476
  143. package/src/filters/index.ts +0 -10
  144. package/src/filters/registry.ts +0 -56
  145. package/src/formatters/date-formatter.ts +0 -3
  146. package/src/formatters/index.ts +0 -1
  147. package/src/formatters/number-formatter.ts +0 -3
  148. package/src/formatters/registry.ts +0 -30
  149. package/src/formatters/text-formatter.ts +0 -3
  150. package/src/gutters/gutter-button.ts +0 -51
  151. package/src/gutters/gutter-dirty.ts +0 -96
  152. package/src/gutters/gutter-row-selector.ts +0 -89
  153. package/src/gutters/gutter-sequence.ts +0 -54
  154. package/src/gutters/index.ts +0 -1
  155. package/src/gutters/registry.ts +0 -32
  156. package/src/handlers/contextmenu-tree-mutation.ts +0 -80
  157. package/src/handlers/index.ts +0 -1
  158. package/src/handlers/move-down.ts +0 -44
  159. package/src/handlers/move-up.ts +0 -44
  160. package/src/handlers/record-copy.ts +0 -38
  161. package/src/handlers/record-delete.ts +0 -30
  162. package/src/handlers/record-view-handler.ts +0 -27
  163. package/src/handlers/registry.ts +0 -42
  164. package/src/handlers/select-row-toggle.ts +0 -30
  165. package/src/handlers/select-row.ts +0 -27
  166. package/src/index.ts +0 -17
  167. package/src/personalizer/index.ts +0 -1
  168. package/src/personalizer/ox-grist-filter-personalizer.ts +0 -192
  169. package/src/personalizer/ox-grist-personalizer.ts +0 -226
  170. package/src/record-view/event-handlers/record-view-body-click-handler.ts +0 -33
  171. package/src/record-view/event-handlers/record-view-body-keydown-handler.ts +0 -26
  172. package/src/record-view/index.ts +0 -2
  173. package/src/record-view/record-creator.ts +0 -226
  174. package/src/record-view/record-view-body.ts +0 -257
  175. package/src/record-view/record-view-handler.ts +0 -86
  176. package/src/record-view/record-view.ts +0 -122
  177. package/src/renderers/index.ts +0 -14
  178. package/src/renderers/ox-grist-renderer-boolean.ts +0 -43
  179. package/src/renderers/ox-grist-renderer-color.ts +0 -15
  180. package/src/renderers/ox-grist-renderer-date.ts +0 -62
  181. package/src/renderers/ox-grist-renderer-file.ts +0 -31
  182. package/src/renderers/ox-grist-renderer-image.ts +0 -27
  183. package/src/renderers/ox-grist-renderer-json5.ts +0 -36
  184. package/src/renderers/ox-grist-renderer-link.ts +0 -17
  185. package/src/renderers/ox-grist-renderer-password.ts +0 -7
  186. package/src/renderers/ox-grist-renderer-progress.ts +0 -45
  187. package/src/renderers/ox-grist-renderer-select.ts +0 -58
  188. package/src/renderers/ox-grist-renderer-text.ts +0 -16
  189. package/src/renderers/ox-grist-renderer-textarea.ts +0 -7
  190. package/src/renderers/ox-grist-renderer-tree.ts +0 -189
  191. package/src/renderers/ox-grist-renderer.ts +0 -35
  192. package/src/renderers/registry.ts +0 -111
  193. package/src/sorters/sorters-control.ts +0 -143
  194. package/src/types.ts +0 -813
  195. package/src/utils/index.ts +0 -2
  196. package/src/utils/list-param.ts +0 -72
  197. package/src/utils/supports-passive.ts +0 -13
  198. package/stories/accumulator-format.stories.ts +0 -276
  199. package/stories/barcode-input-filter.stories.ts +0 -216
  200. package/stories/bounded-select-filters.stories.ts +0 -333
  201. package/stories/bounded-select-record.stories.ts +0 -336
  202. package/stories/click-event.stories.ts +0 -283
  203. package/stories/creatable-only-column.stories.ts +0 -253
  204. package/stories/default-filters.stories.ts +0 -241
  205. package/stories/dynamic-editable.stories.ts +0 -313
  206. package/stories/empty-sorters.stories.ts +0 -180
  207. package/stories/explicit-fetch.stories.ts +0 -186
  208. package/stories/fixed-column.stories.ts +0 -416
  209. package/stories/grid-setting.stories.ts +0 -501
  210. package/stories/grist-modes.stories.ts +0 -451
  211. package/stories/group-header.stories.ts +0 -442
  212. package/stories/record-view.stories.ts +0 -143
  213. package/stories/textarea.stories.ts +0 -261
  214. package/stories/tree-column-with-checkbox.stories.ts +0 -297
  215. package/stories/tree-column.stories.ts +0 -296
  216. package/tsconfig.json +0 -26
  217. package/web-dev-server.config.mjs +0 -27
  218. package/web-test-runner.config.mjs +0 -45
@@ -1,43 +0,0 @@
1
- import { FieldRenderer } from '../types'
2
- import { html } from 'lit'
3
-
4
- export const OxGristRendererBoolean: FieldRenderer = (value, column, record, rowIndex, field) => {
5
- let { editable } = column.record
6
- if (typeof editable === 'function') {
7
- editable = editable.call(field, value, column, record, rowIndex, field)
8
- }
9
-
10
- return html`
11
- <input
12
- type="checkbox"
13
- .checked=${!!value && !!String(value).match(/true/i)}
14
- ?disabled=${!editable}
15
- @mousedown=${(e: Event) => {
16
- /* edit mode로 전환되지 않도록 차단함. 체크박스인풋은 렌더러 모드에서도 처리가능하므로. */
17
- e.stopPropagation()
18
- }}
19
- @click=${(e: Event) => {
20
- e.stopPropagation()
21
- /*
22
- * 특별하게, checkbox인 경우에, editor가 활성화되지 않아도, renderer에서 값을 변경할 수 있게 함.
23
- * checkbox가 클릭되면, 클릭에 의해 변경된 값을 레코드에 반영하기 위해서 value-changed 이벤트를 발생시킨다.
24
- *
25
- * 만일, readonly인 경우에는 click 이벤트가 발생하지 않으므로, 클릭으로 에디트할 수 없게 됨.
26
- */
27
- field.dispatchEvent(
28
- new CustomEvent('field-change', {
29
- bubbles: true,
30
- composed: true,
31
- detail: {
32
- before: value,
33
- after: (e.target as HTMLInputElement).checked,
34
- column: column,
35
- record: record,
36
- row: rowIndex
37
- }
38
- })
39
- )
40
- }}
41
- />
42
- `
43
- }
@@ -1,15 +0,0 @@
1
- import { html } from 'lit'
2
-
3
- import { FieldRenderer } from '../types'
4
-
5
- export const OxGristRendererColor: FieldRenderer = (value, column, record, rowIndex, field) => {
6
- value = value == null ? '#000' : value
7
-
8
- return html`
9
- <div
10
- style="display:flex;align-items:center;justify-content:center;width:100%;height:100%;background-color:${value};"
11
- >
12
- ${value ? html`<p>${value}</p>` : html`<p>&nbsp</p>`}
13
- </div>
14
- `
15
- }
@@ -1,62 +0,0 @@
1
- import { FieldRenderer } from '../types'
2
- import { html } from 'lit'
3
-
4
- // TODO 로케일 설정에 따라서 포맷이 바뀌도록 해야한다.
5
- const DATETIME_OPTIONS = {
6
- year: 'numeric',
7
- month: 'numeric',
8
- day: 'numeric',
9
- hour: 'numeric',
10
- minute: 'numeric',
11
- second: 'numeric',
12
- hour12: false
13
- }
14
-
15
- const DATE_OPTIONS = {
16
- year: 'numeric',
17
- month: 'numeric',
18
- day: 'numeric'
19
- }
20
-
21
- const TIME_OPTIONS = {
22
- hour: 'numeric',
23
- minute: 'numeric',
24
- second: 'numeric'
25
- }
26
-
27
- const OPTIONS = {
28
- datetime: DATETIME_OPTIONS,
29
- time: TIME_OPTIONS,
30
- date: DATE_OPTIONS
31
- }
32
-
33
- function getsec(time: string): number {
34
- var arr = time.split(':')
35
- return Number(arr[0]) * 3600 + Number(arr[1]) * 60 + (Number(arr[2]) || 0)
36
- }
37
-
38
- /*
39
- TODO date, time, month, week 등 datetime 이 외의 타입인 경우에는 문자열로 처리하도록 한다.
40
- 따라서, 이 경우는 타임존에 대한 처리가 불필요하다.
41
- */
42
- export const OxGristRendererDate: FieldRenderer = (value, column, record, rowIndex, field) => {
43
- if (!value) {
44
- return ''
45
- }
46
-
47
- if (!isNaN(Number(value))) value = Number(value)
48
-
49
- var options = column.record.options || OPTIONS[column.type as 'datetime' | 'date' | 'time']
50
- var formatter = new Intl.DateTimeFormat(navigator.language, options)
51
-
52
- switch (column.type) {
53
- case 'datetime':
54
- case 'date':
55
- value = formatter.format(new Date(value))
56
- break
57
- case 'time':
58
- default:
59
- }
60
-
61
- return value ? html`<span>${value}</span>` : html`<span>&nbsp</span>`
62
- }
@@ -1,31 +0,0 @@
1
- import { html, nothing } from 'lit'
2
-
3
- import { FieldRenderer } from '../types'
4
-
5
- function download(file: { mimetype: string; name: string; fullpath: string }) {
6
- const element = document.createElement('a')
7
- element.setAttribute('href', file.fullpath)
8
- element.setAttribute('download', file.name!)
9
- document.body.appendChild(element)
10
- element.click()
11
- }
12
-
13
- export const OxGristRendererFile: FieldRenderer = (value, column, record, rowIndex, field) => {
14
- let text: string
15
-
16
- if (!value) {
17
- return html`<span>&nbsp;</span>`
18
- } else if (typeof value === 'string') {
19
- return html`<span>${value}</span>`
20
- } else {
21
- const files = value as { mimetype: string; name: string; fullpath: string }[]
22
- return html`<span
23
- >${files.map(
24
- (file, idx) => html`
25
- <a @click=${() => download(file)} file><md-icon>description</md-icon>${file.name}</a>
26
- ${files.length - 1 == idx ? html`</br>` : nothing}
27
- `
28
- )}</span
29
- >`
30
- }
31
- }
@@ -1,27 +0,0 @@
1
- import { FieldRenderer } from '../types'
2
- import { html } from 'lit'
3
-
4
- const IMAGE_FALLBACK = new URL('../../../assets/images/no-image.png', import.meta.url).href
5
-
6
- export const OxGristRendererImage: FieldRenderer = (value, column, record, rowIndex, field) => {
7
- let src: string
8
-
9
- if (!value) {
10
- src = IMAGE_FALLBACK
11
- } else if (typeof value === 'string') {
12
- src = value
13
- } else {
14
- src = URL.createObjectURL(value)
15
- requestAnimationFrame(() => URL.revokeObjectURL(src))
16
- }
17
-
18
- const { width, height } = column.record.options || {}
19
-
20
- return html` <img
21
- src=${src}
22
- width=${width}
23
- height=${height}
24
- style="object-fit: contain; max-width: 100%;"
25
- onerror="this.src !== '${IMAGE_FALLBACK}' && (this.src = '${IMAGE_FALLBACK}')"
26
- />`
27
- }
@@ -1,36 +0,0 @@
1
- import JSON5 from 'json5'
2
- import { html } from 'lit'
3
-
4
- import { FieldRenderer } from '../types'
5
-
6
- function onmouseover(e: Event) {
7
- const element = e.target as HTMLPreElement
8
- var parsed
9
- try {
10
- parsed = JSON5.parse(element.textContent!)
11
- } catch {}
12
-
13
- element.setAttribute('data-tooltip', JSON5.stringify(parsed, null, 2))
14
-
15
- const rect = element.getBoundingClientRect()
16
- element.style.setProperty('--tooltip-top', `${rect.top + rect.height}px`)
17
- element.style.setProperty('--tooltip-left', `${rect.left}px`)
18
- }
19
-
20
- function onmouseout(e: Event) {
21
- const element = e.target as HTMLPreElement
22
- element.removeAttribute('data-tooltip')
23
- }
24
-
25
- export const OxGristRendererJson5: FieldRenderer = (value, column, record, rowIndex, field) => {
26
- var parsed: any = value
27
-
28
- if (typeof value === 'string') {
29
- try {
30
- parsed = JSON5.parse(value)
31
- } catch {}
32
- }
33
-
34
- const text = parsed == null ? '' : JSON5.stringify(parsed)
35
- return html`<pre @mouseover=${onmouseover} @mouseout=${onmouseout}>${text}</pre>`
36
- }
@@ -1,17 +0,0 @@
1
- import { html } from 'lit'
2
-
3
- import { FieldRenderer } from '../types'
4
-
5
- export const OxGristRendererLink: FieldRenderer = (value, column, record, rowIndex, field) => {
6
- var { href, target } = column.record.options || {}
7
-
8
- value = value == null ? '' : value
9
-
10
- if (typeof href == 'function') {
11
- href = href(value, column, record, rowIndex, field)
12
- }
13
-
14
- return target
15
- ? html` <a style="text-decoration:none;color:inherit" href=${href || value} target=${target}>${value}&nbsp;</a> `
16
- : html` <a style="text-decoration:none;color:inherit" href=${href || value}>${value}&nbsp;</a> `
17
- }
@@ -1,7 +0,0 @@
1
- import { html } from 'lit'
2
-
3
- import { FieldRenderer } from '../types'
4
-
5
- export const OxGristRendererPassword: FieldRenderer = (value, column, record, rowIndex, field) => {
6
- return html`<span>********</span>`
7
- }
@@ -1,45 +0,0 @@
1
- import { css, html } from 'lit'
2
- import { customElement, property } from 'lit/decorators.js'
3
-
4
- import { OxGristRenderer } from './ox-grist-renderer'
5
-
6
- @customElement('ox-grist-progress-renderer')
7
- export class OxGristRendererProgress extends OxGristRenderer {
8
- static styles = css`
9
- :host {
10
- display: block;
11
- position: relative;
12
-
13
- width: 100%;
14
- }
15
-
16
- #border {
17
- display: block;
18
- position: absolute;
19
-
20
- height: 100%;
21
- width: 100%;
22
- box-sizing: border-box;
23
-
24
- border: var(--grist-input-progress-border);
25
- background-color: var(--grist-input-progress-background);
26
- }
27
-
28
- #bar {
29
- background-color: var(--grist-input-progress-bar-background);
30
- text-align: left;
31
- color: var(--grist-input-progress-bar-color);
32
- }
33
- `
34
-
35
- get rendererTemplate() {
36
- var { min = 0, max = 100 } = this.column.record.options || {}
37
- var value = Number(this.value)
38
- var progress = isNaN(value) ? 0 : Math.min(100, Math.max(0, ((value - min) * 100) / (max - min)))
39
-
40
- return html`
41
- <div id="border"></div>
42
- <div id="bar" style="width:${progress}%">&nbsp;${progress}</div>
43
- `
44
- }
45
- }
@@ -1,58 +0,0 @@
1
- import { html } from 'lit'
2
- import { until } from 'lit/directives/until.js'
3
-
4
- import { FieldRenderer, SelectOption, SelectOptionObject } from '../types'
5
-
6
- function buildOptions(options: SelectOption[], value: any) {
7
- const selectOptionObjects = options.map(option => {
8
- switch (typeof option) {
9
- case 'string':
10
- return {
11
- display: option,
12
- value: option
13
- }
14
- case 'object':
15
- return {
16
- display: option.display || option.name,
17
- value: option.value
18
- }
19
- default:
20
- return option
21
- }
22
- }) as SelectOptionObject[]
23
-
24
- var res = selectOptionObjects
25
- ? selectOptionObjects.filter((option: any) => option.value == String(value == null ? '' : value))
26
- : []
27
-
28
- if (res.length) {
29
- return html`<span>${res[0].display || res[0].name || ''}</span>`
30
- }
31
- return html`<span>${value}</span>`
32
- }
33
-
34
- export const OxGristRendererSelect: FieldRenderer = (value, column, record, rowIndex, field) => {
35
- if (value == null) {
36
- return ''
37
- }
38
-
39
- var rowOptionField = column.record.rowOptionField && record[column.record.rowOptionField]
40
- var options = rowOptionField?.options ? rowOptionField.options : column.record.options
41
-
42
- if (!options) {
43
- console.error(`options value for select '${column.name}' column is mandatory.`)
44
- } else if (typeof options == 'function') {
45
- options = options.call(null, value, column, record, rowIndex, field)
46
-
47
- if (options instanceof Promise) {
48
- return html`${until(
49
- options.then(options => buildOptions(options, value)),
50
- value
51
- )}`
52
- } else {
53
- return buildOptions((options || []) as SelectOption[], value)
54
- }
55
- } else {
56
- return buildOptions((options || []) as SelectOption[], value)
57
- }
58
- }
@@ -1,16 +0,0 @@
1
- import { html } from 'lit'
2
-
3
- import { format as formatter } from '@operato/utils'
4
-
5
- import { FieldRenderer } from '../types'
6
-
7
- export const OxGristRendererText: FieldRenderer = (value, column, record, rowIndex, field) => {
8
- var { format } = column.record || {}
9
-
10
- var text = value == null ? '' : value
11
- if (format) {
12
- text = formatter(format, text)
13
- }
14
-
15
- return html`<span data-reactive-tooltip>${text}&nbsp;</span>`
16
- }
@@ -1,7 +0,0 @@
1
- import { html } from 'lit'
2
-
3
- import { FieldRenderer } from '../types'
4
-
5
- export const OxGristRendererTextarea: FieldRenderer = (value, column, record, rowIndex, field) => {
6
- return html`<span style="height:auto;white-space: pre-wrap;word-wrap:break-word;">${value}&nbsp;</span>`
7
- }
@@ -1,189 +0,0 @@
1
- import { PropertyValues, css, html, nothing } from 'lit'
2
- import { customElement, property, state } from 'lit/decorators.js'
3
- import { ifDefined } from 'lit/directives/if-defined.js'
4
-
5
- import { OxGristRenderer } from './ox-grist-renderer'
6
-
7
- @customElement('ox-grist-tree-renderer')
8
- export class OxGristRendererTree extends OxGristRenderer {
9
- static styles = css`
10
- :host {
11
- overflow: hidden;
12
- }
13
-
14
- div[wrap] {
15
- position: relative;
16
-
17
- display: flex;
18
- align-items: center;
19
- gap: 6px;
20
-
21
- width: 100%;
22
- padding-left: calc(var(--tree-depth, 0) * 18px);
23
- }
24
-
25
- span[expander] {
26
- display: inline-block;
27
- vertical-align: middle;
28
- width: 12px;
29
- height: 20px;
30
- cursor: pointer;
31
- position: relative;
32
- }
33
-
34
- span[expander][collapsed]::before {
35
- position: absolute;
36
- top: 50%;
37
- left: 50%;
38
- transform: translate(-25%, -50%) rotate(-90deg);
39
- content: ' ';
40
- border: 5px solid transparent;
41
- border-top: 5px solid var(--md-sys-color-on-primary-container, #1890ff);
42
- }
43
-
44
- span[expander][expanded]::before {
45
- position: absolute;
46
- top: 50%;
47
- left: 50%;
48
- transform: translate(-50%, -25%);
49
- content: ' ';
50
- border: 5px solid transparent;
51
- border-top: 5px solid var(--md-sys-color-on-primary-container, #1890ff);
52
- }
53
-
54
- span[checkbox] {
55
- display: inline-block;
56
- vertical-align: middle;
57
- width: 12px;
58
- height: 20px;
59
- cursor: pointer;
60
- position: relative;
61
- }
62
-
63
- span[checkbox]::before {
64
- cursor: pointer;
65
- position: absolute;
66
- top: 50%;
67
- left: 50%;
68
- transform: translate(-50%, -50%);
69
- content: ' ';
70
- display: block;
71
- width: 10px;
72
- height: 10px;
73
- border: 1px solid var(--md-sys-color-on-primary-container, #1890ff);
74
- border-radius: 2px;
75
- }
76
-
77
- span[label] {
78
- flex: 1;
79
- }
80
-
81
- span[checkbox][checked='checked']::before {
82
- background-color: var(--md-sys-color-on-primary-container, #1890ff);
83
- border-color: var(--md-sys-color-on-primary-container, #1890ff);
84
- }
85
-
86
- span[checkbox][checked='checked']::after {
87
- position: absolute;
88
- content: ' ';
89
- display: block;
90
- top: 50%;
91
- left: 50%;
92
- width: 3px;
93
- height: 7px;
94
- border: 2px solid #fff;
95
- border-top: none;
96
- border-left: none;
97
- -webkit-transform: translate(-50%, -50%) rotate(45deg);
98
- -ms-transform: translate(-50%, -50%) rotate(45deg);
99
- transform: translate(-50%, -50%) rotate(45deg);
100
- }
101
-
102
- span[checkbox][checked='half-checked']::before {
103
- background-color: var(--md-sys-color-on-primary-container, #1890ff);
104
- border-color: var(--md-sys-color-on-primary-container, #1890ff);
105
- }
106
-
107
- span[checkbox][checked='half-checked']::after {
108
- position: absolute;
109
- content: ' ';
110
- display: block;
111
- top: 50%;
112
- left: 50%;
113
- transform: translate(-50%, -50%);
114
- width: 10px;
115
- height: 2px;
116
- background-color: var(--md-sys-color-surface);
117
- }
118
- `
119
-
120
- @state() private checked?: 'checked' | 'half-checked' | 'unchecked'
121
- @state() private expanded?: boolean = false
122
-
123
- get rendererTemplate() {
124
- var { selectable = false } = this.column.record.options || {}
125
- var { __children__ } = this.record
126
-
127
- const expandable = __children__ && __children__.length > 0
128
-
129
- return html`
130
- <div wrap>
131
- ${expandable
132
- ? html`
133
- <span
134
- expander
135
- @click=${this.onClickExpander.bind(this)}
136
- ?expanded=${this.expanded}
137
- ?collapsed=${!this.expanded}
138
- ></span>
139
- `
140
- : html`<span expander></span>`}
141
- ${selectable
142
- ? html` <span checkbox @click=${this.onClickCheckbox.bind(this)} checked=${ifDefined(this.checked)}></span>`
143
- : nothing}
144
-
145
- <span label>${this.value}</span>
146
- </div>
147
- `
148
- }
149
-
150
- updated(changes: PropertyValues<this>) {
151
- var { __depth__, __check_in_tree__, __expanded__ } = this.record
152
- this.checked = __check_in_tree__
153
- this.expanded = __expanded__
154
-
155
- this.style.setProperty('--tree-depth', String(__depth__))
156
- }
157
-
158
- onClickCheckbox(e: MouseEvent) {
159
- e.stopPropagation()
160
-
161
- this.dispatchEvent(
162
- new CustomEvent('check-in-tree', {
163
- bubbles: true,
164
- composed: true,
165
- detail: this.record
166
- })
167
- )
168
-
169
- this.requestUpdate()
170
- }
171
-
172
- onClickExpander(e: MouseEvent) {
173
- e.stopPropagation()
174
-
175
- this.dispatchEvent(
176
- new CustomEvent(this.record.__expanded__ ? 'collapse-node' : 'expand-node', {
177
- bubbles: true,
178
- composed: true,
179
- detail: this.record
180
- })
181
- )
182
-
183
- this.requestUpdate()
184
- }
185
-
186
- get editableOnClick() {
187
- return false
188
- }
189
- }
@@ -1,35 +0,0 @@
1
- import { ColumnConfig, GristRecord } from '../types'
2
- import { LitElement, css, html } from 'lit'
3
- import { ZERO_COLUMN, ZERO_RECORD } from '../configure/zero-config'
4
- import { customElement, property } from 'lit/decorators.js'
5
-
6
- import { DataGridField } from '../data-grid/data-grid-field'
7
-
8
- const STYLE = css``
9
-
10
- @customElement('ox-grist-renderer')
11
- export class OxGristRenderer extends LitElement {
12
- static styles = STYLE
13
-
14
- @property({ type: Object }) value?: any
15
- @property({ type: Object }) column: ColumnConfig = ZERO_COLUMN
16
- @property({ type: Object }) record: GristRecord = ZERO_RECORD
17
- @property({ type: Number }) rowIndex?: number
18
- @property({ type: Object }) field?: DataGridField
19
- @property({ type: Number }) row?: number
20
-
21
- render() {
22
- return this.rendererTemplate
23
- }
24
-
25
- async firstUpdated() {
26
- const align = this.column.record.align
27
- if (align) {
28
- this.style.textAlign = align
29
- }
30
- }
31
-
32
- get rendererTemplate() {
33
- return html``
34
- }
35
- }