@operato/data-grist 7.1.31 → 7.1.33

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 (175) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/src/data-grid/data-grid-field.js +4 -1
  3. package/dist/src/data-grid/data-grid-field.js.map +1 -1
  4. package/dist/src/record-view/record-view-body.js +8 -4
  5. package/dist/src/record-view/record-view-body.js.map +1 -1
  6. package/dist/src/types.d.ts +1 -1
  7. package/dist/src/types.js.map +1 -1
  8. package/dist/tsconfig.tsbuildinfo +1 -1
  9. package/package.json +10 -10
  10. package/.storybook/main.js +0 -3
  11. package/.storybook/preview.js +0 -52
  12. package/.storybook/server.mjs +0 -8
  13. package/demo/data-grist-test.html +0 -468
  14. package/demo/favicon.ico +0 -0
  15. package/demo/index.html +0 -541
  16. package/demo/report-test.html +0 -249
  17. package/src/accumulator/accumulator.ts +0 -63
  18. package/src/configure/column-builder.ts +0 -114
  19. package/src/configure/config-builder.ts +0 -40
  20. package/src/configure/filters-option-builder.ts +0 -8
  21. package/src/configure/imex-option-builder.ts +0 -5
  22. package/src/configure/list-option-builder.ts +0 -9
  23. package/src/configure/rows-option-builder.ts +0 -38
  24. package/src/configure/tree-option-builder.ts +0 -22
  25. package/src/configure/zero-config.ts +0 -83
  26. package/src/const.ts +0 -1
  27. package/src/data-card/data-card-field.ts +0 -94
  28. package/src/data-card/data-card-gutter-menu.ts +0 -94
  29. package/src/data-card/data-card-gutter.ts +0 -103
  30. package/src/data-card/data-card.ts +0 -154
  31. package/src/data-card/event-handlers/record-card-click-handler.ts +0 -34
  32. package/src/data-card/event-handlers/record-card-dblclick-handler.ts +0 -34
  33. package/src/data-card/record-card.ts +0 -289
  34. package/src/data-consumer.ts +0 -11
  35. package/src/data-grid/data-grid-accum-field.ts +0 -109
  36. package/src/data-grid/data-grid-body-style.ts +0 -99
  37. package/src/data-grid/data-grid-body.ts +0 -753
  38. package/src/data-grid/data-grid-field.ts +0 -236
  39. package/src/data-grid/data-grid-footer.ts +0 -117
  40. package/src/data-grid/data-grid-header.ts +0 -574
  41. package/src/data-grid/data-grid.ts +0 -293
  42. package/src/data-grid/event-handlers/data-grid-body-click-handler.ts +0 -69
  43. package/src/data-grid/event-handlers/data-grid-body-contextmenu-handler.ts +0 -32
  44. package/src/data-grid/event-handlers/data-grid-body-dblclick-handler.ts +0 -42
  45. package/src/data-grid/event-handlers/data-grid-body-focus-change-handler.ts +0 -24
  46. package/src/data-grid/event-handlers/data-grid-body-keydown-handler.ts +0 -234
  47. package/src/data-grist.ts +0 -1233
  48. package/src/data-list/data-list-field.ts +0 -82
  49. package/src/data-list/data-list-gutter.ts +0 -108
  50. package/src/data-list/data-list.ts +0 -145
  51. package/src/data-list/event-handlers/record-partial-click-handler.ts +0 -34
  52. package/src/data-list/event-handlers/record-partial-dblclick-handler.ts +0 -33
  53. package/src/data-list/event-handlers/record-partial-long-press-handler.ts +0 -33
  54. package/src/data-list/record-partial.ts +0 -255
  55. package/src/data-manipulator.ts +0 -426
  56. package/src/data-provider.ts +0 -271
  57. package/src/data-report/data-report-body-style.ts +0 -58
  58. package/src/data-report/data-report-body.ts +0 -189
  59. package/src/data-report/data-report-component.ts +0 -138
  60. package/src/data-report/data-report-field.ts +0 -83
  61. package/src/data-report/data-report-header.ts +0 -242
  62. package/src/data-report/event-handlers/data-report-body-click-handler.ts +0 -38
  63. package/src/data-report/event-handlers/data-report-body-dblclick-handler.ts +0 -25
  64. package/src/data-report/event-handlers/data-report-body-keydown-handler.ts +0 -68
  65. package/src/data-report.ts +0 -424
  66. package/src/editors/index.ts +0 -4
  67. package/src/editors/ox-grist-editor-checkbox.ts +0 -28
  68. package/src/editors/ox-grist-editor-color.ts +0 -10
  69. package/src/editors/ox-grist-editor-date.ts +0 -10
  70. package/src/editors/ox-grist-editor-datetime.ts +0 -27
  71. package/src/editors/ox-grist-editor-email.ts +0 -10
  72. package/src/editors/ox-grist-editor-file.ts +0 -28
  73. package/src/editors/ox-grist-editor-image.ts +0 -31
  74. package/src/editors/ox-grist-editor-month.ts +0 -10
  75. package/src/editors/ox-grist-editor-multiple-select.ts +0 -57
  76. package/src/editors/ox-grist-editor-number.ts +0 -27
  77. package/src/editors/ox-grist-editor-password.ts +0 -10
  78. package/src/editors/ox-grist-editor-select.ts +0 -55
  79. package/src/editors/ox-grist-editor-tel.ts +0 -10
  80. package/src/editors/ox-grist-editor-text.ts +0 -14
  81. package/src/editors/ox-grist-editor-textarea.ts +0 -16
  82. package/src/editors/ox-grist-editor-time.ts +0 -10
  83. package/src/editors/ox-grist-editor-tree.ts +0 -27
  84. package/src/editors/ox-grist-editor-varname.ts +0 -36
  85. package/src/editors/ox-grist-editor-week.ts +0 -10
  86. package/src/editors/ox-grist-editor.ts +0 -207
  87. package/src/editors/ox-input-tree.ts +0 -226
  88. package/src/editors/registry.ts +0 -82
  89. package/src/empty-note.ts +0 -46
  90. package/src/filters/filter-checkbox.ts +0 -49
  91. package/src/filters/filter-input-barcode.ts +0 -34
  92. package/src/filters/filter-input.ts +0 -30
  93. package/src/filters/filter-range-date.ts +0 -81
  94. package/src/filters/filter-range-number.ts +0 -64
  95. package/src/filters/filter-select-buttons.ts +0 -60
  96. package/src/filters/filter-select.ts +0 -68
  97. package/src/filters/filter-styles.ts +0 -119
  98. package/src/filters/filters-form.ts +0 -476
  99. package/src/filters/index.ts +0 -10
  100. package/src/filters/registry.ts +0 -56
  101. package/src/formatters/date-formatter.ts +0 -3
  102. package/src/formatters/index.ts +0 -1
  103. package/src/formatters/number-formatter.ts +0 -3
  104. package/src/formatters/registry.ts +0 -30
  105. package/src/formatters/text-formatter.ts +0 -3
  106. package/src/gutters/gutter-button.ts +0 -51
  107. package/src/gutters/gutter-dirty.ts +0 -96
  108. package/src/gutters/gutter-row-selector.ts +0 -89
  109. package/src/gutters/gutter-sequence.ts +0 -54
  110. package/src/gutters/index.ts +0 -1
  111. package/src/gutters/registry.ts +0 -32
  112. package/src/handlers/contextmenu-tree-mutation.ts +0 -80
  113. package/src/handlers/index.ts +0 -1
  114. package/src/handlers/move-down.ts +0 -44
  115. package/src/handlers/move-up.ts +0 -44
  116. package/src/handlers/record-copy.ts +0 -38
  117. package/src/handlers/record-delete.ts +0 -30
  118. package/src/handlers/record-view-handler.ts +0 -27
  119. package/src/handlers/registry.ts +0 -42
  120. package/src/handlers/select-row-toggle.ts +0 -30
  121. package/src/handlers/select-row.ts +0 -27
  122. package/src/index.ts +0 -17
  123. package/src/personalizer/index.ts +0 -1
  124. package/src/personalizer/ox-grist-filter-personalizer.ts +0 -192
  125. package/src/personalizer/ox-grist-personalizer.ts +0 -226
  126. package/src/record-view/event-handlers/record-view-body-click-handler.ts +0 -33
  127. package/src/record-view/event-handlers/record-view-body-keydown-handler.ts +0 -26
  128. package/src/record-view/index.ts +0 -2
  129. package/src/record-view/ox-record-creator.ts +0 -289
  130. package/src/record-view/record-view-body.ts +0 -250
  131. package/src/record-view/record-view-handler.ts +0 -86
  132. package/src/record-view/record-view.ts +0 -122
  133. package/src/renderers/index.ts +0 -14
  134. package/src/renderers/ox-grist-renderer-boolean.ts +0 -43
  135. package/src/renderers/ox-grist-renderer-color.ts +0 -15
  136. package/src/renderers/ox-grist-renderer-date.ts +0 -62
  137. package/src/renderers/ox-grist-renderer-file.ts +0 -31
  138. package/src/renderers/ox-grist-renderer-image.ts +0 -27
  139. package/src/renderers/ox-grist-renderer-json5.ts +0 -36
  140. package/src/renderers/ox-grist-renderer-link.ts +0 -17
  141. package/src/renderers/ox-grist-renderer-password.ts +0 -7
  142. package/src/renderers/ox-grist-renderer-progress.ts +0 -45
  143. package/src/renderers/ox-grist-renderer-select.ts +0 -58
  144. package/src/renderers/ox-grist-renderer-text.ts +0 -16
  145. package/src/renderers/ox-grist-renderer-textarea.ts +0 -7
  146. package/src/renderers/ox-grist-renderer-tree.ts +0 -189
  147. package/src/renderers/ox-grist-renderer.ts +0 -35
  148. package/src/renderers/registry.ts +0 -111
  149. package/src/sorters/sorters-control.ts +0 -143
  150. package/src/types.ts +0 -813
  151. package/src/utils/index.ts +0 -2
  152. package/src/utils/list-param.ts +0 -72
  153. package/src/utils/supports-passive.ts +0 -13
  154. package/stories/accumulator-format.stories.ts +0 -276
  155. package/stories/barcode-input-filter.stories.ts +0 -216
  156. package/stories/bounded-select-filters.stories.ts +0 -333
  157. package/stories/bounded-select-record.stories.ts +0 -336
  158. package/stories/click-event-custom.stories.ts +0 -288
  159. package/stories/click-event.stories.ts +0 -283
  160. package/stories/creatable-only-column.stories.ts +0 -253
  161. package/stories/default-filters.stories.ts +0 -241
  162. package/stories/dynamic-editable.stories.ts +0 -313
  163. package/stories/empty-sorters.stories.ts +0 -180
  164. package/stories/explicit-fetch.stories.ts +0 -186
  165. package/stories/fixed-column.stories.ts +0 -416
  166. package/stories/grid-setting.stories.ts +0 -501
  167. package/stories/grist-modes.stories.ts +0 -451
  168. package/stories/group-header.stories.ts +0 -442
  169. package/stories/record-view.stories.ts +0 -143
  170. package/stories/textarea.stories.ts +0 -261
  171. package/stories/tree-column-with-checkbox.stories.ts +0 -297
  172. package/stories/tree-column.stories.ts +0 -296
  173. package/tsconfig.json +0 -26
  174. package/web-dev-server.config.mjs +0 -27
  175. package/web-test-runner.config.mjs +0 -45
package/demo/index.html DELETED
@@ -1,541 +0,0 @@
1
- <!doctype html>
2
- <html lang="en-GB">
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
6
-
7
- <style>
8
- body {
9
- /* box-sizing: border-box; */
10
- margin: 0;
11
- padding: 0;
12
- overflow: hidden;
13
-
14
- /* This is a font-stack that tries to use the system-default sans-serifs first */
15
- font-family: Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
16
- line-height: 1.5;
17
- -webkit-font-smoothing: antialiased;
18
- }
19
-
20
- #app {
21
- width: 100vw;
22
- height: 100dvh;
23
-
24
- display: flex;
25
- flex-direction: column;
26
- }
27
-
28
- #demo {
29
- flex: 1;
30
-
31
- display: flex;
32
- flex-direction: column;
33
- overflow: hidden;
34
- }
35
-
36
- grist-demo {
37
- flex: 1;
38
- overflow: auto;
39
- }
40
- </style>
41
- <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500" rel="stylesheet" />
42
- <link
43
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
44
- rel="stylesheet"
45
- />
46
- <link
47
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
48
- rel="stylesheet"
49
- />
50
- <link
51
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
52
- rel="stylesheet"
53
- />
54
-
55
- <link href="/themes/app-theme.css" rel="stylesheet" />
56
- <link href="/themes/oops-theme.css" rel="stylesheet" />
57
- <link href="/themes/grist-theme.css" rel="stylesheet" />
58
- </head>
59
-
60
- <body>
61
- <script type="module">
62
- import { LitElement, html, css, render } from 'lit'
63
- import '../dist/index.js'
64
- import '../dist/src/filters/filters-form.js'
65
- import '../dist/src/sorters/sorters-control.js'
66
- import '../dist/src/record-view/record-creator.js'
67
- import '@operato/popup/ox-popup-list.js'
68
- import '@material/web/icon/icon.js'
69
- import { CommonGristStyles } from '@operato/styles'
70
-
71
- const fetchHandler = async ({ page, limit, sorters = [], filters }) => {
72
- console.log('sorters, filters', sorters, filters)
73
- var total = 120993
74
- var start = (page - 1) * limit
75
-
76
- await new Promise(resolve => setTimeout(resolve, 500))
77
-
78
- return {
79
- total,
80
- records: Array(limit * page > total ? total % limit : limit)
81
- .fill()
82
- .map((item, idx) => {
83
- return {
84
- id: idx,
85
- name: idx % 2 ? `shnam-${start + idx + 1}` : `heartyoh-${start + idx + 1}`,
86
- description:
87
- idx % 2 ? `hatiolabmanager${start + idx + 1}1234567890` : `hatiosea manager-${start + idx + 1}`,
88
- email: idx % 2 ? `shnam-${start + idx + 1}@gmail.com` : `heartyoh-${start + idx + 1}@gmail.com`,
89
- active: Math.round(Math.random() * 2) % 2 ? true : false,
90
- barcode: idx % 2 ? `1234567890${start + idx + 1}` : `0987654321${start + idx + 1}`,
91
- company:
92
- idx % 2
93
- ? {
94
- id: '2',
95
- name: 'HatioLAB',
96
- description: `경기도 성남시-${start + idx + 1}`
97
- }
98
- : {
99
- id: '3',
100
- name: 'HatioSEA',
101
- description: `말레이시아 세티아알람-${start + idx + 1}`
102
- },
103
- thumbnail:
104
- idx % 4 === 0
105
- ? '' /* no source */
106
- : idx % 4 === 1
107
- ? `http://www.hatiolab.com/assets/img/operato-biz3.png`
108
- : idx % 4 === 2
109
- ? `http://www.hatiolab.com/assets/img/thingsboard-30.png`
110
- : `http://www.hatiolab.com/wrong-url.png` /* wrong source */,
111
- file: 'abce.txt',
112
- number: 100200300,
113
- role: ['admin', 'worker', 'tester'][idx % 3],
114
- privilege: [undefined, 'read', 'write'][idx % 3],
115
- color: idx % 2 ? `#87f018` : `#180f87`,
116
- rate: Math.round(Math.random() * 100),
117
- dynamicType: ['text', 'email', 'checkbox', 'color', 'progress', 'barcode'][idx % 5],
118
- dynamicValue: ['abcdefghijkl', 'heartyoh@hatiolab.com', 'true', 'orange', '50', '1234567890'][idx % 5],
119
- homepage:
120
- idx % 2
121
- ? `http://hatiolab.com/${start + idx + 1}`
122
- : `http://deadpool.hatiolab.com/${start + idx + 1}`,
123
- json5: {
124
- abc: 'abc',
125
- value: 123,
126
- xyz: [1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
127
- quantity: 6782341
128
- },
129
- createdAt: Date.now(),
130
- updatedAt: Date.now()
131
- }
132
- })
133
- }
134
- }
135
-
136
- const config = {
137
- list: {
138
- thumbnail: 'thumbnail',
139
- fields: ['name', 'description'],
140
- details: ['role', 'email', 'json5']
141
- },
142
- columns: [
143
- {
144
- type: 'gutter',
145
- gutterName: 'dirty'
146
- },
147
- {
148
- type: 'gutter',
149
- gutterName: 'sequence'
150
- },
151
- {
152
- type: 'gutter',
153
- gutterName: 'row-selector',
154
- title: 'row selector',
155
- multiple: true
156
- },
157
- {
158
- type: 'gutter',
159
- gutterName: 'button',
160
- icon: 'edit',
161
- title: 'edit item',
162
- handlers: {
163
- click: function () {
164
- console.log('clicked')
165
- }
166
- }
167
- },
168
- {
169
- type: 'gutter',
170
- gutterName: 'button',
171
- icon: 'add',
172
- title: 'record copy',
173
- handlers: {
174
- click: 'record-copy'
175
- }
176
- },
177
- {
178
- type: 'gutter',
179
- gutterName: 'button',
180
- icon: 'arrow_downward',
181
- title: '아래로',
182
- handlers: {
183
- click: 'move-down'
184
- }
185
- },
186
- {
187
- type: 'string',
188
- name: 'id',
189
- hidden: true
190
- },
191
- {
192
- type: 'link',
193
- name: 'name',
194
- label: true,
195
- header: 'name',
196
- record: {
197
- editable: true,
198
- options: {
199
- // href: 'http://hatiolab.com',
200
- href: function (column, record, rowIndex) {
201
- return record['homepage']
202
- },
203
- target: '_blank'
204
- }
205
- },
206
- filter: 'search',
207
- sortable: true,
208
- width: 120
209
- },
210
- {
211
- type: 'string',
212
- name: 'description',
213
- header: 'description',
214
- filter: 'search',
215
- record: {
216
- editable: true,
217
- align: 'left'
218
- },
219
- width: 200,
220
- handlers: {
221
- click: (columns, data, column, record, rowIndex, target) => {
222
- alert(`${column.name} ${record[column.name]}, row : ${rowIndex}`)
223
- }
224
- }
225
- },
226
- {
227
- type: 'number',
228
- name: 'number',
229
- header: 'number',
230
- record: {
231
- format: '#,##0.0%'
232
- },
233
- width: 120
234
- },
235
- {
236
- type: 'email',
237
- name: 'email',
238
- label: true,
239
- header: 'email',
240
- record: {
241
- editable: true
242
- },
243
- filter: 'search',
244
- sortable: true,
245
- width: 130,
246
- validation: function (after, before, record, column) {
247
- if (after.indexOf('@') == -1) {
248
- document.dispatchEvent(
249
- new CustomEvent('notify', {
250
- detail: {
251
- type: 'error',
252
- message: `invalid value - ${after}`
253
- }
254
- })
255
- )
256
- return false
257
- }
258
- return true
259
- }
260
- },
261
- {
262
- type: 'boolean',
263
- name: 'active',
264
- header: 'active',
265
- record: {
266
- editable: true,
267
- align: 'center'
268
- },
269
- filter: true,
270
- handlers: {
271
- dblclick: () => {
272
- const grist = document.querySelector('ox-grist')
273
- console.log(grist.dirtyRecords)
274
- }
275
- },
276
- sortable: true,
277
- width: 60
278
- },
279
- {
280
- type: 'select-buttons',
281
- name: 'role',
282
- label: true,
283
- header: 'role',
284
- record: {
285
- options: ['', 'admin', 'worker', 'tester'],
286
- editable: true
287
- },
288
- filter: true,
289
- sortable: true,
290
- width: 120
291
- },
292
- {
293
- type: 'select',
294
- name: 'privilege',
295
- label: true,
296
- header: 'privilege',
297
- record: {
298
- options: ['read', 'write'],
299
- multiple: true,
300
- editable: true
301
- },
302
- filter: 'in',
303
- sortable: true,
304
- width: 120
305
- },
306
- {
307
- type: 'color',
308
- name: 'color',
309
- header: 'color',
310
- record: {
311
- editable: true
312
- },
313
- sortable: true,
314
- width: 50
315
- },
316
- {
317
- type: 'float',
318
- name: 'rate',
319
- header: 'rate',
320
- record: {
321
- align: 'right',
322
- editable: true
323
- },
324
- filter: 'between',
325
- sortable: true,
326
- width: 50
327
- },
328
- {
329
- type: 'json5',
330
- name: 'json5',
331
- header: 'JSON5',
332
- label: true,
333
- width: 200
334
- },
335
- {
336
- type: 'progress',
337
- name: 'rate',
338
- header: 'progress',
339
- record: {
340
- editable: true
341
- },
342
- width: 200
343
- },
344
- {
345
- type: 'image',
346
- name: 'thumbnail',
347
- header: 'thumbnail',
348
- record: {
349
- editable: true
350
- },
351
- handlers: {
352
- click: () => {
353
- console.log('thumbnail clicked...')
354
- }
355
- },
356
- width: 200
357
- },
358
- {
359
- type: 'file',
360
- name: 'file',
361
- header: 'file',
362
- record: {
363
- editable: true
364
- },
365
- handlers: {
366
- click: () => {
367
- console.log('thumbnail clicked...')
368
- }
369
- },
370
- width: 200
371
- },
372
- {
373
- type: 'datetime',
374
- name: 'updatedAt',
375
- header: 'updated at',
376
- record: {
377
- editable: true
378
- },
379
- filter: 'between',
380
- sortable: true,
381
- width: 180
382
- },
383
- {
384
- type: 'datetime',
385
- name: 'createdAt',
386
- header: 'created at',
387
- record: {
388
- editable: false
389
- },
390
- sortable: true,
391
- width: 180
392
- }
393
- ],
394
- rows: {
395
- selectable: {
396
- multiple: true
397
- },
398
- handlers: {
399
- click: 'select-row-toggle'
400
- },
401
- classifier: function (record, rowIndex) {
402
- const rate = record['rate']
403
- const emphasized =
404
- rate < 10 ? ['black', 'white'] : rate < 25 ? ['yellow', 'blue'] : rate < 40 ? ['cyan', 'red'] : undefined
405
- return {
406
- emphasized
407
- }
408
- }
409
- },
410
- sorters: [
411
- {
412
- name: 'name',
413
- desc: true
414
- },
415
- {
416
- name: 'email'
417
- }
418
- ],
419
- pagination: {
420
- pages: [30, 500, 1000, 1500, 2000]
421
- }
422
- }
423
-
424
- class GristDemo extends LitElement {
425
- static styles = [
426
- CommonGristStyles,
427
- css`
428
- :host {
429
- display: flex;
430
- flex-direction: column;
431
- }
432
-
433
- #tailer {
434
- display: flex;
435
- flex-direction: row;
436
- margin: 0 var(--margin-default);
437
- }
438
-
439
- #tailer a {
440
- padding: 0 var(--padding-default) 0 var(--padding-default);
441
- margin: 0 var(--spacing-small);
442
- border-right: 1px solid rgba(0, 0, 0, 0.1);
443
- font-size: var(--fontsize-default);
444
- color: var(--md-sys-color-on-primary-container);
445
- }
446
- `
447
- ]
448
-
449
- static get properties() {
450
- return {
451
- sorters: Object,
452
- filters: Object,
453
- mode: String
454
- }
455
- }
456
-
457
- get grist() {
458
- return this.renderRoot.querySelector('ox-grist')
459
- }
460
-
461
- render() {
462
- const mode = this.mode || 'CARD'
463
-
464
- return html`
465
- <ox-grist
466
- .config=${config}
467
- .mode=${mode}
468
- auto-fetch
469
- url-params-sensitive
470
- .fetchHandler=${fetchHandler}
471
- @filters-change=${e => console.log('changed', e.detail)}
472
- >
473
- <div slot="headroom">
474
- <ox-filters-form></ox-filters-form>
475
- </div>
476
-
477
- <div slot="headroom" id="headroom">
478
- <div id="tailer">
479
- <a href="./report-test.html">Report Test</a>
480
- <a
481
- href="#"
482
- @click=${() => {
483
- this.renderRoot.querySelector('ox-grist').reset()
484
- }}
485
- >Reset</a
486
- >
487
- <a
488
- href="#"
489
- @click=${() => {
490
- this.renderRoot.querySelector('ox-grist').fetch(true)
491
- }}
492
- >Fetch</a
493
- >
494
- </div>
495
-
496
- <div id="sorters">
497
- Sort
498
- <md-icon
499
- @click=${e => {
500
- const target = e.currentTarget
501
- this.renderRoot.querySelector('#sorter-control').open({
502
- right: 0,
503
- top: target.offsetTop + target.offsetHeight
504
- })
505
- }}
506
- >expand_more</md-icon
507
- >
508
- <ox-popup id="sorter-control">
509
- <ox-sorters-control> </ox-sorters-control>
510
- </ox-popup>
511
- </div>
512
-
513
- <div id="modes">
514
- <md-icon @click=${() => (this.mode = 'GRID')} ?active=${mode == 'GRID'}>view_list</md-icon>
515
- <md-icon @click=${() => (this.mode = 'LIST')} ?active=${mode == 'LIST'}>menu</md-icon>
516
- <md-icon @click=${() => (this.mode = 'CARD')} ?active=${mode == 'CARD'}>apps</md-icon>
517
- </div>
518
-
519
- <ox-record-creator id="add" light-popup>
520
- <button><md-icon>add</md-icon></button>
521
- </ox-record-creator>
522
-
523
- <button @click=${e => this.grist.cloneSelectedRecords()}><md-icon>add</md-icon></button>
524
- </div>
525
- </ox-grist>
526
- `
527
- }
528
- }
529
-
530
- customElements.define('grist-demo', GristDemo)
531
-
532
- setTimeout(() => {
533
- render(html` <grist-demo mode="GRID"></grist-demo> `, document.querySelector('#demo'))
534
- })
535
- </script>
536
-
537
- <div id="app">
538
- <div id="demo"></div>
539
- </div>
540
- </body>
541
- </html>