@operato/data-grist 8.0.0-beta.0 → 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 (164) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/package.json +10 -10
  3. package/.storybook/main.js +0 -3
  4. package/.storybook/preview.js +0 -52
  5. package/.storybook/server.mjs +0 -8
  6. package/src/accumulator/accumulator.ts +0 -63
  7. package/src/configure/column-builder.ts +0 -114
  8. package/src/configure/config-builder.ts +0 -40
  9. package/src/configure/filters-option-builder.ts +0 -8
  10. package/src/configure/imex-option-builder.ts +0 -5
  11. package/src/configure/list-option-builder.ts +0 -9
  12. package/src/configure/rows-option-builder.ts +0 -38
  13. package/src/configure/tree-option-builder.ts +0 -22
  14. package/src/configure/zero-config.ts +0 -83
  15. package/src/const.ts +0 -1
  16. package/src/data-card/data-card-field.ts +0 -94
  17. package/src/data-card/data-card-gutter-menu.ts +0 -94
  18. package/src/data-card/data-card-gutter.ts +0 -103
  19. package/src/data-card/data-card.ts +0 -154
  20. package/src/data-card/event-handlers/record-card-click-handler.ts +0 -34
  21. package/src/data-card/event-handlers/record-card-dblclick-handler.ts +0 -34
  22. package/src/data-card/record-card.ts +0 -298
  23. package/src/data-consumer.ts +0 -11
  24. package/src/data-grid/data-grid-accum-field.ts +0 -109
  25. package/src/data-grid/data-grid-body-style.ts +0 -85
  26. package/src/data-grid/data-grid-body.ts +0 -765
  27. package/src/data-grid/data-grid-field.ts +0 -227
  28. package/src/data-grid/data-grid-footer.ts +0 -119
  29. package/src/data-grid/data-grid-header.ts +0 -578
  30. package/src/data-grid/data-grid.ts +0 -293
  31. package/src/data-grid/event-handlers/data-grid-body-click-handler.ts +0 -69
  32. package/src/data-grid/event-handlers/data-grid-body-contextmenu-handler.ts +0 -32
  33. package/src/data-grid/event-handlers/data-grid-body-dblclick-handler.ts +0 -42
  34. package/src/data-grid/event-handlers/data-grid-body-focus-change-handler.ts +0 -24
  35. package/src/data-grid/event-handlers/data-grid-body-keydown-handler.ts +0 -234
  36. package/src/data-grist.ts +0 -1233
  37. package/src/data-list/data-list-field.ts +0 -82
  38. package/src/data-list/data-list-gutter.ts +0 -108
  39. package/src/data-list/data-list.ts +0 -145
  40. package/src/data-list/event-handlers/record-partial-click-handler.ts +0 -34
  41. package/src/data-list/event-handlers/record-partial-dblclick-handler.ts +0 -33
  42. package/src/data-list/event-handlers/record-partial-long-press-handler.ts +0 -33
  43. package/src/data-list/record-partial.ts +0 -264
  44. package/src/data-manipulator.ts +0 -426
  45. package/src/data-provider.ts +0 -271
  46. package/src/data-report/data-report-body-style.ts +0 -58
  47. package/src/data-report/data-report-body.ts +0 -189
  48. package/src/data-report/data-report-component.ts +0 -138
  49. package/src/data-report/data-report-field.ts +0 -83
  50. package/src/data-report/data-report-header.ts +0 -242
  51. package/src/data-report/event-handlers/data-report-body-click-handler.ts +0 -38
  52. package/src/data-report/event-handlers/data-report-body-dblclick-handler.ts +0 -25
  53. package/src/data-report/event-handlers/data-report-body-keydown-handler.ts +0 -68
  54. package/src/data-report.ts +0 -424
  55. package/src/editors/index.ts +0 -4
  56. package/src/editors/ox-grist-editor-checkbox.ts +0 -28
  57. package/src/editors/ox-grist-editor-color.ts +0 -10
  58. package/src/editors/ox-grist-editor-date.ts +0 -10
  59. package/src/editors/ox-grist-editor-datetime.ts +0 -27
  60. package/src/editors/ox-grist-editor-email.ts +0 -10
  61. package/src/editors/ox-grist-editor-file.ts +0 -28
  62. package/src/editors/ox-grist-editor-image.ts +0 -31
  63. package/src/editors/ox-grist-editor-month.ts +0 -10
  64. package/src/editors/ox-grist-editor-multiple-select.ts +0 -57
  65. package/src/editors/ox-grist-editor-number.ts +0 -27
  66. package/src/editors/ox-grist-editor-password.ts +0 -10
  67. package/src/editors/ox-grist-editor-select.ts +0 -55
  68. package/src/editors/ox-grist-editor-tel.ts +0 -10
  69. package/src/editors/ox-grist-editor-text.ts +0 -14
  70. package/src/editors/ox-grist-editor-textarea.ts +0 -16
  71. package/src/editors/ox-grist-editor-time.ts +0 -10
  72. package/src/editors/ox-grist-editor-tree.ts +0 -27
  73. package/src/editors/ox-grist-editor-varname.ts +0 -36
  74. package/src/editors/ox-grist-editor-week.ts +0 -10
  75. package/src/editors/ox-grist-editor.ts +0 -207
  76. package/src/editors/ox-input-tree.ts +0 -226
  77. package/src/editors/registry.ts +0 -82
  78. package/src/empty-note.ts +0 -46
  79. package/src/filters/filter-checkbox.ts +0 -49
  80. package/src/filters/filter-input-barcode.ts +0 -34
  81. package/src/filters/filter-input.ts +0 -30
  82. package/src/filters/filter-range-date.ts +0 -81
  83. package/src/filters/filter-range-number.ts +0 -64
  84. package/src/filters/filter-select-buttons.ts +0 -60
  85. package/src/filters/filter-select.ts +0 -68
  86. package/src/filters/filter-styles.ts +0 -119
  87. package/src/filters/filters-form.ts +0 -476
  88. package/src/filters/index.ts +0 -10
  89. package/src/filters/registry.ts +0 -56
  90. package/src/formatters/date-formatter.ts +0 -3
  91. package/src/formatters/index.ts +0 -1
  92. package/src/formatters/number-formatter.ts +0 -3
  93. package/src/formatters/registry.ts +0 -30
  94. package/src/formatters/text-formatter.ts +0 -3
  95. package/src/gutters/gutter-button.ts +0 -51
  96. package/src/gutters/gutter-dirty.ts +0 -96
  97. package/src/gutters/gutter-row-selector.ts +0 -89
  98. package/src/gutters/gutter-sequence.ts +0 -54
  99. package/src/gutters/index.ts +0 -1
  100. package/src/gutters/registry.ts +0 -32
  101. package/src/handlers/contextmenu-tree-mutation.ts +0 -80
  102. package/src/handlers/index.ts +0 -1
  103. package/src/handlers/move-down.ts +0 -44
  104. package/src/handlers/move-up.ts +0 -44
  105. package/src/handlers/record-copy.ts +0 -38
  106. package/src/handlers/record-delete.ts +0 -30
  107. package/src/handlers/record-view-handler.ts +0 -27
  108. package/src/handlers/registry.ts +0 -42
  109. package/src/handlers/select-row-toggle.ts +0 -30
  110. package/src/handlers/select-row.ts +0 -27
  111. package/src/index.ts +0 -17
  112. package/src/personalizer/index.ts +0 -1
  113. package/src/personalizer/ox-grist-filter-personalizer.ts +0 -192
  114. package/src/personalizer/ox-grist-personalizer.ts +0 -226
  115. package/src/record-view/event-handlers/record-view-body-click-handler.ts +0 -33
  116. package/src/record-view/event-handlers/record-view-body-keydown-handler.ts +0 -26
  117. package/src/record-view/index.ts +0 -2
  118. package/src/record-view/ox-record-creator.ts +0 -289
  119. package/src/record-view/record-view-body.ts +0 -257
  120. package/src/record-view/record-view-handler.ts +0 -86
  121. package/src/record-view/record-view.ts +0 -122
  122. package/src/renderers/index.ts +0 -14
  123. package/src/renderers/ox-grist-renderer-boolean.ts +0 -43
  124. package/src/renderers/ox-grist-renderer-color.ts +0 -15
  125. package/src/renderers/ox-grist-renderer-date.ts +0 -62
  126. package/src/renderers/ox-grist-renderer-file.ts +0 -31
  127. package/src/renderers/ox-grist-renderer-image.ts +0 -27
  128. package/src/renderers/ox-grist-renderer-json5.ts +0 -36
  129. package/src/renderers/ox-grist-renderer-link.ts +0 -17
  130. package/src/renderers/ox-grist-renderer-password.ts +0 -7
  131. package/src/renderers/ox-grist-renderer-progress.ts +0 -45
  132. package/src/renderers/ox-grist-renderer-select.ts +0 -58
  133. package/src/renderers/ox-grist-renderer-text.ts +0 -16
  134. package/src/renderers/ox-grist-renderer-textarea.ts +0 -7
  135. package/src/renderers/ox-grist-renderer-tree.ts +0 -189
  136. package/src/renderers/ox-grist-renderer.ts +0 -35
  137. package/src/renderers/registry.ts +0 -111
  138. package/src/sorters/sorters-control.ts +0 -143
  139. package/src/types.ts +0 -813
  140. package/src/utils/index.ts +0 -2
  141. package/src/utils/list-param.ts +0 -72
  142. package/src/utils/supports-passive.ts +0 -13
  143. package/stories/accumulator-format.stories.ts +0 -276
  144. package/stories/barcode-input-filter.stories.ts +0 -216
  145. package/stories/bounded-select-filters.stories.ts +0 -333
  146. package/stories/bounded-select-record.stories.ts +0 -336
  147. package/stories/click-event-custom.stories.ts +0 -287
  148. package/stories/click-event.stories.ts +0 -283
  149. package/stories/creatable-only-column.stories.ts +0 -253
  150. package/stories/default-filters.stories.ts +0 -241
  151. package/stories/dynamic-editable.stories.ts +0 -313
  152. package/stories/empty-sorters.stories.ts +0 -180
  153. package/stories/explicit-fetch.stories.ts +0 -186
  154. package/stories/fixed-column.stories.ts +0 -416
  155. package/stories/grid-setting.stories.ts +0 -501
  156. package/stories/grist-modes.stories.ts +0 -451
  157. package/stories/group-header.stories.ts +0 -442
  158. package/stories/record-view.stories.ts +0 -143
  159. package/stories/textarea.stories.ts +0 -261
  160. package/stories/tree-column-with-checkbox.stories.ts +0 -297
  161. package/stories/tree-column.stories.ts +0 -296
  162. package/tsconfig.json +0 -26
  163. package/web-dev-server.config.mjs +0 -27
  164. package/web-test-runner.config.mjs +0 -45
@@ -1,122 +0,0 @@
1
- import '@material/web/icon/icon.js'
2
- import './record-view-body'
3
- import '@operato/input/ox-input-file.js'
4
- import '../data-grid/data-grid-field'
5
-
6
- import { css, html, LitElement } from 'lit'
7
- import { customElement, property, query } from 'lit/decorators.js'
8
-
9
- import { ScrollbarStyles } from '@operato/styles'
10
-
11
- import { ZERO_RECORD } from '../configure/zero-config'
12
- import { ColumnConfig, GristRecord, ValidationReason } from '../types'
13
-
14
- import { RecordViewBody } from './record-view-body'
15
-
16
- @customElement('ox-record-view')
17
- export class RecordView extends LitElement {
18
- static styles = [
19
- ScrollbarStyles,
20
- css`
21
- :host {
22
- display: flex;
23
- flex-direction: column;
24
- background-color: var(--record-view-background-color);
25
- }
26
-
27
- ox-record-view-body {
28
- flex: 1;
29
- overflow-y: auto;
30
- }
31
-
32
- [footer] {
33
- text-align: right;
34
- background-color: var(--record-view-footer-background);
35
- box-shadow: var(--context-toolbar-shadow-line);
36
- }
37
-
38
- [footer] button {
39
- display: inline-block;
40
- align-items: center;
41
- justify-content: center;
42
-
43
- background-color: transparent;
44
- border: var(--record-view-footer-button-border);
45
- border-width: var(--record-view-footer-button-border-width);
46
- padding: var(--spacing-tiny) var(--spacing-medium);
47
- color: var(--record-view-footer-button-color);
48
- font-size: var(--md-sys-typescale-title-medium-size, 1rem);
49
- line-height: 2;
50
- }
51
-
52
- [footer] button * {
53
- vertical-align: middle;
54
- }
55
-
56
- [footer] button md-icon {
57
- --md-icon-size: var(--icon-size-small);
58
- margin-right: var(--spacing-small, 4px);
59
- }
60
-
61
- [footer] button[ok] {
62
- background-color: var(--record-view-footer-focus-background);
63
- }
64
- `
65
- ]
66
-
67
- @property({ type: Array }) columns: ColumnConfig[] = []
68
- @property({ type: Object }) record: GristRecord = ZERO_RECORD
69
- @property({ type: Number }) rowIndex: number = -1
70
-
71
- @query('ox-record-view-body') body!: RecordViewBody
72
-
73
- render() {
74
- return html`
75
- <ox-record-view-body .columns=${this.columns} .record=${this.record} .rowIndex=${this.rowIndex}>
76
- </ox-record-view-body>
77
- <div footer>
78
- <button @click=${this.onReset.bind(this)}><md-icon>refresh</md-icon><span>Reset</span></button>
79
- <button @click=${this.onCancel.bind(this)}><md-icon>clear</md-icon><span>Cancel</span></button>
80
- <button @click=${this.onOK.bind(this)} ok><md-icon>task_alt</md-icon><span>OK</span></button>
81
- </div>
82
- `
83
- }
84
-
85
- firstUpdated() {
86
- this.setAttribute('tabindex', '0')
87
- }
88
-
89
- setFocusOnInvalid(invalidFields: { field: string; reason: ValidationReason }[]) {
90
- this.body.setFocusOnInvalid(invalidFields)
91
- }
92
-
93
- onReset() {
94
- this.focus()
95
-
96
- this.dispatchEvent(
97
- new CustomEvent('reset', {
98
- detail: this.record
99
- })
100
- )
101
- }
102
-
103
- onCancel() {
104
- this.focus()
105
-
106
- this.dispatchEvent(
107
- new CustomEvent('cancel', {
108
- detail: this.record
109
- })
110
- )
111
- }
112
-
113
- onOK() {
114
- this.focus()
115
-
116
- this.dispatchEvent(
117
- new CustomEvent('ok', {
118
- detail: this.record
119
- })
120
- )
121
- }
122
- }
@@ -1,14 +0,0 @@
1
- export * from './registry.js'
2
-
3
- export * from './ox-grist-renderer.js'
4
- export * from './ox-grist-renderer-boolean.js'
5
- export * from './ox-grist-renderer-color.js'
6
- export * from './ox-grist-renderer-date.js'
7
- export * from './ox-grist-renderer-link.js'
8
- export * from './ox-grist-renderer-password.js'
9
- export * from './ox-grist-renderer-progress.js'
10
- export * from './ox-grist-renderer-text.js'
11
- export * from './ox-grist-renderer-select.js'
12
- export * from './ox-grist-renderer-image.js'
13
- export * from './ox-grist-renderer-file.js'
14
- export * from './ox-grist-renderer-json5.js'
@@ -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
- @pointerdown=${(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
- }