@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,253 +0,0 @@
1
- import '../src/index.js'
2
- import '../src/filters/filters-form.js'
3
- import '../src/sorters/sorters-control.js'
4
- import '@operato/popup/ox-popup-list.js'
5
- import '@material/web/icon/icon.js'
6
-
7
- import { html, TemplateResult } from 'lit'
8
- import { styles as MDTypeScaleStyles } from '@material/web/typography/md-typescale-styles'
9
-
10
- import { FetchHandler } from '../src/types.js'
11
- import { CommonHeaderStyles, CommonGristStyles } from '@operato/styles'
12
-
13
- const fetchHandler: FetchHandler = async ({ sorters = [], filters, page, limit }) => {
14
- var total = 5
15
- var start = (page! - 1) * limit!
16
-
17
- await new Promise(resolve => setTimeout(resolve, 500))
18
-
19
- return {
20
- total,
21
- records: Array(limit! * page! > total ? total % limit! : limit)
22
- .fill('')
23
- .map((item, idx) => {
24
- return {
25
- id: String(idx),
26
- name: idx % 2 ? `shnam-${start + idx + 1}` : `heartyoh-${start + idx + 1}`,
27
- description: idx % 2 ? `hatiolabmanager${start + idx + 1}1234567890` : `hatiosea manager-${start + idx + 1}`,
28
- number: idx,
29
- float: 1.3,
30
- date: '2023-09-20',
31
- updatedAt: Date.now()
32
- }
33
- })
34
- }
35
- }
36
-
37
- function buildConfig({ headerFilter }: { headerFilter: boolean }) {
38
- return {
39
- list: {
40
- fields: ['name', 'description'],
41
- details: ['updatedAt', 'createdAt']
42
- },
43
- columns: [
44
- {
45
- type: 'gutter',
46
- gutterName: 'sequence'
47
- },
48
- {
49
- type: 'string',
50
- name: 'id',
51
- hidden: true
52
- },
53
- {
54
- type: 'gutter',
55
- gutterName: 'button',
56
- icon: 'add',
57
- title: 'add',
58
- handlers: {
59
- click: 'record-copy'
60
- }
61
- },
62
- {
63
- type: 'string',
64
- name: 'name',
65
- label: true,
66
- header: 'name',
67
- filter: 'search',
68
- record: {
69
- mandatory: true,
70
- editable: (value: any, column: any, record: any, rowIndex: any, field: any) => {
71
- return !record.id
72
- }
73
- },
74
- sortable: true,
75
- width: 120
76
- },
77
- {
78
- type: 'string',
79
- name: 'description',
80
- header: 'description',
81
- filter: 'search',
82
- record: {
83
- align: 'left',
84
- editable: true
85
- },
86
- width: 200
87
- },
88
- {
89
- type: 'checkbox',
90
- name: 'chk',
91
- header: 'chk',
92
- record: {
93
- editable: true
94
- },
95
- width: 40
96
- },
97
- {
98
- type: 'number',
99
- name: 'number',
100
- header: 'number',
101
- record: {
102
- mandatory: true,
103
- editable: true
104
- },
105
- width: 80
106
- },
107
- {
108
- type: 'float',
109
- name: 'float',
110
- header: 'float',
111
- record: {
112
- editable: true
113
- },
114
- width: 80
115
- },
116
- {
117
- type: 'date',
118
- name: 'date',
119
- header: 'date',
120
- width: 120
121
- },
122
- {
123
- type: 'datetime',
124
- name: 'updatedAt',
125
- header: 'updated at',
126
- width: 180
127
- }
128
- ],
129
- rows: {
130
- selectable: {
131
- multiple: false
132
- },
133
- handlers: {
134
- click: 'select-row'
135
- },
136
- appendable: true
137
- },
138
- sorters: [
139
- {
140
- name: 'name',
141
- desc: true
142
- }
143
- ],
144
- filters: {
145
- header: headerFilter
146
- },
147
- pagination: {
148
- pages: [30, 50, 100, 200]
149
- }
150
- }
151
- }
152
-
153
- /* Make the 'name' column editable only at the time of creation. */
154
- export default {
155
- title: 'creatable only column for ox-grist',
156
- component: 'ox-grist',
157
- argTypes: {
158
- headerFilter: { control: 'boolean' },
159
- preventCloseOnBlur: { control: 'boolean' }
160
- }
161
- }
162
-
163
- interface Story<T> {
164
- (args: T): TemplateResult
165
- args?: Partial<T>
166
- argTypes?: Record<string, unknown>
167
- }
168
-
169
- interface ArgTypes {
170
- headerFilter: boolean
171
- preventCloseOnBlur: boolean
172
- }
173
-
174
- const Template: Story<ArgTypes> = ({ headerFilter, preventCloseOnBlur }: ArgTypes) =>
175
- html` <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet" />
176
-
177
- <link href="/themes/light.css" rel="stylesheet" />
178
- <link href="/themes/dark.css" rel="stylesheet" />
179
- <link href="/themes/spacing.css" rel="stylesheet" />
180
- <link href="/themes/grist-theme.css" rel="stylesheet" />
181
-
182
- <link
183
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
184
- rel="stylesheet"
185
- />
186
- <link
187
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
188
- rel="stylesheet"
189
- />
190
- <link
191
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
192
- rel="stylesheet"
193
- />
194
-
195
- <style>
196
- ${MDTypeScaleStyles.cssText}
197
- </style>
198
-
199
- <style>
200
- ${CommonGristStyles.cssText}
201
- ${CommonHeaderStyles.cssText}
202
- </style>
203
-
204
- <style>
205
- ox-grist {
206
- height: 600px;
207
- }
208
-
209
- ox-filters-form {
210
- flex: 1;
211
- }
212
- </style>
213
-
214
- <ox-grist
215
- .config=${buildConfig({ headerFilter })}
216
- mode="GRID"
217
- .fetchHandler=${fetchHandler}
218
- @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}
219
- @field-change=${(e: any) => {
220
- const { name, number, chk } = e.detail.record
221
- console.log(name, number, chk)
222
- }}
223
- >
224
- <div slot="headroom" class="header">
225
- <div class="filters">
226
- <ox-filters-form></ox-filters-form>
227
-
228
- <div id="sorters">
229
- Sort
230
- <md-icon
231
- @click=${(e: Event) => {
232
- const target = e.currentTarget as HTMLElement
233
- ;(target.closest('#sorters')!.querySelector('#sorter-control') as any).open({
234
- right: 0,
235
- top: target.offsetTop + target.offsetHeight
236
- })
237
- }}
238
- >expand_more</md-icon
239
- >
240
- <ox-popup id="sorter-control">
241
- <ox-sorters-control> </ox-sorters-control>
242
- </ox-popup>
243
- </div>
244
-
245
- <ox-record-creator id="add" light-popup ?prevent-close-on-blur=${preventCloseOnBlur}>
246
- <button><md-icon>add</md-icon></button>
247
- </ox-record-creator>
248
- </div>
249
- </div>
250
- </ox-grist>`
251
-
252
- export const Regular = Template.bind({})
253
- Regular.args = {}
@@ -1,241 +0,0 @@
1
- import '../src/index.js'
2
- import '../src/filters/filters-form.js'
3
- import '../src/sorters/sorters-control.js'
4
- import '@operato/popup/ox-popup-list.js'
5
- import '@material/web/icon/icon.js'
6
-
7
- import { html, TemplateResult } from 'lit'
8
- import { styles as MDTypeScaleStyles } from '@material/web/typography/md-typescale-styles'
9
-
10
- import { FetchHandler } from '../src/types.js'
11
-
12
- import { CommonHeaderStyles, CommonGristStyles } from '@operato/styles'
13
-
14
- const fetchHandler: FetchHandler = async ({ sorters = [], filters, page, limit }) => {
15
- var total = 120993
16
- var start = (page! - 1) * limit!
17
-
18
- await new Promise(resolve => setTimeout(resolve, 500))
19
-
20
- return {
21
- total,
22
- records: Array(limit! * page! > total ? total % limit! : limit)
23
- .fill('')
24
- .map((item, idx) => {
25
- return {
26
- id: String(idx),
27
- name: idx % 2 ? `shnam-${start + idx + 1}` : `heartyoh-${start + idx + 1}`,
28
- description: idx % 2 ? `hatiolabmanager${start + idx + 1}1234567890` : `hatiosea manager-${start + idx + 1}`,
29
- due: idx % 2 ? '2024-01-01' : '2024-02-01',
30
- createdAt: Date.now(),
31
- updatedAt: Date.now()
32
- }
33
- })
34
- }
35
- }
36
-
37
- function buildConfig({ headerFilter }: { headerFilter: boolean }) {
38
- return {
39
- list: {
40
- fields: ['name', 'description'],
41
- details: ['updatedAt', 'createdAt']
42
- },
43
- columns: [
44
- {
45
- type: 'gutter',
46
- gutterName: 'sequence'
47
- },
48
- {
49
- type: 'string',
50
- name: 'id',
51
- hidden: true
52
- },
53
- {
54
- type: 'string',
55
- name: 'name',
56
- label: true,
57
- header: 'name',
58
- filter: {
59
- operator: 'eq',
60
- value: 'shnam'
61
- },
62
- sortable: true,
63
- width: 120
64
- },
65
- {
66
- type: 'string',
67
- name: 'description',
68
- header: 'description',
69
- filter: {
70
- operator: 'like',
71
- value: 'hahaha'
72
- },
73
- record: {
74
- align: 'left'
75
- },
76
- width: 200
77
- },
78
- {
79
- type: 'date',
80
- name: 'due',
81
- header: 'due',
82
- filter: {
83
- operator: 'between',
84
- value: [
85
- {
86
- name: 'today',
87
- params: {
88
- relativeDays: -2,
89
- timeZone: 'Asia/Seoul',
90
- format: 'YYYY-MM-DD'
91
- }
92
- },
93
- {
94
- name: 'today',
95
- params: {
96
- relativeDays: 1,
97
- timeZone: 'Asia/Seoul',
98
- locale: 'en-CA' /* 'YYYY-MM-DD' format */,
99
- format: {
100
- year: 'numeric',
101
- month: '2-digit',
102
- day: '2-digit'
103
- }
104
- }
105
- }
106
- ]
107
- },
108
- record: {
109
- align: 'left'
110
- },
111
- width: 120
112
- },
113
- {
114
- type: 'datetime',
115
- name: 'updatedAt',
116
- header: 'updated at',
117
- filter: {
118
- operator: 'between',
119
- value: [
120
- { name: 'week', params: { relativeWeeks: -1 } },
121
- { name: 'today', params: { relativeDays: +1 } }
122
- ]
123
- },
124
- width: 180
125
- },
126
- {
127
- type: 'datetime',
128
- name: 'createdAt',
129
- header: 'created at',
130
- width: 180
131
- }
132
- ],
133
- rows: {},
134
- sorters: [
135
- {
136
- name: 'name',
137
- desc: true
138
- }
139
- ],
140
- filters: {
141
- header: headerFilter
142
- },
143
- pagination: {
144
- pages: [30, 50, 100, 200]
145
- }
146
- }
147
- }
148
-
149
- export default {
150
- title: 'default filters for ox-grist',
151
- component: 'ox-grist',
152
- argTypes: {
153
- headerFilter: { control: 'boolean' }
154
- }
155
- }
156
-
157
- interface Story<T> {
158
- (args: T): TemplateResult
159
- args?: Partial<T>
160
- argTypes?: Record<string, unknown>
161
- }
162
-
163
- interface ArgTypes {
164
- headerFilter: boolean
165
- theme?: 'light' | 'dark'
166
- }
167
-
168
- const Template: Story<ArgTypes> = ({ headerFilter }: ArgTypes) =>
169
- html` <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet" />
170
-
171
- <link href="/themes/light.css" rel="stylesheet" />
172
- <link href="/themes/dark.css" rel="stylesheet" />
173
- <link href="/themes/spacing.css" rel="stylesheet" />
174
- <link href="/themes/grist-theme.css" rel="stylesheet" />
175
-
176
- <link
177
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
178
- rel="stylesheet"
179
- />
180
- <link
181
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
182
- rel="stylesheet"
183
- />
184
- <link
185
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
186
- rel="stylesheet"
187
- />
188
-
189
- <style>
190
- ${MDTypeScaleStyles.cssText}
191
- </style>
192
-
193
- <style>
194
- ${CommonGristStyles.cssText}
195
- ${CommonHeaderStyles.cssText}
196
- </style>
197
-
198
- <style>
199
- ox-grist {
200
- height: 600px;
201
- }
202
-
203
- ox-filters-form {
204
- flex: 1;
205
- }
206
- </style>
207
-
208
- <ox-grist
209
- .config=${buildConfig({ headerFilter })}
210
- mode="GRID"
211
- .fetchHandler=${fetchHandler}
212
- @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}
213
- >
214
- <div slot="headroom" class="header">
215
- <div class="filters">
216
- <ox-filters-form></ox-filters-form>
217
-
218
- <div id="sorters">
219
- Sort
220
- <md-icon
221
- @click=${(e: Event) => {
222
- const target = e.currentTarget as HTMLElement
223
- ;(target.closest('#sorters')!.querySelector('#sorter-control') as any).open({
224
- right: 0,
225
- top: target.offsetTop + target.offsetHeight
226
- })
227
- }}
228
- >expand_more</md-icon
229
- >
230
- <ox-popup id="sorter-control">
231
- <ox-sorters-control> </ox-sorters-control>
232
- </ox-popup>
233
- </div>
234
- </div>
235
- </div>
236
- </ox-grist>`
237
-
238
- export const Regular = Template.bind({})
239
- Regular.args = {
240
- headerFilter: true
241
- }