@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,94 +0,0 @@
1
- import '@material/web/icon/icon.js'
2
- import './data-card-gutter.js'
3
-
4
- import { css, html, LitElement } from 'lit'
5
- import { customElement, property, query } from 'lit/decorators.js'
6
-
7
- import { OxPopup } from '@operato/popup'
8
-
9
- import { ColumnConfig, GristRecord } from '../types.js'
10
-
11
- @customElement('ox-card-gutter-menu')
12
- class DataCardGutterMenu extends LitElement {
13
- static styles = css`
14
- :host {
15
- position: relative;
16
- }
17
-
18
- ::slotted(ox-popup) {
19
- padding: var(--spacing-small);
20
- }
21
-
22
- md-icon {
23
- flex: 1;
24
- margin: var(--spacing-none);
25
- border: var(--data-card-item-btn-border);
26
- border-radius: var(--data-card-item-btn-border-radius);
27
- padding: var(--data-card-item-btn-padding);
28
- font-size: var(--md-sys-typescale-label-large-size, 0.875rem);
29
- background-color: transparent;
30
- color: var(--grid-record-color);
31
- }
32
-
33
- md-icon:hover {
34
- cursor: pointer;
35
- background-color: var(--md-sys-color-primary);
36
- color: var(--md-sys-color-on-primary);
37
- }
38
- `
39
-
40
- @property({ type: Object }) gutters!: ColumnConfig[]
41
- @property({ type: Number }) rowIndex!: number
42
- @property({ type: Object }) record!: GristRecord
43
- @property() clickHandler!: EventListener
44
- @property() dblclickHandler!: EventListener
45
-
46
- @query('md-icon') icon!: Element
47
-
48
- render() {
49
- return html`
50
- <md-icon @click=${(e: Event) => this.open(e)}>more_horiz</md-icon>
51
- <slot></slot>
52
- `
53
- }
54
-
55
- menuRender() {
56
- return html`
57
- ${this.gutters.map(
58
- gutter => html`
59
- <ox-card-gutter
60
- .rowIndex=${this.rowIndex}
61
- .column=${gutter}
62
- .record=${this.record}
63
- .value=${this.record[gutter.name]}
64
- menu
65
- alive-on-select
66
- @click=${(e: Event) => {
67
- this.clickHandler(e)
68
- // TODO close popup
69
- }}
70
- @dblclick=${(e: Event) => {
71
- this.dblclickHandler(e)
72
- // TODO close popup
73
- }}
74
- ></ox-card-gutter>
75
- `
76
- )}
77
- `
78
- }
79
-
80
- open(e: Event) {
81
- e.stopPropagation()
82
-
83
- const bottom = (this.icon as HTMLElement).offsetHeight
84
- const left = -4
85
- const parent = this
86
-
87
- OxPopup.open({
88
- template: this.menuRender(),
89
- bottom,
90
- left,
91
- parent
92
- })
93
- }
94
- }
@@ -1,103 +0,0 @@
1
- import { css, html, LitElement, PropertyValues, TemplateResult } from 'lit'
2
- import { customElement, property } from 'lit/decorators.js'
3
-
4
- import { ZERO_COLUMN, ZERO_RECORD } from '../configure/zero-config'
5
- import { ColumnConfig, GristRecord } from '../types'
6
-
7
- @customElement('ox-card-gutter')
8
- export class DataCardGutter extends LitElement {
9
- static styles = [
10
- css`
11
- :host {
12
- display: flex;
13
- background-color: transparent;
14
- align-content: center;
15
- align-items: center;
16
- text-overflow: ellipsis;
17
- }
18
-
19
- :host([row-selector]) {
20
- margin-right: auto;
21
- }
22
-
23
- * {
24
- border: 0;
25
- font-size: var(--md-sys-typescale-label-medium-size, 0.8rem);
26
- line-height: var(--md-sys-typescale-label-medium-size, 0.8rem);
27
-
28
- color: var(--md-sys-color-on-primary);
29
- background-color: var(--md-sys-color-primary);
30
- border-radius: var(--data-card-item-btn-border-radius, var(--md-sys-shape-corner-tiny));
31
-
32
- padding: var(--spacing-small);
33
- }
34
-
35
- *:hover {
36
- cursor: pointer;
37
- color: var(--md-sys-color-on-secondary);
38
- background-color: var(--md-sys-color-secondary);
39
- }
40
-
41
- :host([danger]) button {
42
- color: var(--md-sys-color-on-error);
43
- background-color: var(--md-sys-color-error);
44
- border-color: var(--md-sys-color-error);
45
- }
46
-
47
- :host([danger]) button:hover {
48
- color: var(--md-sys-color-error);
49
- background-color: var(--md-sys-color-on-secondary);
50
- border-color: var(--md-sys-color-on-secondary);
51
- }
52
-
53
- button {
54
- display: flex;
55
- gap: var(--spacing-small);
56
- border: 0;
57
- align-items: center;
58
- }
59
-
60
- button md-icon {
61
- border: 0;
62
- padding: 0;
63
- background-color: unset;
64
- }
65
- `
66
- ]
67
-
68
- @property({ attribute: true }) align?: string
69
- @property({ type: Object }) record: GristRecord = ZERO_RECORD
70
- @property({ type: Object }) column: ColumnConfig = ZERO_COLUMN
71
- @property({ type: Number }) rowIndex: number = -1
72
- @property({ type: Object }) value?: object
73
-
74
- render(): TemplateResult {
75
- if (!this.column) {
76
- return html``
77
- }
78
-
79
- var { value, column, record, rowIndex } = this
80
- var { renderer } = column.record
81
-
82
- /* renderer가 html template이 아니고 단순한 값인 경우가 있으므로, html 템플릿으로 감싸준다. */
83
- return html` ${renderer(value, column, record, rowIndex, this)} `
84
- }
85
-
86
- updated(changes: PropertyValues<this>) {
87
- if (changes.has('column')) {
88
- const { gutterName, danger } = this.column
89
-
90
- if (gutterName == 'row-selector') {
91
- this.setAttribute('row-selector', '')
92
- } else {
93
- this.removeAttribute('row-selector')
94
- }
95
-
96
- if (danger) {
97
- this.setAttribute('danger', '')
98
- } else {
99
- this.removeAttribute('danger')
100
- }
101
- }
102
- }
103
- }
@@ -1,154 +0,0 @@
1
- import '@material/web/icon/icon.js'
2
- import '../empty-note'
3
- import './record-card'
4
-
5
- import { PropertyValues, css, html } from 'lit'
6
- import { customElement, property, state } from 'lit/decorators.js'
7
-
8
- import { DataManipulator } from '../data-manipulator'
9
- import { GristRecord } from '../types'
10
-
11
- @customElement('ox-card')
12
- export class DataCard extends DataManipulator {
13
- static styles = [
14
- css`
15
- :host {
16
- overflow-y: auto;
17
- padding: var(--spacing-medium);
18
-
19
- display: grid;
20
- grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
21
- grid-template-rows: min-content;
22
- grid-gap: var(--spacing-large);
23
- }
24
-
25
- [selected-row] {
26
- background-color: var(--grid-record-selected-background-color);
27
- }
28
-
29
- #upward {
30
- --md-icon-size: var(--icon-size-large);
31
- position: absolute;
32
- top: var(--data-card-fab-position-vertical);
33
- right: var(--data-card-fab-position-horizontal);
34
- background-color: rgba(255, 255, 255, 0.7);
35
- border-radius: var(--md-sys-shape-corner-large);
36
- color: var(--data-card-fab-color);
37
- box-shadow: var(--data-card-fab-shadow);
38
- padding: var(--spacing-small);
39
- }
40
-
41
- slot {
42
- width: 100%;
43
- }
44
-
45
- ox-empty-note {
46
- display: block;
47
- position: absolute;
48
- left: 50%;
49
- top: 50%;
50
- transform: translate(-50%, -50%);
51
- }
52
-
53
- [card][emphasized-row],
54
- [card][emphasized-row][focused] {
55
- background-color: var(--grid-record-emphasized-background-color);
56
- color: var(--grid-record-emphasized-color);
57
- }
58
-
59
- @media screen and (max-width: 460px) {
60
- #setting {
61
- grid-template-columns: 1fr;
62
- grid-template-rows: 1fr 1fr;
63
- }
64
- }
65
- `
66
- ]
67
-
68
- @property({ type: Boolean }) empty?: boolean
69
-
70
- @state() private _records: GristRecord[] = []
71
- @state() private isTop: boolean = false
72
-
73
- private _total: number = 0
74
- private _limit: number = 20
75
- private _page: number = 1
76
-
77
- firstUpdated(changes: PropertyValues<this>) {
78
- this.isTop = true
79
-
80
- /* infinite scrolling */
81
- this.addEventListener('scroll', e => {
82
- const totalScrollHeight = this.scrollHeight
83
- const screenHeight = this.offsetHeight
84
- const currentScrollTop = this.scrollTop
85
-
86
- if (totalScrollHeight <= screenHeight + currentScrollTop + 1) {
87
- /* 마지막 페이지까지 계속 페이지를 증가시킨다. */
88
- var lastPage = Math.ceil(this._total / this._limit)
89
-
90
- if (this._page < lastPage) {
91
- this.dispatchEvent(new CustomEvent('attach-page', { bubbles: true, composed: true }))
92
- }
93
- }
94
-
95
- this.isTop = this.scrollTop == 0
96
- })
97
- }
98
-
99
- updated(changes: PropertyValues<this>) {
100
- if (changes.has('config')) {
101
- this._records = []
102
- this._page = 1
103
- }
104
-
105
- if (changes.has('data')) {
106
- this._records = this.data.records
107
- this._total = this.data.total || 0
108
- this._limit = this.data.limit || 20
109
- this._page = this.data.page || 0
110
- }
111
- }
112
-
113
- render() {
114
- var { classifier } = this.config.rows
115
- var records = this._records || []
116
-
117
- if (this.config && this.config.rows.appendable) {
118
- records = [...records, { __dirty__: '+' }]
119
- }
120
-
121
- return html`
122
- ${records.map((record, rowIndex) => {
123
- var { emphasized } = classifier.call(null, record, rowIndex) || {}
124
-
125
- return html`
126
- <ox-record-card
127
- .config=${this.config}
128
- .data=${this.data}
129
- .record=${record}
130
- .rowIndex=${rowIndex}
131
- .emphasized=${emphasized}
132
- ?selected-row=${record['__selected__']}
133
- ?dirty=${record['__dirty__']}
134
- card
135
- ></ox-record-card>
136
- `
137
- })}
138
- ${this.empty ? html` <ox-empty-note title="NO RECORDS"></ox-empty-note> ` : html``}
139
- ${this.isTop
140
- ? html``
141
- : html` <md-icon id="upward" @click=${(e: Event) => this.gotoTop(e)}>arrow_upward</md-icon> `}
142
- `
143
- }
144
-
145
- gotoTop(e: Event) {
146
- this.scrollTop = 0
147
-
148
- e.stopPropagation()
149
- }
150
-
151
- get pullToRefreshTarget() {
152
- return this
153
- }
154
- }
@@ -1,34 +0,0 @@
1
- import { DataCardField } from '../data-card-field'
2
- import { DataCardGutter } from '../data-card-gutter'
3
- import { RecordCard } from '../record-card'
4
-
5
- /**
6
- * ox-record-card 의 click handler
7
- *
8
- * - handler의 this 는 ox-record-card임.
9
- */
10
- export function recordCardClickHandler(this: RecordCard, e: MouseEvent): void {
11
- e.stopPropagation()
12
-
13
- /* target should be [content] or 'ox-card-field' or 'ox-card-gutter' */
14
- var target = (e.target as Element).closest('ox-card-field, ox-card-gutter') as DataCardField | DataCardGutter
15
- var { column, rowIndex } = target || {}
16
-
17
- /* do column click handler */
18
- if (column) {
19
- var { click } = column.handlers
20
- if (click) {
21
- click(this.config.columns, this.data, column, this.record, rowIndex, target)
22
- return
23
- }
24
- }
25
-
26
- /* do rows click handler */
27
- var { click: rowsClick } = this.config.rows.handlers
28
- if (rowsClick) {
29
- rowsClick(this.config.columns, this.data, column, this.record, rowIndex, target)
30
- } else {
31
- /* content 가 클릭된 경우 - 레코드뷰 팝업을 실행한다. */
32
- this.config.rows.editable && this.popupRecordView()
33
- }
34
- }
@@ -1,34 +0,0 @@
1
- import { DataCardField } from '../data-card-field'
2
- import { DataCardGutter } from '../data-card-gutter'
3
- import { RecordCard } from '../record-card'
4
-
5
- /**
6
- * ox-record-card 의 dblclick handler
7
- *
8
- * - handler의 this 는 ox-record-card임.
9
- */
10
- export function recordCardDblClickHandler(this: RecordCard, e: MouseEvent): void {
11
- e.stopPropagation()
12
-
13
- /* target should be [content] or 'ox-card-field' or 'ox-card-gutter' */
14
- var target = (e.target as Element).closest('ox-card-field, ox-card-gutter') as DataCardField | DataCardGutter
15
-
16
- var { column, record, rowIndex } = target || {}
17
-
18
- if (column && column.type == 'gutter') {
19
- /*
20
- * Gutter가 클릭된 경우
21
- * TODO ox-record-card의 dblclick handling의 성능을 확인하고,
22
- * gutter에 dblclick를 적용할 수 있는 지 확인한 후에 활성화하자.
23
- */
24
- /* do column click handler */
25
- // var { dblclick } = column.handlers
26
- // dblclick && dblclick(this.columns, this.data, column, record, rowIndex, target)
27
- // return
28
- } else {
29
- var { dblclick: rowsDblClick } = this.config.rows.handlers
30
- if (rowsDblClick) {
31
- rowsDblClick(this.config.columns, this.data, column, record, rowIndex, target)
32
- }
33
- }
34
- }