@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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@operato/data-grist",
3
- "version": "7.1.31",
3
+ "version": "7.1.33",
4
4
  "description": "User interface for grid (desktop) and list (mobile)",
5
5
  "author": "heartyoh",
6
6
  "main": "dist/index.js",
@@ -62,14 +62,14 @@
62
62
  },
63
63
  "dependencies": {
64
64
  "@material/web": "^2.0.0",
65
- "@operato/headroom": "^7.1.1",
66
- "@operato/input": "^7.1.30",
67
- "@operato/p13n": "^7.1.30",
68
- "@operato/popup": "^7.1.30",
69
- "@operato/pull-to-refresh": "^7.1.1",
70
- "@operato/styles": "^7.1.27",
71
- "@operato/time-calculator": "^7.1.1",
72
- "@operato/utils": "^7.1.1",
65
+ "@operato/headroom": "^7.1.32",
66
+ "@operato/input": "^7.1.32",
67
+ "@operato/p13n": "^7.1.32",
68
+ "@operato/popup": "^7.1.32",
69
+ "@operato/pull-to-refresh": "^7.1.32",
70
+ "@operato/styles": "^7.1.32",
71
+ "@operato/time-calculator": "^7.1.32",
72
+ "@operato/utils": "^7.1.32",
73
73
  "i18next": "^23.11.5",
74
74
  "json5": "^2.2.0",
75
75
  "lit": "^3.1.2",
@@ -108,5 +108,5 @@
108
108
  "prettier --write"
109
109
  ]
110
110
  },
111
- "gitHead": "c22b92c8fc82a72d6503aa7107df33aab985155a"
111
+ "gitHead": "be435a2464e7777dfd201fb86af731ee92e45a65"
112
112
  }
@@ -1,3 +0,0 @@
1
- module.exports = {
2
- stories: ['../dist/stories/**/*.stories.{js,md,mdx}'],
3
- };
@@ -1,52 +0,0 @@
1
- import { i18next } from '@operato/i18n'
2
-
3
- export const globalTypes = {
4
- locale: {
5
- name: 'Locale',
6
- description: 'Internationalization locale',
7
- toolbar: {
8
- icon: 'globe',
9
- items: [
10
- { value: 'en', right: '🇺🇸', title: 'English' },
11
- { value: 'ko', right: '🇰🇷', title: '한국어' },
12
- { value: 'zh', right: '🇨🇳', title: '中文' },
13
- { value: 'ja', right: '🇯🇵', title: '日本語' },
14
- { value: 'ms', right: '🇲🇾', title: 'Bahasa Melayu' }
15
- ],
16
- showName: true
17
- }
18
- },
19
- theme: {
20
- name: 'Theme',
21
- description: 'Global theme for components',
22
- toolbar: {
23
- icon: 'paintbrush',
24
- items: [
25
- { value: 'light', title: 'Light' },
26
- { value: 'dark', title: 'Dark' }
27
- ],
28
- showName: true
29
- }
30
- }
31
- }
32
-
33
- export const decorators = [
34
- (Story, context) => {
35
- const { locale, theme } = context.globals
36
-
37
- if (locale) {
38
- i18next.changeLanguage(locale)
39
- }
40
-
41
- // Set the theme class for the document
42
- if (theme === 'dark') {
43
- document.documentElement.classList.add('dark')
44
- document.documentElement.classList.remove('light')
45
- } else {
46
- document.documentElement.classList.add('light')
47
- document.documentElement.classList.remove('dark')
48
- }
49
-
50
- return Story()
51
- }
52
- ]
@@ -1,8 +0,0 @@
1
- import { storybookPlugin } from '@web/dev-server-storybook';
2
- import baseConfig from '../web-dev-server.config.mjs';
3
-
4
- export default /** @type {import('@web/dev-server').DevServerConfig} */ ({
5
- ...baseConfig,
6
- open: '/',
7
- plugins: [storybookPlugin({ type: 'web-components' }), ...baseConfig.plugins],
8
- });
@@ -1,468 +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
- <style>
7
- body {
8
- /* box-sizing: border-box; */
9
- margin: 0;
10
- padding: 0;
11
- overflow: hidden;
12
-
13
- /* This is a font-stack that tries to use the system-default sans-serifs first */
14
- font-family: Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
15
- line-height: 1.5;
16
- -webkit-font-smoothing: antialiased;
17
- }
18
-
19
- #app {
20
- width: 100vw;
21
- height: 100dvh;
22
-
23
- display: flex;
24
- flex-direction: column;
25
- }
26
-
27
- #demo {
28
- flex: 1;
29
-
30
- display: flex;
31
- flex-direction: column;
32
- overflow: hidden;
33
- }
34
-
35
- grist-demo {
36
- flex: 1;
37
- overflow: auto;
38
- }
39
- </style>
40
- <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500" rel="stylesheet" />
41
- <link
42
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
43
- rel="stylesheet"
44
- />
45
- <link
46
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
47
- rel="stylesheet"
48
- />
49
- <link
50
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
51
- rel="stylesheet"
52
- />
53
-
54
- <link href="/themes/app-theme.css" rel="stylesheet" />
55
- <link href="/themes/oops-theme.css" rel="stylesheet" />
56
- <link href="/themes/grist-theme.css" rel="stylesheet" />
57
- </head>
58
-
59
- <body>
60
- <script type="module">
61
- import { LitElement, html, css, render } from 'lit'
62
- import '../dist/index.js'
63
- import '../dist/src/filters/filters-form.js'
64
- import '../dist/src/sorters/sorters-control.js'
65
- import '../dist/src/record-view/record-creator.js'
66
- import '@operato/popup/ox-popup-list.js'
67
- import '@material/web/icon/icon.js'
68
- import { CommonGristStyles } from '@operato/styles'
69
-
70
- const fetchHandler = async ({ page, limit, sorters = [] }) => {
71
- var total = 120993
72
- var start = (page - 1) * limit
73
-
74
- await new Promise(resolve => setTimeout(resolve, 500))
75
-
76
- return {
77
- total,
78
- records: Array(limit * page > total ? total % limit : limit)
79
- .fill()
80
- .map((item, idx) => {
81
- return {
82
- id: idx,
83
- name: idx % 2 ? `shnam-${start + idx + 1}` : `heartyoh-${start + idx + 1}`,
84
- description:
85
- idx % 2 ? `hatiolabmanager${start + idx + 1}1234567890` : `hatiosea manager-${start + idx + 1}`,
86
- email: idx % 2 ? `shnam-${start + idx + 1}@gmail.com` : `heartyoh-${start + idx + 1}@gmail.com`,
87
- active: Math.round(Math.random() * 2) % 2 ? true : false,
88
- barcode: idx % 2 ? `1234567890${start + idx + 1}` : `0987654321${start + idx + 1}`,
89
- company:
90
- idx % 2
91
- ? {
92
- id: '2',
93
- name: 'HatioLAB',
94
- description: `경기도 성남시-${start + idx + 1}`
95
- }
96
- : {
97
- id: '3',
98
- name: 'HatioSEA',
99
- description: `말레이시아 세티아알람-${start + idx + 1}`
100
- },
101
- thumbnail:
102
- idx % 4 === 0
103
- ? '' /* no source */
104
- : idx % 4 === 1
105
- ? `http://www.hatiolab.com/assets/img/operato-biz3.png`
106
- : idx % 4 === 2
107
- ? `http://www.hatiolab.com/assets/img/thingsboard-30.png`
108
- : `http://www.hatiolab.com/wrong-url.png` /* wrong source */,
109
- role: ['admin', 'worker', 'tester'][idx % 3],
110
- color: idx % 2 ? `#87f018` : `#180f87`,
111
- rate: Math.round(Math.random() * 100),
112
- dynamicType: ['text', 'email', 'checkbox', 'color', 'progress', 'barcode'][idx % 5],
113
- dynamicValue: ['abcdefghijkl', 'heartyoh@hatiolab.com', 'true', 'orange', '50', '1234567890'][idx % 5],
114
- homepage:
115
- idx % 2
116
- ? `http://hatiolab.com/${start + idx + 1}`
117
- : `http://deadpool.hatiolab.com/${start + idx + 1}`,
118
- json5: {
119
- abc: 'abc',
120
- value: 123
121
- },
122
- createdAt: Date.now(),
123
- updatedAt: Date.now()
124
- }
125
- })
126
- }
127
- }
128
-
129
- const config = {
130
- list: {
131
- thumbnail: 'thumbnail',
132
- fields: ['name', 'description'],
133
- details: ['role', 'email']
134
- },
135
- columns: [
136
- {
137
- type: 'gutter',
138
- gutterName: 'dirty'
139
- },
140
- {
141
- type: 'gutter',
142
- gutterName: 'sequence'
143
- },
144
- {
145
- type: 'gutter',
146
- gutterName: 'row-selector',
147
- multiple: true
148
- },
149
- {
150
- type: 'gutter',
151
- gutterName: 'button',
152
- icon: 'edit',
153
- handlers: {
154
- click: function () {
155
- console.log('clicked')
156
- }
157
- }
158
- },
159
- {
160
- type: 'gutter',
161
- gutterName: 'button',
162
- icon: 'add',
163
- handlers: {
164
- click: 'record-copy'
165
- }
166
- },
167
- {
168
- type: 'gutter',
169
- gutterName: 'button',
170
- icon: 'arrow_downward',
171
- handlers: {
172
- click: 'move-down'
173
- }
174
- },
175
- {
176
- type: 'string',
177
- name: 'id',
178
- hidden: true
179
- },
180
- {
181
- type: 'link',
182
- name: 'name',
183
- label: true,
184
- header: 'name',
185
- record: {
186
- editable: true,
187
- options: {
188
- // href: 'http://hatiolab.com',
189
- href: function (column, record, rowIndex) {
190
- return record['homepage']
191
- },
192
- target: '_blank'
193
- }
194
- },
195
- filter: 'search',
196
- sortable: true,
197
- width: 120
198
- },
199
- {
200
- type: 'string',
201
- name: 'description',
202
- header: 'description',
203
- filter: 'search',
204
- record: {
205
- editable: true,
206
- align: 'left'
207
- },
208
- width: 200,
209
- handlers: {
210
- click: (columns, data, column, record, rowIndex, target) => {
211
- alert(`${column.name} ${record[column.name]}, row : ${rowIndex}`)
212
- }
213
- }
214
- },
215
- {
216
- type: 'email',
217
- name: 'email',
218
- label: true,
219
- header: 'email',
220
- record: {
221
- editable: true
222
- },
223
- filter: 'search',
224
- sortable: true,
225
- width: 130,
226
- validation: function (after, before, record, column) {
227
- if (after.indexOf('@') == -1) {
228
- document.dispatchEvent(
229
- new CustomEvent('notify', {
230
- detail: {
231
- type: 'error',
232
- message: `invalid value - ${after}`
233
- }
234
- })
235
- )
236
- return false
237
- }
238
- return true
239
- }
240
- },
241
- {
242
- type: 'boolean',
243
- name: 'active',
244
- header: 'active',
245
- record: {
246
- editable: true
247
- },
248
- filter: true,
249
- handlers: {
250
- dblclick: () => {
251
- const grist = document.querySelector('ox-grist')
252
- console.log(grist.dirtyRecords)
253
- }
254
- },
255
- sortable: true,
256
- width: 60
257
- },
258
- {
259
- type: 'select',
260
- name: 'role',
261
- label: true,
262
- header: 'role',
263
- record: {
264
- options: ['', 'admin', 'worker', 'tester'],
265
- editable: true
266
- },
267
- filter: true,
268
- sortable: true,
269
- width: 120
270
- },
271
- {
272
- type: 'color',
273
- name: 'color',
274
- header: 'color',
275
- record: {
276
- editable: true
277
- },
278
- sortable: true,
279
- width: 50
280
- },
281
- {
282
- type: 'float',
283
- name: 'rate',
284
- header: 'rate',
285
- record: {
286
- align: 'right',
287
- editable: true
288
- },
289
- filter: 'between',
290
- sortable: true,
291
- width: 50
292
- },
293
- {
294
- type: 'json5',
295
- name: 'json5',
296
- header: 'JSON5',
297
- width: 200
298
- },
299
- {
300
- type: 'image',
301
- name: 'thumbnail',
302
- header: 'thumbnail',
303
- record: {
304
- editable: true
305
- },
306
- width: 120
307
- },
308
- {
309
- type: 'datetime',
310
- name: 'updatedAt',
311
- header: 'updated at',
312
- record: {
313
- editable: true
314
- },
315
- filter: 'between',
316
- sortable: true,
317
- width: 180
318
- },
319
- {
320
- type: 'datetime',
321
- name: 'createdAt',
322
- header: 'created at',
323
- record: {
324
- editable: false
325
- },
326
- sortable: true,
327
- width: 180
328
- }
329
- ],
330
- rows: {
331
- selectable: {
332
- multiple: true
333
- },
334
- handlers: {
335
- click: 'select-row-toggle'
336
- },
337
- classifier: function (record, rowIndex) {
338
- const rate = record['rate']
339
- const emphasized =
340
- rate < 10 ? ['black', 'white'] : rate < 25 ? ['yellow', 'blue'] : rate < 40 ? ['cyan', 'red'] : undefined
341
- return {
342
- emphasized
343
- }
344
- }
345
- },
346
- sorters: [
347
- {
348
- name: 'name',
349
- desc: true
350
- },
351
- {
352
- name: 'email'
353
- }
354
- ],
355
- pagination: {
356
- pages: [20, 30, 50, 100, 200]
357
- }
358
- }
359
-
360
- class GristDemo extends LitElement {
361
- static styles = [
362
- CommonGristStyles,
363
- css`
364
- :host {
365
- display: flex;
366
- flex-direction: column;
367
- }
368
-
369
- #tailer {
370
- display: flex;
371
- flex-direction: row;
372
- margin: 0 var(--margin-default);
373
- }
374
-
375
- #tailer a {
376
- padding: 0 var(--padding-default) 0 var(--padding-default);
377
- margin: 0 var(--spacing-small);
378
- border-right: 1px solid rgba(0, 0, 0, 0.1);
379
- font-size: var(--fontsize-default);
380
- color: var(--md-sys-color-on-primary-container);
381
- }
382
- `
383
- ]
384
-
385
- static get properties() {
386
- return {
387
- mode: String
388
- }
389
- }
390
-
391
- get grist() {
392
- return this.renderRoot.querySelector('ox-grist')
393
- }
394
-
395
- render() {
396
- const mode = this.mode || 'CARD'
397
-
398
- return html`
399
- <ox-grist .config=${config} .mode=${mode} auto-fetch .fetchHandler=${fetchHandler}>
400
- <div id="filters" slot="headroom">
401
- <ox-filters-form @filters-change=${e => console.log('changed', e.detail)}></ox-filters-form>
402
- </div>
403
-
404
- <div slot="headroom" id="headroom">
405
- <div id="tailer">
406
- <a href="./report-test.html">Report Test</a>
407
- <a
408
- href="#"
409
- @click=${() => {
410
- this.renderRoot.querySelector('ox-grist').reset()
411
- }}
412
- >Reset</a
413
- >
414
- <a
415
- href="#"
416
- @click=${() => {
417
- this.renderRoot.querySelector('ox-grist').fetch(true)
418
- }}
419
- >Fetch</a
420
- >
421
- </div>
422
-
423
- <div id="sorters">
424
- Sort
425
- <md-icon
426
- @click=${e => {
427
- const target = e.currentTarget
428
- this.renderRoot.querySelector('#sorter-control').open({
429
- right: 0,
430
- top: target.offsetTop + target.offsetHeight
431
- })
432
- }}
433
- >expand_more</md-icon
434
- >
435
- <ox-popup id="sorter-control">
436
- <ox-sorters-control> </ox-sorters-control>
437
- </ox-popup>
438
- </div>
439
-
440
- <div id="modes">
441
- <md-icon @click=${() => (this.mode = 'GRID')} ?active=${mode == 'GRID'}>view_list</md-icon>
442
- <md-icon @click=${() => (this.mode = 'LIST')} ?active=${mode == 'LIST'}>menu</md-icon>
443
- <md-icon @click=${() => (this.mode = 'CARD')} ?active=${mode == 'CARD'}>apps</md-icon>
444
- </div>
445
-
446
- <ox-record-creator id="add" light-popup>
447
- <button><md-icon>add</md-icon></button>
448
- </ox-record-creator>
449
-
450
- <button @click=${e => this.grist.cloneSelectedRecords()}><md-icon>add</md-icon></button>
451
- </div>
452
- </ox-grist>
453
- `
454
- }
455
- }
456
-
457
- customElements.define('grist-demo', GristDemo)
458
-
459
- setTimeout(() => {
460
- render(html` <grist-demo mode="LIST"></grist-demo> `, document.querySelector('#demo'))
461
- })
462
- </script>
463
-
464
- <div id="app">
465
- <div id="demo"></div>
466
- </div>
467
- </body>
468
- </html>
package/demo/favicon.ico DELETED
Binary file