@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,56 +0,0 @@
1
- import { FilterSelectRenderer } from '../types.js'
2
- import { FilterCheckbox } from './filter-checkbox.js'
3
- import { FilterInputBarcode } from './filter-input-barcode.js'
4
- import { FilterInput } from './filter-input.js'
5
- import { FilterRangeDate } from './filter-range-date.js'
6
- import { FilterRangeNumber } from './filter-range-number.js'
7
- import { FilterSelectButtons } from './filter-select-buttons.js'
8
- import { FilterSelect } from './filter-select.js'
9
-
10
- var RENDERERS: {
11
- [name: string]: FilterSelectRenderer[]
12
- } = {
13
- string: [FilterInput],
14
- text: [FilterInput],
15
- email: [FilterInput],
16
- tel: [FilterInput],
17
- integer: [FilterInput, FilterRangeNumber],
18
- float: [FilterInput, FilterRangeNumber],
19
- number: [FilterInput, FilterRangeNumber],
20
- select: [FilterSelect],
21
- 'select-buttons': [FilterSelectButtons],
22
- boolean: [FilterCheckbox],
23
- checkbox: [FilterCheckbox],
24
- month: [FilterInput, FilterRangeDate],
25
- week: [FilterInput, FilterRangeDate],
26
- date: [FilterInput, FilterRangeDate],
27
- time: [FilterInput, FilterRangeDate],
28
- datetime: [FilterInput, FilterRangeDate],
29
- color: [FilterInput],
30
- progress: [FilterInput, FilterRangeNumber],
31
- link: [FilterInput],
32
- image: [FilterInput],
33
- json5: [FilterInput],
34
- scanner: [FilterInputBarcode],
35
- barcode: [FilterInputBarcode]
36
- }
37
-
38
- export function registerFilterRenderer(type: string, renderer: FilterSelectRenderer[]) {
39
- RENDERERS[type] = renderer
40
- }
41
-
42
- export function unregisterFilterRenderer(type: string): void {
43
- delete RENDERERS[type]
44
- }
45
-
46
- export function getFilterRenderers(): { [name: string]: FilterSelectRenderer[] } {
47
- return { ...RENDERERS }
48
- }
49
-
50
- export function getFilterRenderer(type: string): FilterSelectRenderer[] {
51
- if (typeof type === 'function') {
52
- return type
53
- }
54
-
55
- return RENDERERS[type || 'text'] || [FilterInput]
56
- }
@@ -1,3 +0,0 @@
1
- export const DateFormatter = (value: any): string => {
2
- return ''
3
- }
@@ -1 +0,0 @@
1
- export * from './registry'
@@ -1,3 +0,0 @@
1
- export const NumberFormatter = (value: any): string => {
2
- return ''
3
- }
@@ -1,30 +0,0 @@
1
- import { NOOP } from '../const'
2
- import { DateFormatter } from './date-formatter'
3
- import { NumberFormatter } from './number-formatter'
4
- import { TextFormatter } from './text-formatter'
5
-
6
- var FORMATTERS: { [name: string]: (value: any) => string } = {
7
- number: NumberFormatter,
8
- date: DateFormatter,
9
- text: TextFormatter
10
- }
11
-
12
- export function registerFormatter(type: string, formatter: (value: any) => string) {
13
- FORMATTERS[type] = formatter
14
- }
15
-
16
- export function unregisterFormatter(type: string) {
17
- delete FORMATTERS[type]
18
- }
19
-
20
- export function getFormatters() {
21
- return { ...FORMATTERS }
22
- }
23
-
24
- export function getFormatter(type: string) {
25
- if (typeof type == 'function') {
26
- return type
27
- }
28
-
29
- return FORMATTERS[type] || NOOP
30
- }
@@ -1,3 +0,0 @@
1
- export const TextFormatter = (value: any): string => {
2
- return ''
3
- }
@@ -1,51 +0,0 @@
1
- import '@material/web/icon/icon.js'
2
-
3
- import { html, nothing } from 'lit'
4
- import { ifDefined } from 'lit/directives/if-defined.js'
5
-
6
- import { ColumnConfig, FieldRenderer, GristRecord, HeaderRenderer } from '../types'
7
-
8
- export class GutterButton {
9
- static instance(config: Partial<ColumnConfig> = { type: 'gutter', gutterName: 'button' }) {
10
- var { icon = 'edit', title, iconOnly = true } = config
11
-
12
- var iconFn = typeof icon == 'function' ? icon : (record?: GristRecord) => icon
13
- var titleFn = typeof title == 'function' ? title : (record?: GristRecord) => title
14
-
15
- return Object.assign(
16
- {},
17
- {
18
- type: 'gutter',
19
- gutterName: 'button',
20
- width: 26,
21
- resizable: false,
22
- sortable: false,
23
- header: {
24
- renderer: function (column) {
25
- const title = titleFn()
26
- const icon = iconFn()
27
-
28
- return iconOnly ? html` <md-icon title=${ifDefined(title)}>${icon}</md-icon> ` : title
29
- } as HeaderRenderer
30
- },
31
- record: {
32
- align: 'center',
33
- renderer: function (value, column, record, rowIndex, field) {
34
- const title = titleFn(record)
35
- const icon = iconFn(record)
36
-
37
- return iconOnly
38
- ? html` <md-icon title=${ifDefined(title && titleFn(record))}>${iconFn(record)}</md-icon> `
39
- : title || icon
40
- ? html`<button><md-icon>${iconFn(record)}</md-icon>${titleFn(record)}</button>`
41
- : nothing
42
- } as FieldRenderer
43
- },
44
- forGrid: true,
45
- forList: true,
46
- forCard: true
47
- },
48
- config
49
- )
50
- }
51
- }
@@ -1,96 +0,0 @@
1
- import '@material/web/icon/icon.js'
2
-
3
- import { css, html, LitElement } from 'lit'
4
- import { customElement, property } from 'lit/decorators.js'
5
-
6
- import { ColumnConfig, FieldRenderer, GristEventHandler } from '../types'
7
-
8
- @customElement('ox-gutter-dirty-element')
9
- class GutterDirtyElement extends LitElement {
10
- static styles = css`
11
- :host {
12
- display: flex;
13
- margin: auto;
14
- }
15
-
16
- md-icon {
17
- width: var(--grid-record-dirty-icon-size);
18
- height: var(--grid-record-dirty-icon-size);
19
- border-radius: 50%;
20
- opacity: 0.8;
21
- }
22
-
23
- [add] {
24
- background-color: var(--md-sys-color-on-primary-container);
25
- }
26
-
27
- [remove] {
28
- background-color: var(--md-sys-color-error);
29
- }
30
-
31
- [done] {
32
- background-color: var(--status-info-color);
33
- }
34
- `
35
-
36
- @property({ type: String }) value?: string
37
-
38
- render() {
39
- switch (this.value) {
40
- case '+':
41
- return html` <md-icon style=${INLINESTYLE} center add>add</md-icon> `
42
- case '-':
43
- return html` <md-icon style=${INLINESTYLE} center remove>remove</md-icon> `
44
- case 'M':
45
- return html` <md-icon style=${INLINESTYLE} center done>done</md-icon> `
46
- default:
47
- return ''
48
- }
49
- }
50
- }
51
-
52
- const INLINESTYLE =
53
- 'font-size: var(--grid-record-fontsize); vertical-align: middle; color: var(--grid-record-dirty-color)'
54
-
55
- export class GutterDirty {
56
- static instance(config: Partial<ColumnConfig> = { type: 'gutter', name: '__dirty__' }) {
57
- return Object.assign(
58
- {},
59
- {
60
- type: 'gutter',
61
- name: '__dirty__',
62
- gutterName: 'dirty',
63
- width: 30,
64
- resizable: false,
65
- sortable: false,
66
- header: '',
67
- record: {
68
- align: 'center',
69
- renderer: function (value, column, record, rowIndex, field) {
70
- return value ? html` <ox-gutter-dirty-element value=${value}></ox-gutter-dirty-element> ` : html``
71
- } as FieldRenderer
72
- },
73
- forGrid: true,
74
- forList: false,
75
- forCard: false,
76
- handlers: {
77
- dblclick: ((columns, data, column, record, rowIndex, target) => {
78
- target.dispatchEvent(
79
- new CustomEvent('set-select-block', {
80
- bubbles: true,
81
- composed: true,
82
- detail: {
83
- startRow: rowIndex,
84
- startColumn: 0,
85
- endRow: rowIndex,
86
- endColumn: -1
87
- }
88
- })
89
- )
90
- }) as GristEventHandler
91
- }
92
- },
93
- config
94
- )
95
- }
96
- }
@@ -1,89 +0,0 @@
1
- import { html } from 'lit'
2
-
3
- import { DataCard } from '../data-card/data-card'
4
- import { DataGrid } from '../data-grid/data-grid'
5
- import { DataList } from '../data-list/data-list'
6
- import { ColumnConfig, FieldRenderer, HeaderRenderer } from '../types'
7
-
8
- export class GutterRowSelector {
9
- static instance(config: Partial<ColumnConfig> = { type: 'gutter', name: '__selected__' }) {
10
- return Object.assign(
11
- {},
12
- {
13
- type: 'gutter',
14
- name: '__selected__',
15
- gutterName: 'row-selector',
16
- width: 30,
17
- resizable: false,
18
- sortable: false,
19
- header: {
20
- renderer: function (this: DataGrid | DataList | DataCard, column) {
21
- var checked = ((this.data || {}).records || []).find(record => record['__selected__'])
22
-
23
- return html`
24
- <input
25
- type="checkbox"
26
- .checked=${!!checked}
27
- @change=${(e: Event) => {
28
- let selected = column.multiple ? (e.target as HTMLInputElement).checked : false
29
-
30
- this.dispatchEvent(
31
- new CustomEvent('select-all-change', {
32
- bubbles: true,
33
- composed: true,
34
- detail: {
35
- selected
36
- }
37
- })
38
- )
39
-
40
- e.stopPropagation()
41
- }}
42
- />
43
- `
44
- } as HeaderRenderer
45
- },
46
- record: {
47
- align: 'center',
48
- renderer: function (value, column, record, rowIndex, field) {
49
- return html`
50
- <input
51
- type=${column.multiple ? 'checkbox' : 'radio'}
52
- .checked=${!!value}
53
- @click=${(e: Event) => {
54
- e.stopPropagation()
55
- }}
56
- @change=${(e: Event) => {
57
- let selected = (e.target as HTMLInputElement).checked
58
-
59
- let detail = column.multiple
60
- ? {
61
- added: selected ? [record] : [],
62
- removed: selected ? [] : [record]
63
- }
64
- : {
65
- records: selected ? [record] : []
66
- }
67
-
68
- field.dispatchEvent(
69
- new CustomEvent('select-record-change', {
70
- bubbles: true,
71
- composed: true,
72
- detail
73
- })
74
- )
75
-
76
- e.stopPropagation()
77
- }}
78
- />
79
- `
80
- } as FieldRenderer
81
- },
82
- forGrid: true,
83
- forList: true,
84
- forCard: true
85
- },
86
- config
87
- )
88
- }
89
- }
@@ -1,54 +0,0 @@
1
- import { DataCard } from '../data-card/data-card'
2
- import { DataGrid } from '../data-grid/data-grid'
3
- import { DataList } from '../data-list/data-list'
4
- import { ColumnConfig, ColumnWidthCallback, FieldRenderer, GristEventHandler } from '../types'
5
-
6
- export class GutterSequence {
7
- static instance(config: Partial<ColumnConfig> = { type: 'gutter', name: '__seq__' }) {
8
- return {
9
- type: 'gutter',
10
- name: '__seq__',
11
- getterType: 'sequence',
12
- width: function (this: DataGrid | DataList | DataCard, column): string {
13
- if (this.data) {
14
- var { limit = 0, page = 1, records = [] } = this.data || {}
15
- var lastIndex = (page - 1) * limit + records.length
16
- } else {
17
- var lastIndex = 100
18
- }
19
-
20
- /* 1ch의 폭은 해당 폰트 0의 폭을 의미함. Arial이 약 8px이며, 정수로 떨어지지 않을 수 있으므로, 다소 여유있게 10px을 기준으로 함. */
21
- return `${Math.max(String(lastIndex).length * 10, 20)}px`
22
- } as ColumnWidthCallback,
23
- resizable: false,
24
- sortable: false,
25
- header: '#',
26
- record: {
27
- renderer: function (value, column, record, rowIndex, field) {
28
- return value
29
- } as FieldRenderer,
30
- align: 'right'
31
- },
32
- forGrid: true,
33
- forList: false,
34
- forCard: false,
35
- handlers: {
36
- dblclick: ((columns, data, column, record, rowIndex, target) => {
37
- target.dispatchEvent(
38
- new CustomEvent('set-select-block', {
39
- bubbles: true,
40
- composed: true,
41
- detail: {
42
- startRow: rowIndex,
43
- startColumn: 0,
44
- endRow: rowIndex,
45
- endColumn: -1
46
- }
47
- })
48
- )
49
- }) as GristEventHandler
50
- },
51
- ...config
52
- }
53
- }
54
- }
@@ -1 +0,0 @@
1
- export * from './registry'
@@ -1,32 +0,0 @@
1
- import { ColumnConfig } from '../types'
2
- import { GutterButton } from './gutter-button'
3
- import { GutterDirty } from './gutter-dirty'
4
- import { GutterRowSelector } from './gutter-row-selector'
5
- import { GutterSequence } from './gutter-sequence'
6
-
7
- var GUTTERS: { [name: string]: any } = {
8
- sequence: GutterSequence,
9
- 'row-selector': GutterRowSelector,
10
- button: GutterButton,
11
- dirty: GutterDirty
12
- }
13
-
14
- export function registerGutter(name: string, gutter: any) {
15
- GUTTERS[name] = gutter
16
- }
17
-
18
- export function unregisterGutter(name: string) {
19
- delete GUTTERS[name]
20
- }
21
-
22
- export function getGutters() {
23
- return { ...GUTTERS }
24
- }
25
-
26
- export const generateGutterColumn = (config: ColumnConfig) => {
27
- var clazz = GUTTERS[config.gutterName || '']
28
-
29
- if (clazz) {
30
- return clazz.instance(config)
31
- }
32
- }
@@ -1,80 +0,0 @@
1
- import { html } from 'lit'
2
- import { OxPopupMenu } from '@operato/popup'
3
-
4
- import { DataGridField } from '../data-grid/data-grid-field'
5
- import { ColumnConfig, GristData, GristRecord } from '../types'
6
-
7
- function dispatchEvent(field: DataGridField, event: string) {
8
- field.dispatchEvent(
9
- new CustomEvent(event, {
10
- bubbles: true,
11
- composed: true,
12
- detail: field.record
13
- })
14
- )
15
- }
16
-
17
- /*
18
- * handler들은 ox-grid-field 로부터 호출되는 것을 전제로 하며,
19
- * 전반적인 처리를 위해서, columns 및 data 정보를 포함해서 제공할 수 있어야 한다.
20
- */
21
- export const ContextMenuTreeMutation = function (
22
- columns: ColumnConfig[],
23
- data: GristData,
24
- column: ColumnConfig,
25
- record: GristRecord,
26
- rowIndex: number,
27
- field: DataGridField,
28
- event: Event
29
- ): void {
30
- const e = event as PointerEvent
31
- if (!('pageX' in e && 'pageY' in e)) {
32
- return
33
- }
34
-
35
- e.preventDefault()
36
-
37
- OxPopupMenu.open({
38
- template: html`
39
- <ox-popup-menuitem
40
- label="add sibling node"
41
- @click=${() => {
42
- dispatchEvent(field, 'add-sibling-node')
43
- }}
44
- >
45
- <md-icon slot="icon">add</md-icon>
46
- </ox-popup-menuitem>
47
-
48
- <ox-popup-menuitem
49
- label="add child node"
50
- @click=${() => {
51
- dispatchEvent(field, 'add-child-node')
52
- }}
53
- >
54
- <md-icon slot="icon">playlist_add</md-icon>
55
- </ox-popup-menuitem>
56
-
57
- <div separator></div>
58
-
59
- <ox-popup-menuitem
60
- label="collapse all"
61
- @click=${() => {
62
- dispatchEvent(field, 'collapse-all')
63
- }}
64
- >
65
- <md-icon slot="icon">unfold_less</md-icon>
66
- </ox-popup-menuitem>
67
-
68
- <ox-popup-menuitem
69
- label="expand all"
70
- @click=${() => {
71
- dispatchEvent(field, 'expand-all')
72
- }}
73
- >
74
- <md-icon slot="icon">unfold_more</md-icon>
75
- </ox-popup-menuitem>
76
- `,
77
- top: e.pageY,
78
- left: e.pageX
79
- })
80
- }
@@ -1 +0,0 @@
1
- export * from './registry'
@@ -1,44 +0,0 @@
1
- import { DataGridField } from '../data-grid/data-grid-field'
2
- import { ColumnConfig, GristData, GristRecord } from '../types'
3
-
4
- /*
5
- * handler들은 ox-grid-field 로부터 호출되는 것을 전제로 하며,
6
- * 전반적인 처리를 위해서, columns 및 data 정보를 포함해서 제공할 수 있어야 한다.
7
- */
8
-
9
- export const MoveDown = function (
10
- columns: ColumnConfig[],
11
- data: GristData,
12
- column: ColumnConfig,
13
- record: GristRecord,
14
- rowIndex: number,
15
- field: DataGridField
16
- ): void {
17
- var moveTo = rowIndex + 1
18
- var length = data.records.length
19
-
20
- if (rowIndex >= length || moveTo < 0 || moveTo >= length) {
21
- return
22
- }
23
-
24
- data.records.splice(rowIndex, 1)
25
- data.records.splice(moveTo, 0, record)
26
-
27
- field.dispatchEvent(
28
- new CustomEvent('record-change', {
29
- bubbles: true,
30
- composed: true
31
- })
32
- )
33
-
34
- field.dispatchEvent(
35
- new CustomEvent('focus-change', {
36
- bubbles: true,
37
- composed: true,
38
- detail: {
39
- row: moveTo,
40
- column: column
41
- }
42
- })
43
- )
44
- }
@@ -1,44 +0,0 @@
1
- import { DataGridField } from '../data-grid/data-grid-field'
2
- import { ColumnConfig, GristData, GristRecord } from '../types'
3
-
4
- /*
5
- * handler들은 ox-grid-field 로부터 호출되는 것을 전제로 하며,
6
- * 전반적인 처리를 위해서, columns 및 data 정보를 포함해서 제공할 수 있어야 한다.
7
- */
8
-
9
- export const MoveUp = function (
10
- columns: ColumnConfig[],
11
- data: GristData,
12
- column: ColumnConfig,
13
- record: GristRecord,
14
- rowIndex: number,
15
- field: DataGridField
16
- ): void {
17
- var moveTo = rowIndex - 1
18
- var length = data.records.length
19
-
20
- if (rowIndex >= length || moveTo < 0 || moveTo >= length) {
21
- return
22
- }
23
-
24
- data.records.splice(rowIndex, 1)
25
- data.records.splice(moveTo, 0, record)
26
-
27
- field.dispatchEvent(
28
- new CustomEvent('record-change', {
29
- bubbles: true,
30
- composed: true
31
- })
32
- )
33
-
34
- field.dispatchEvent(
35
- new CustomEvent('focus-change', {
36
- bubbles: true,
37
- composed: true,
38
- detail: {
39
- row: moveTo,
40
- column: column
41
- }
42
- })
43
- )
44
- }
@@ -1,38 +0,0 @@
1
- import { DataGridField } from '../data-grid/data-grid-field'
2
- import { ColumnConfig, GristData, GristRecord } from '../types'
3
-
4
- /*
5
- * handler들은 ox-grid-field 로부터 호출되는 것을 전제로 하며,
6
- * 전반적인 처리를 위해서, columns 및 data 정보를 포함해서 제공할 수 있어야 한다.
7
- */
8
-
9
- export const RecordCopy = function (
10
- columns: ColumnConfig[],
11
- data: GristData,
12
- column: ColumnConfig,
13
- record: GristRecord,
14
- rowIndex: number,
15
- field: DataGridField
16
- ): void {
17
- if (rowIndex >= data.records.length) {
18
- return
19
- }
20
-
21
- var copiedRecord = {
22
- __dirty__: '+'
23
- } as GristRecord
24
-
25
- columns
26
- .filter(column => column.record.editable)
27
- .forEach(column => {
28
- copiedRecord[column.name] = record[column.name]
29
- })
30
-
31
- data.records.splice(rowIndex + 1, 0, copiedRecord)
32
- field.dispatchEvent(
33
- new CustomEvent('record-change', {
34
- bubbles: true,
35
- composed: true
36
- })
37
- )
38
- }
@@ -1,30 +0,0 @@
1
- import { DataGridField } from '../data-grid/data-grid-field'
2
- import { ColumnConfig, GristData, GristRecord } from '../types'
3
-
4
- /*
5
- * handler들은 ox-grid-field 로부터 호출되는 것을 전제로 하며,
6
- * 전반적인 처리를 위해서, columns 및 data 정보를 포함해서 제공할 수 있어야 한다.
7
- */
8
-
9
- export const RecordDelete = function (
10
- columns: ColumnConfig[],
11
- data: GristData,
12
- column: ColumnConfig,
13
- record: GristRecord,
14
- rowIndex: number,
15
- field: DataGridField
16
- ): void {
17
- if (rowIndex >= data.records.length) {
18
- return
19
- }
20
-
21
- record.__dirty__ = '-'
22
- data.records.splice(rowIndex, 1)
23
-
24
- field.dispatchEvent(
25
- new CustomEvent('record-change', {
26
- bubbles: true,
27
- composed: true
28
- })
29
- )
30
- }