@operato/data-grist 2.0.0-alpha.13 → 2.0.0-alpha.131
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.
- package/CHANGELOG.md +564 -0
- package/demo/data-grist-test.html +25 -14
- package/demo/index.html +25 -14
- package/demo/report-test.html +13 -2
- package/dist/src/configure/column-builder.js.map +1 -1
- package/dist/src/configure/rows-option-builder.js +2 -1
- package/dist/src/configure/rows-option-builder.js.map +1 -1
- package/dist/src/configure/zero-config.js +1 -0
- package/dist/src/configure/zero-config.js.map +1 -1
- package/dist/src/data-card/data-card-gutter-menu.d.ts +1 -1
- package/dist/src/data-card/data-card-gutter-menu.js +5 -5
- package/dist/src/data-card/data-card-gutter-menu.js.map +1 -1
- package/dist/src/data-card/data-card.d.ts +2 -2
- package/dist/src/data-card/data-card.js +3 -3
- package/dist/src/data-card/data-card.js.map +1 -1
- package/dist/src/data-card/event-handlers/record-card-click-handler.js +1 -1
- package/dist/src/data-card/event-handlers/record-card-click-handler.js.map +1 -1
- package/dist/src/data-card/record-card.d.ts +2 -2
- package/dist/src/data-card/record-card.js +26 -26
- package/dist/src/data-card/record-card.js.map +1 -1
- package/dist/src/data-grid/data-grid-accum-field.js +9 -2
- package/dist/src/data-grid/data-grid-accum-field.js.map +1 -1
- package/dist/src/data-grid/data-grid-body-style.js +1 -0
- package/dist/src/data-grid/data-grid-body-style.js.map +1 -1
- package/dist/src/data-grid/data-grid-body.d.ts +3 -3
- package/dist/src/data-grid/data-grid-body.js +6 -4
- package/dist/src/data-grid/data-grid-body.js.map +1 -1
- package/dist/src/data-grid/data-grid-field.d.ts +1 -1
- package/dist/src/data-grid/data-grid-field.js +6 -3
- package/dist/src/data-grid/data-grid-field.js.map +1 -1
- package/dist/src/data-grid/data-grid-footer.d.ts +2 -2
- package/dist/src/data-grid/data-grid-footer.js +17 -9
- package/dist/src/data-grid/data-grid-footer.js.map +1 -1
- package/dist/src/data-grid/data-grid-header.d.ts +1 -1
- package/dist/src/data-grid/data-grid-header.js +38 -35
- package/dist/src/data-grid/data-grid-header.js.map +1 -1
- package/dist/src/data-grid/data-grid.d.ts +1 -1
- package/dist/src/data-grid/data-grid.js +12 -2
- package/dist/src/data-grid/data-grid.js.map +1 -1
- package/dist/src/data-grist.d.ts +12 -3
- package/dist/src/data-grist.js +74 -31
- package/dist/src/data-grist.js.map +1 -1
- package/dist/src/data-list/data-list-gutter.js +12 -0
- package/dist/src/data-list/data-list-gutter.js.map +1 -1
- package/dist/src/data-list/data-list.d.ts +2 -2
- package/dist/src/data-list/data-list.js +3 -3
- package/dist/src/data-list/data-list.js.map +1 -1
- package/dist/src/data-list/event-handlers/record-partial-click-handler.js +1 -1
- package/dist/src/data-list/event-handlers/record-partial-click-handler.js.map +1 -1
- package/dist/src/data-list/record-partial.d.ts +2 -2
- package/dist/src/data-list/record-partial.js +20 -18
- package/dist/src/data-list/record-partial.js.map +1 -1
- package/dist/src/data-report/data-report-body.d.ts +1 -1
- package/dist/src/data-report/data-report-component.d.ts +1 -1
- package/dist/src/data-report.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-checkbox.d.ts +3 -2
- package/dist/src/editors/ox-grist-editor-checkbox.js +9 -2
- package/dist/src/editors/ox-grist-editor-checkbox.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-color.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-date.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-datetime.d.ts +2 -2
- package/dist/src/editors/ox-grist-editor-datetime.js +1 -2
- package/dist/src/editors/ox-grist-editor-datetime.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-email.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-file.d.ts +3 -2
- package/dist/src/editors/ox-grist-editor-file.js +8 -2
- package/dist/src/editors/ox-grist-editor-file.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-image.d.ts +2 -2
- package/dist/src/editors/ox-grist-editor-image.js +8 -8
- package/dist/src/editors/ox-grist-editor-image.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-month.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-multiple-select.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-number.d.ts +3 -2
- package/dist/src/editors/ox-grist-editor-number.js +10 -9
- package/dist/src/editors/ox-grist-editor-number.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-password.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-select.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-select.js +37 -25
- package/dist/src/editors/ox-grist-editor-select.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-tel.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-text.d.ts +2 -1
- package/dist/src/editors/ox-grist-editor-text.js +3 -0
- package/dist/src/editors/ox-grist-editor-text.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-textarea.d.ts +2 -1
- package/dist/src/editors/ox-grist-editor-textarea.js +3 -0
- package/dist/src/editors/ox-grist-editor-textarea.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-time.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-tree.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-week.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor.d.ts +4 -4
- package/dist/src/editors/ox-grist-editor.js +14 -16
- package/dist/src/editors/ox-grist-editor.js.map +1 -1
- package/dist/src/editors/ox-input-tree.d.ts +1 -1
- package/dist/src/empty-note.d.ts +2 -2
- package/dist/src/empty-note.js +3 -3
- package/dist/src/empty-note.js.map +1 -1
- package/dist/src/filters/filter-checkbox.js +12 -5
- package/dist/src/filters/filter-checkbox.js.map +1 -1
- package/dist/src/filters/filter-range-date.js +12 -1
- package/dist/src/filters/filter-range-date.js.map +1 -1
- package/dist/src/filters/filter-select.js +30 -16
- package/dist/src/filters/filter-select.js.map +1 -1
- package/dist/src/filters/filter-styles.js +47 -28
- package/dist/src/filters/filter-styles.js.map +1 -1
- package/dist/src/filters/filters-form.d.ts +7 -1
- package/dist/src/filters/filters-form.js +154 -71
- package/dist/src/filters/filters-form.js.map +1 -1
- package/dist/src/gutters/gutter-button.d.ts +1 -1
- package/dist/src/gutters/gutter-button.js +3 -3
- package/dist/src/gutters/gutter-button.js.map +1 -1
- package/dist/src/gutters/gutter-dirty.d.ts +1 -1
- package/dist/src/gutters/gutter-dirty.js +5 -5
- package/dist/src/gutters/gutter-dirty.js.map +1 -1
- package/dist/src/handlers/contextmenu-tree-mutation.js +4 -4
- package/dist/src/handlers/contextmenu-tree-mutation.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/personalizer/index.d.ts +1 -0
- package/dist/src/personalizer/index.js +2 -0
- package/dist/src/personalizer/index.js.map +1 -0
- package/dist/src/personalizer/ox-grist-personalizer.d.ts +10 -0
- package/dist/src/personalizer/ox-grist-personalizer.js +171 -0
- package/dist/src/personalizer/ox-grist-personalizer.js.map +1 -0
- package/dist/src/record-view/record-creator.d.ts +2 -2
- package/dist/src/record-view/record-creator.js +1 -1
- package/dist/src/record-view/record-creator.js.map +1 -1
- package/dist/src/record-view/record-view-body.d.ts +3 -3
- package/dist/src/record-view/record-view-body.js +4 -4
- package/dist/src/record-view/record-view-body.js.map +1 -1
- package/dist/src/record-view/record-view.d.ts +2 -2
- package/dist/src/record-view/record-view.js +5 -5
- package/dist/src/record-view/record-view.js.map +1 -1
- package/dist/src/renderers/ox-grist-renderer-progress.d.ts +1 -1
- package/dist/src/renderers/ox-grist-renderer-select.js +34 -4
- package/dist/src/renderers/ox-grist-renderer-select.js.map +1 -1
- package/dist/src/renderers/ox-grist-renderer-tree.d.ts +1 -1
- package/dist/src/renderers/ox-grist-renderer.d.ts +2 -2
- package/dist/src/sorters/sorters-control.js +3 -3
- package/dist/src/sorters/sorters-control.js.map +1 -1
- package/dist/src/types.d.ts +30 -9
- package/dist/src/types.js.map +1 -1
- package/dist/stories/{accumulator.stories.d.ts → accumulator-format.stories.d.ts} +1 -1
- package/dist/stories/{accumulator.stories.js → accumulator-format.stories.js} +50 -125
- package/dist/stories/accumulator-format.stories.js.map +1 -0
- package/dist/stories/barcode-input-filter.stories.d.ts +1 -1
- package/dist/stories/barcode-input-filter.stories.js +41 -79
- package/dist/stories/barcode-input-filter.stories.js.map +1 -1
- package/dist/stories/bounded-select-filters.stories.d.ts +25 -0
- package/dist/stories/bounded-select-filters.stories.js +264 -0
- package/dist/stories/bounded-select-filters.stories.js.map +1 -0
- package/dist/stories/bounded-select-record.stories.d.ts +25 -0
- package/dist/stories/bounded-select-record.stories.js +267 -0
- package/dist/stories/bounded-select-record.stories.js.map +1 -0
- package/dist/stories/creatable-only-column.stories.d.ts +25 -0
- package/dist/stories/creatable-only-column.stories.js +211 -0
- package/dist/stories/creatable-only-column.stories.js.map +1 -0
- package/dist/stories/default-filters.stories.d.ts +1 -1
- package/dist/stories/default-filters.stories.js +84 -79
- package/dist/stories/default-filters.stories.js.map +1 -1
- package/dist/stories/dynamic-editable.stories.d.ts +1 -1
- package/dist/stories/dynamic-editable.stories.js +51 -86
- package/dist/stories/dynamic-editable.stories.js.map +1 -1
- package/dist/stories/empty-sorters.stories.d.ts +1 -1
- package/dist/stories/empty-sorters.stories.js +41 -78
- package/dist/stories/empty-sorters.stories.js.map +1 -1
- package/dist/stories/explicit-fetch.stories.d.ts +1 -1
- package/dist/stories/explicit-fetch.stories.js +42 -79
- package/dist/stories/explicit-fetch.stories.js.map +1 -1
- package/dist/stories/fixed-column.stories.d.ts +1 -1
- package/dist/stories/fixed-column.stories.js +45 -127
- package/dist/stories/fixed-column.stories.js.map +1 -1
- package/dist/stories/grid-setting.stories.d.ts +42 -0
- package/dist/stories/grid-setting.stories.js +415 -0
- package/dist/stories/grid-setting.stories.js.map +1 -0
- package/dist/stories/grist-modes.stories.d.ts +1 -1
- package/dist/stories/grist-modes.stories.js +74 -140
- package/dist/stories/grist-modes.stories.js.map +1 -1
- package/dist/stories/group-header.stories.d.ts +1 -1
- package/dist/stories/group-header.stories.js +45 -127
- package/dist/stories/group-header.stories.js.map +1 -1
- package/dist/stories/textarea.stories.d.ts +1 -1
- package/dist/stories/textarea.stories.js +39 -121
- package/dist/stories/textarea.stories.js.map +1 -1
- package/dist/stories/tree-column-with-checkbox.stories.d.ts +1 -1
- package/dist/stories/tree-column-with-checkbox.stories.js +49 -136
- package/dist/stories/tree-column-with-checkbox.stories.js.map +1 -1
- package/dist/stories/tree-column.stories.d.ts +1 -1
- package/dist/stories/tree-column.stories.js +49 -136
- package/dist/stories/tree-column.stories.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/docs/default-value/default-value.md +1 -1
- package/docs/default-value/value-generator/date-generator.md +31 -2
- package/docs/default-value/value-generator/hour-time-generator.md +33 -0
- package/docs/default-value/value-generator/minute-time-generator.md +33 -0
- package/docs/default-value/value-generator/month-date-generator.md +4 -2
- package/docs/default-value/value-generator/now-generator.md +29 -0
- package/docs/default-value/value-generator/time-generator.md +31 -0
- package/docs/default-value/value-generator/today-generator.md +29 -0
- package/docs/default-value/value-generator/week-date-generator.md +33 -2
- package/docs/default-value/value-generator/year-date-generator.md +33 -2
- package/package.json +26 -21
- package/src/configure/column-builder.ts +1 -0
- package/src/configure/rows-option-builder.ts +11 -1
- package/src/configure/zero-config.ts +1 -0
- package/src/data-card/data-card-gutter-menu.ts +5 -5
- package/src/data-card/data-card.ts +3 -3
- package/src/data-card/event-handlers/record-card-click-handler.ts +1 -1
- package/src/data-card/record-card.ts +30 -32
- package/src/data-grid/data-grid-accum-field.ts +8 -2
- package/src/data-grid/data-grid-body-style.ts +1 -0
- package/src/data-grid/data-grid-body.ts +7 -5
- package/src/data-grid/data-grid-field.ts +4 -2
- package/src/data-grid/data-grid-footer.ts +18 -11
- package/src/data-grid/data-grid-header.ts +68 -65
- package/src/data-grid/data-grid.ts +14 -4
- package/src/data-grist.ts +89 -30
- package/src/data-list/data-list-gutter.ts +12 -0
- package/src/data-list/data-list.ts +3 -3
- package/src/data-list/event-handlers/record-partial-click-handler.ts +1 -1
- package/src/data-list/record-partial.ts +22 -22
- package/src/editors/ox-grist-editor-checkbox.ts +12 -2
- package/src/editors/ox-grist-editor-datetime.ts +1 -2
- package/src/editors/ox-grist-editor-file.ts +12 -2
- package/src/editors/ox-grist-editor-image.ts +10 -7
- package/src/editors/ox-grist-editor-number.ts +10 -9
- package/src/editors/ox-grist-editor-select.ts +41 -28
- package/src/editors/ox-grist-editor-text.ts +4 -0
- package/src/editors/ox-grist-editor-textarea.ts +4 -0
- package/src/editors/ox-grist-editor.ts +14 -14
- package/src/empty-note.ts +3 -3
- package/src/filters/filter-checkbox.ts +15 -5
- package/src/filters/filter-range-date.ts +16 -1
- package/src/filters/filter-select.ts +41 -28
- package/src/filters/filter-styles.ts +47 -28
- package/src/filters/filters-form.ts +159 -59
- package/src/gutters/gutter-button.ts +3 -3
- package/src/gutters/gutter-dirty.ts +5 -5
- package/src/handlers/contextmenu-tree-mutation.ts +4 -4
- package/src/index.ts +1 -1
- package/src/personalizer/index.ts +1 -0
- package/src/personalizer/ox-grist-personalizer.ts +181 -0
- package/src/record-view/record-creator.ts +1 -1
- package/src/record-view/record-view-body.ts +4 -4
- package/src/record-view/record-view.ts +5 -5
- package/src/renderers/ox-grist-renderer-select.ts +41 -6
- package/src/sorters/sorters-control.ts +3 -3
- package/src/types.ts +36 -10
- package/stories/{accumulator.stories.ts → accumulator-format.stories.ts} +48 -126
- package/stories/barcode-input-filter.stories.ts +53 -89
- package/stories/bounded-select-filters.stories.ts +313 -0
- package/stories/bounded-select-record.stories.ts +316 -0
- package/stories/creatable-only-column.stories.ts +231 -0
- package/stories/default-filters.stories.ts +96 -89
- package/stories/dynamic-editable.stories.ts +58 -92
- package/stories/empty-sorters.stories.ts +53 -89
- package/stories/explicit-fetch.stories.ts +54 -90
- package/stories/fixed-column.stories.ts +57 -137
- package/stories/grid-setting.stories.ts +462 -0
- package/stories/grist-modes.stories.ts +86 -155
- package/stories/group-header.stories.ts +57 -137
- package/stories/textarea.stories.ts +42 -127
- package/stories/tree-column-with-checkbox.stories.ts +53 -138
- package/stories/tree-column.stories.ts +53 -138
- package/themes/grist-theme.css +2 -0
- package/dist/src/value-generator/date-generator.d.ts +0 -6
- package/dist/src/value-generator/date-generator.js +0 -30
- package/dist/src/value-generator/date-generator.js.map +0 -1
- package/dist/src/value-generator/hour-time-generator.d.ts +0 -7
- package/dist/src/value-generator/hour-time-generator.js +0 -29
- package/dist/src/value-generator/hour-time-generator.js.map +0 -1
- package/dist/src/value-generator/index.d.ts +0 -1
- package/dist/src/value-generator/index.js +0 -2
- package/dist/src/value-generator/index.js.map +0 -1
- package/dist/src/value-generator/minute-time-generator.d.ts +0 -7
- package/dist/src/value-generator/minute-time-generator.js +0 -29
- package/dist/src/value-generator/minute-time-generator.js.map +0 -1
- package/dist/src/value-generator/month-date-generator.d.ts +0 -7
- package/dist/src/value-generator/month-date-generator.js +0 -31
- package/dist/src/value-generator/month-date-generator.js.map +0 -1
- package/dist/src/value-generator/now-generator.d.ts +0 -4
- package/dist/src/value-generator/now-generator.js +0 -8
- package/dist/src/value-generator/now-generator.js.map +0 -1
- package/dist/src/value-generator/registry.d.ts +0 -11
- package/dist/src/value-generator/registry.js +0 -50
- package/dist/src/value-generator/registry.js.map +0 -1
- package/dist/src/value-generator/time-generator.d.ts +0 -6
- package/dist/src/value-generator/time-generator.js +0 -28
- package/dist/src/value-generator/time-generator.js.map +0 -1
- package/dist/src/value-generator/today-generator.d.ts +0 -4
- package/dist/src/value-generator/today-generator.js +0 -8
- package/dist/src/value-generator/today-generator.js.map +0 -1
- package/dist/src/value-generator/week-date-generator.d.ts +0 -7
- package/dist/src/value-generator/week-date-generator.js +0 -29
- package/dist/src/value-generator/week-date-generator.js.map +0 -1
- package/dist/src/value-generator/year-date-generator.d.ts +0 -7
- package/dist/src/value-generator/year-date-generator.js +0 -29
- package/dist/src/value-generator/year-date-generator.js.map +0 -1
- package/dist/stories/accumulator.stories.js.map +0 -1
- package/src/value-generator/date-generator.ts +0 -35
- package/src/value-generator/hour-time-generator.ts +0 -43
- package/src/value-generator/index.ts +0 -1
- package/src/value-generator/minute-time-generator.ts +0 -43
- package/src/value-generator/month-date-generator.ts +0 -38
- package/src/value-generator/now-generator.ts +0 -10
- package/src/value-generator/registry.ts +0 -58
- package/src/value-generator/time-generator.ts +0 -33
- package/src/value-generator/today-generator.ts +0 -10
- package/src/value-generator/week-date-generator.ts +0 -40
- package/src/value-generator/year-date-generator.ts +0 -36
@@ -1,4 +1,4 @@
|
|
1
|
-
import '@material/
|
1
|
+
import '@material/web/icon/icon.js'
|
2
2
|
import './data-list-gutter'
|
3
3
|
import './data-list-field'
|
4
4
|
import '../record-view'
|
@@ -39,6 +39,7 @@ export class RecordPartial extends LitElement {
|
|
39
39
|
border-bottom: var(--data-list-item-border-bottom);
|
40
40
|
position: relative;
|
41
41
|
min-height: 42px;
|
42
|
+
padding-left: 7px;
|
42
43
|
}
|
43
44
|
|
44
45
|
:host([dirty])::before {
|
@@ -168,32 +169,31 @@ export class RecordPartial extends LitElement {
|
|
168
169
|
}
|
169
170
|
|
170
171
|
return html`
|
171
|
-
${dirtyIcon ? html` <
|
172
|
+
${dirtyIcon ? html` <md-icon dirty>${dirtyIcon}</md-icon> ` : html``}
|
172
173
|
${gutters.map(
|
173
|
-
gutter =>
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
174
|
+
gutter => html`
|
175
|
+
<ox-list-gutter
|
176
|
+
class=${gutter.name === 'detail' ? 'expand' : ''}
|
177
|
+
.rowIndex=${rowIndex}
|
178
|
+
.column=${gutter}
|
179
|
+
.record=${record}
|
180
|
+
.value=${record[gutter.name]}
|
181
|
+
></ox-list-gutter>
|
182
|
+
`
|
182
183
|
)}
|
183
184
|
|
184
185
|
<div content>
|
185
186
|
${displayColumns.map(
|
186
|
-
(column, idx) =>
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
`
|
187
|
+
(column, idx) => html`
|
188
|
+
<ox-list-field
|
189
|
+
.rowIndex=${rowIndex}
|
190
|
+
.column=${column}
|
191
|
+
.record=${record}
|
192
|
+
.value=${record[column?.name || '']}
|
193
|
+
?name=${idx == 0}
|
194
|
+
?desc=${idx == 1}
|
195
|
+
></ox-list-field>
|
196
|
+
`
|
197
197
|
)}
|
198
198
|
</div>
|
199
199
|
${thumbnail
|
@@ -4,8 +4,18 @@ import { html } from 'lit'
|
|
4
4
|
|
5
5
|
@customElement('ox-grist-editor-checkbox')
|
6
6
|
export class OxGristEditorCheckbox extends OxGristEditor {
|
7
|
-
|
8
|
-
|
7
|
+
_onchange(e: Event) {
|
8
|
+
e.stopPropagation()
|
9
|
+
|
10
|
+
const input = e.target as HTMLInputElement
|
11
|
+
|
12
|
+
this._dirtyValue = this.formatFromEditor(input.checked)
|
13
|
+
}
|
14
|
+
|
15
|
+
formatFromEditor(value: any) {
|
16
|
+
if (typeof value == 'boolean') {
|
17
|
+
return value
|
18
|
+
}
|
9
19
|
}
|
10
20
|
|
11
21
|
formatForEditor(value: any): any {
|
@@ -15,8 +15,7 @@ export class OxGristEditorDateTime extends OxGristEditor {
|
|
15
15
|
return new Date(timestamp - tzoffset).toISOString().slice(0, -1)
|
16
16
|
}
|
17
17
|
|
18
|
-
formatFromEditor(
|
19
|
-
var value = (e.target as HTMLInputElement).value
|
18
|
+
formatFromEditor(value: any) {
|
20
19
|
var datetime = new Date(value)
|
21
20
|
|
22
21
|
return datetime.getTime()
|
@@ -5,8 +5,18 @@ import { OxGristEditor } from './ox-grist-editor.js'
|
|
5
5
|
|
6
6
|
@customElement('ox-grist-editor-file')
|
7
7
|
export class OxGristEditorFile extends OxGristEditor {
|
8
|
-
|
9
|
-
|
8
|
+
_onchange(e: Event) {
|
9
|
+
e.stopPropagation()
|
10
|
+
|
11
|
+
const input = e.target as HTMLInputElement
|
12
|
+
|
13
|
+
this._dirtyValue = this.formatFromEditor(input.files)
|
14
|
+
|
15
|
+
this._onfocusout()
|
16
|
+
}
|
17
|
+
|
18
|
+
formatFromEditor(value: any): any {
|
19
|
+
return value
|
10
20
|
}
|
11
21
|
|
12
22
|
get editorTemplate() {
|
@@ -12,17 +12,20 @@ export class OxGristEditorImage extends OxGristEditor {
|
|
12
12
|
|
13
13
|
_onchange(e: Event) {
|
14
14
|
e.stopPropagation()
|
15
|
-
this._dirtyValue = this.formatFromEditor(e)
|
16
|
-
this._onfocusout()
|
17
|
-
}
|
18
15
|
|
19
|
-
formatFromEditor(e: Event) {
|
20
|
-
// value가 image file object인지, image url인지 확인
|
21
16
|
const input = e.target as HTMLInputElement
|
17
|
+
|
18
|
+
// value가 image file object인지, image url인지 확인
|
22
19
|
if (input.files?.[0]) {
|
23
|
-
|
20
|
+
this._dirtyValue = this.formatFromEditor(input.files[0])
|
24
21
|
} else {
|
25
|
-
|
22
|
+
this._dirtyValue = this.formatFromEditor(input.value)
|
26
23
|
}
|
24
|
+
|
25
|
+
this._onfocusout()
|
26
|
+
}
|
27
|
+
|
28
|
+
formatFromEditor(value: any) {
|
29
|
+
return value
|
27
30
|
}
|
28
31
|
}
|
@@ -5,17 +5,18 @@ import { parseToNumberOrNull } from '@operato/utils'
|
|
5
5
|
|
6
6
|
@customElement('ox-grist-editor-number')
|
7
7
|
export class OxGristEditorNumber extends OxGristEditor {
|
8
|
-
|
9
|
-
|
8
|
+
get inlineEditable() {
|
9
|
+
return true
|
10
|
+
}
|
11
|
+
|
12
|
+
formatFromEditor(value: any) {
|
13
|
+
const parsed = parseToNumberOrNull(value) ?? null
|
10
14
|
|
11
|
-
|
12
|
-
|
13
|
-
return Number.parseFloat(value) || 0
|
14
|
-
case 'integer':
|
15
|
-
return Number.parseInt(value) || 0
|
16
|
-
default:
|
17
|
-
return Number(value)
|
15
|
+
if (parsed !== null && this.column.type == 'integer') {
|
16
|
+
return Math.floor(parsed)
|
18
17
|
}
|
18
|
+
|
19
|
+
return parsed
|
19
20
|
}
|
20
21
|
|
21
22
|
get editorTemplate() {
|
@@ -1,6 +1,38 @@
|
|
1
|
-
import { OxGristEditor } from './ox-grist-editor.js'
|
2
|
-
import { customElement } from 'lit/decorators.js'
|
3
1
|
import { html } from 'lit'
|
2
|
+
import { customElement } from 'lit/decorators.js'
|
3
|
+
import { until } from 'lit/directives/until.js'
|
4
|
+
|
5
|
+
import { OxGristEditor } from './ox-grist-editor.js'
|
6
|
+
import { SelectOption, SelectOptionObject } from '../types.js'
|
7
|
+
|
8
|
+
function buildOptions(options: SelectOption[], value: any) {
|
9
|
+
const selectOptionObjects = options.map(option => {
|
10
|
+
switch (typeof option) {
|
11
|
+
case 'string':
|
12
|
+
return {
|
13
|
+
display: option,
|
14
|
+
value: option
|
15
|
+
}
|
16
|
+
case 'object':
|
17
|
+
return {
|
18
|
+
display: option.display || option.name,
|
19
|
+
value: option.value
|
20
|
+
}
|
21
|
+
default:
|
22
|
+
return option
|
23
|
+
}
|
24
|
+
}) as SelectOptionObject[]
|
25
|
+
|
26
|
+
return html`
|
27
|
+
<select>
|
28
|
+
${selectOptionObjects.map(
|
29
|
+
(option: any) => html`
|
30
|
+
<option ?selected=${option.value == value} value=${option.value}>${option.display}</option>
|
31
|
+
`
|
32
|
+
)}
|
33
|
+
</select>
|
34
|
+
`
|
35
|
+
}
|
4
36
|
|
5
37
|
@customElement('ox-grist-editor-select')
|
6
38
|
export class OxGristEditorSelect extends OxGristEditor {
|
@@ -10,33 +42,14 @@ export class OxGristEditorSelect extends OxGristEditor {
|
|
10
42
|
|
11
43
|
if (typeof options == 'function') {
|
12
44
|
options = options.call(null, this.value, this.column, this.record, this.rowIndex, this.field)
|
13
|
-
}
|
14
45
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
display: option,
|
20
|
-
value: option
|
21
|
-
}
|
22
|
-
case 'object':
|
23
|
-
return {
|
24
|
-
display: option.display,
|
25
|
-
value: option.value
|
26
|
-
}
|
27
|
-
default:
|
28
|
-
return option
|
46
|
+
if (options instanceof Promise) {
|
47
|
+
return html`${until(options.then(options => buildOptions(options, this.value)))}`
|
48
|
+
} else {
|
49
|
+
return buildOptions((options || []) as SelectOption[], rowOptionField.display || this.value)
|
29
50
|
}
|
30
|
-
}
|
31
|
-
|
32
|
-
|
33
|
-
<select>
|
34
|
-
${options.map(
|
35
|
-
(option: any) => html`
|
36
|
-
<option ?selected=${option.value == this.value} value=${option.value}>${option.display}</option>
|
37
|
-
`
|
38
|
-
)}
|
39
|
-
</select>
|
40
|
-
`
|
51
|
+
} else {
|
52
|
+
return buildOptions((options || []) as SelectOption[], this.value)
|
53
|
+
}
|
41
54
|
}
|
42
55
|
}
|
@@ -4,6 +4,10 @@ import { html } from 'lit'
|
|
4
4
|
|
5
5
|
@customElement('ox-grist-editor-text')
|
6
6
|
export class OxGristEditorText extends OxGristEditor {
|
7
|
+
get inlineEditable() {
|
8
|
+
return true
|
9
|
+
}
|
10
|
+
|
7
11
|
get editorTemplate() {
|
8
12
|
return html` <input type="text" .value=${this.value} /> `
|
9
13
|
}
|
@@ -6,6 +6,10 @@ import { html } from 'lit'
|
|
6
6
|
|
7
7
|
@customElement('ox-grist-editor-textarea')
|
8
8
|
export class OxGristEditorTextarea extends OxGristEditor {
|
9
|
+
get inlineEditable() {
|
10
|
+
return true
|
11
|
+
}
|
12
|
+
|
9
13
|
get editorTemplate() {
|
10
14
|
return html` <ox-input-textarea .value=${this.value}></ox-input-textarea> `
|
11
15
|
}
|
@@ -4,8 +4,7 @@ import { customElement, property } from 'lit/decorators.js'
|
|
4
4
|
import { ZERO_COLUMN, ZERO_RECORD } from '../configure/zero-config'
|
5
5
|
import { DataGridField } from '../data-grid/data-grid-field'
|
6
6
|
import { ColumnConfig, GristRecord } from '../types'
|
7
|
-
import { getDefaultValue } from '
|
8
|
-
import { parseToNumberOrNull } from '@operato/utils'
|
7
|
+
import { getDefaultValue } from '@operato/time-calculator'
|
9
8
|
|
10
9
|
const STYLE = css`
|
11
10
|
:host {
|
@@ -92,8 +91,8 @@ export class OxGristEditor extends LitElement {
|
|
92
91
|
return this.renderRoot.firstElementChild as HTMLElement
|
93
92
|
}
|
94
93
|
|
95
|
-
get
|
96
|
-
return
|
94
|
+
get inlineEditable() {
|
95
|
+
return false
|
97
96
|
}
|
98
97
|
|
99
98
|
async firstUpdated() {
|
@@ -122,22 +121,21 @@ export class OxGristEditor extends LitElement {
|
|
122
121
|
currentValue = getDefaultValue(defaultValue, this.record)
|
123
122
|
}
|
124
123
|
|
124
|
+
this.value = this._dirtyValue = this.formatForEditor(currentValue)
|
125
|
+
|
125
126
|
// 입력을 위한 키를 누르면서 편집모드가 될때는 누른 키가 처음에 입력되도록, enter 같은 것을 눌러서 편집모드가 되면 현재 값으로 편집모드 전환
|
126
|
-
const
|
127
|
-
|
128
|
-
this.value = this._dirtyValue = ['number', 'float', 'integer', 'progress'].includes(fieldType)
|
129
|
-
? parseToNumberOrNull(editorValue)
|
130
|
-
: editorValue
|
127
|
+
const valueWith = this.inlineEditable && this.field?.valueWith
|
128
|
+
this.value = this._dirtyValue = valueWith ? this.formatFromEditor(valueWith) : this.formatForEditor(currentValue)
|
131
129
|
|
132
130
|
requestAnimationFrame(() => {
|
133
131
|
this.focus()
|
134
|
-
this.select()
|
132
|
+
!valueWith && this.select()
|
135
133
|
})
|
136
134
|
}
|
137
135
|
|
138
136
|
select() {
|
139
137
|
const editor = this.editor
|
140
|
-
if ((editor as HTMLInputElement)?.select
|
138
|
+
if ((editor as HTMLInputElement)?.select) {
|
141
139
|
return (editor as HTMLInputElement).select()
|
142
140
|
}
|
143
141
|
}
|
@@ -153,8 +151,8 @@ export class OxGristEditor extends LitElement {
|
|
153
151
|
return value == null ? '' : value
|
154
152
|
}
|
155
153
|
|
156
|
-
formatFromEditor(
|
157
|
-
return
|
154
|
+
formatFromEditor(value: any): any {
|
155
|
+
return value
|
158
156
|
}
|
159
157
|
|
160
158
|
_onfocusout() {
|
@@ -184,7 +182,9 @@ export class OxGristEditor extends LitElement {
|
|
184
182
|
_onchange(e: Event): void {
|
185
183
|
e.stopPropagation()
|
186
184
|
|
187
|
-
|
185
|
+
const value = (e.target as any)?.value
|
186
|
+
|
187
|
+
this._dirtyValue = this.formatFromEditor(value)
|
188
188
|
}
|
189
189
|
|
190
190
|
_onkeydown(e: Event): void {}
|
package/src/empty-note.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import '@material/
|
1
|
+
import '@material/web/icon/icon.js'
|
2
2
|
|
3
3
|
import { LitElement, css, html } from 'lit'
|
4
4
|
import { customElement, property } from 'lit/decorators.js'
|
@@ -11,7 +11,7 @@ export class EmptyNote extends LitElement {
|
|
11
11
|
text-align: center;
|
12
12
|
}
|
13
13
|
|
14
|
-
|
14
|
+
md-icon {
|
15
15
|
font: var(--oops-note-icon-font);
|
16
16
|
color: var(--oops-note-icon-color);
|
17
17
|
border: var(--oops-note-icon-border);
|
@@ -38,7 +38,7 @@ export class EmptyNote extends LitElement {
|
|
38
38
|
|
39
39
|
render() {
|
40
40
|
return html`
|
41
|
-
${this.icon ? html`<
|
41
|
+
${this.icon ? html`<md-icon>${this.icon}</md-icon>` : html``}
|
42
42
|
<div titler>${this.title}</div>
|
43
43
|
${this.description ? html`<div description>${this.description}</div>` : html``}
|
44
44
|
`
|
@@ -5,8 +5,16 @@ import { html } from 'lit-html'
|
|
5
5
|
import { FilterConfigObject, FilterSelectRenderer } from '../types.js'
|
6
6
|
|
7
7
|
export const FilterCheckbox: FilterSelectRenderer = (column, value, owner) => {
|
8
|
-
const filter = column
|
9
|
-
|
8
|
+
const { name, header, label, filter } = column
|
9
|
+
|
10
|
+
const { label: filterLabel, operator } = filter! as FilterConfigObject
|
11
|
+
|
12
|
+
const labelText =
|
13
|
+
filterLabel !== undefined
|
14
|
+
? filterLabel
|
15
|
+
: typeof label === 'object' && label.renderer
|
16
|
+
? label.renderer(column)
|
17
|
+
: header.renderer(column) || name
|
10
18
|
|
11
19
|
return html`
|
12
20
|
<ox-checkbox
|
@@ -14,19 +22,21 @@ export const FilterCheckbox: FilterSelectRenderer = (column, value, owner) => {
|
|
14
22
|
?checked=${value}
|
15
23
|
indeterminatable
|
16
24
|
?indeterminate=${value == null}
|
25
|
+
left-label
|
17
26
|
@change=${(e: CustomEvent) => {
|
18
27
|
;(e.target as HTMLElement).dispatchEvent(
|
19
28
|
new CustomEvent('filter-change', {
|
20
29
|
bubbles: true,
|
21
30
|
composed: true,
|
22
31
|
detail: {
|
23
|
-
name
|
24
|
-
operator
|
32
|
+
name,
|
33
|
+
operator,
|
25
34
|
value: (e.target as Element & { checked: boolean | undefined }).checked
|
26
35
|
}
|
27
36
|
})
|
28
37
|
)
|
29
38
|
}}
|
30
|
-
|
39
|
+
><label filter-title><span>${labelText}</span></label></ox-checkbox
|
40
|
+
>
|
31
41
|
`
|
32
42
|
}
|
@@ -2,16 +2,31 @@ import { FilterConfigObject, FilterSelectRenderer } from '../types'
|
|
2
2
|
|
3
3
|
import { html } from 'lit-html'
|
4
4
|
|
5
|
+
function formatDate(type: string, date: Date) {
|
6
|
+
var year = date.getFullYear()
|
7
|
+
var month = ('0' + (date.getMonth() + 1)).slice(-2)
|
8
|
+
var day = ('0' + date.getDate()).slice(-2)
|
9
|
+
var hours = ('0' + date.getHours()).slice(-2)
|
10
|
+
var minutes = ('0' + date.getMinutes()).slice(-2)
|
11
|
+
|
12
|
+
var formatDate = year + '-' + month + '-' + day
|
13
|
+
|
14
|
+
return type == 'date' ? formatDate : formatDate + 'T' + hours + ':' + minutes
|
15
|
+
}
|
16
|
+
|
5
17
|
export const FilterRangeDate: FilterSelectRenderer = (column, value, owner) => {
|
6
18
|
const filter = column.filter as FilterConfigObject
|
7
19
|
|
8
|
-
|
20
|
+
var [from, to] = value instanceof Array ? value : []
|
9
21
|
|
10
22
|
var type: any = filter?.type || column.type
|
11
23
|
if (type === 'datetime') {
|
12
24
|
type = 'datetime-local'
|
13
25
|
}
|
14
26
|
|
27
|
+
from = formatDate(type, new Date(from))
|
28
|
+
to = formatDate(type, new Date(to))
|
29
|
+
|
15
30
|
return html`
|
16
31
|
<input
|
17
32
|
name=${column.name}
|
@@ -1,26 +1,14 @@
|
|
1
1
|
import '@operato/input/ox-checkbox.js'
|
2
2
|
|
3
|
-
import {
|
3
|
+
import { html } from 'lit'
|
4
|
+
import { until } from 'lit/directives/until.js'
|
4
5
|
|
5
|
-
import {
|
6
|
+
import { FilterConfigObject, FilterOperator, FilterSelectRenderer, SelectOption, SelectOptionObject } from '../types'
|
7
|
+
import { OxFiltersForm } from './filters-form'
|
8
|
+
import { DataGridHeader } from '../data-grid/data-grid-header'
|
6
9
|
|
7
|
-
|
8
|
-
|
9
|
-
const filter = column.filter as FilterConfigObject
|
10
|
-
const operator = filter?.operator
|
11
|
-
|
12
|
-
var options = filter?.options || column.record.options || []
|
13
|
-
|
14
|
-
if (typeof options === 'function') {
|
15
|
-
if (!filter?.options) {
|
16
|
-
console.warn(
|
17
|
-
'ox-grist의 column.filter 속성에서는 column.record.options의 함수형 options을 사용할 수 없으므로, filter 속성에서 재지정해야한다.'
|
18
|
-
)
|
19
|
-
}
|
20
|
-
options = options.call(column, owner)
|
21
|
-
}
|
22
|
-
|
23
|
-
options = options.map((option: any) => {
|
10
|
+
function buildOptions(options: SelectOption[], operator?: FilterOperator) {
|
11
|
+
const selectOptionObjects = options.map(option => {
|
24
12
|
switch (typeof option) {
|
25
13
|
case 'string':
|
26
14
|
return {
|
@@ -29,27 +17,52 @@ export const FilterSelect: FilterSelectRenderer = (column, value, owner) => {
|
|
29
17
|
}
|
30
18
|
case 'object':
|
31
19
|
return {
|
32
|
-
display: option.display,
|
20
|
+
display: option.display || option.name,
|
33
21
|
value: option.value
|
34
22
|
}
|
35
23
|
default:
|
36
24
|
return option
|
37
25
|
}
|
38
|
-
})
|
26
|
+
}) as SelectOptionObject[]
|
39
27
|
|
40
28
|
return operator === 'in'
|
41
29
|
? html`
|
42
|
-
${
|
43
|
-
?.filter(
|
30
|
+
${selectOptionObjects
|
31
|
+
?.filter(option => !!option)
|
44
32
|
.map(
|
45
|
-
(
|
46
|
-
html` <ox-checkbox option value=${option.value}>${option.display}</ox-checkbox> `
|
33
|
+
({ value, display, name }) => html` <ox-checkbox option value=${value}>${display || name}</ox-checkbox> `
|
47
34
|
)}
|
48
35
|
`
|
49
36
|
: html`
|
50
|
-
${
|
51
|
-
(
|
52
|
-
html` <div option value=${option.value}>${option.display} </div> `
|
37
|
+
${selectOptionObjects?.map(
|
38
|
+
({ value, display, name }) => html` <div option value=${value}>${display || name} </div> `
|
53
39
|
)}
|
54
40
|
`
|
55
41
|
}
|
42
|
+
|
43
|
+
export const FilterSelect: FilterSelectRenderer = (column, value, owner) => {
|
44
|
+
/* value는 filters-form이나 grid-header에서 처리되므로 이 곳에서는 무시한다. */
|
45
|
+
const filter = column.filter as FilterConfigObject
|
46
|
+
const operator = filter?.operator
|
47
|
+
const form = owner as OxFiltersForm | DataGridHeader
|
48
|
+
|
49
|
+
var options = filter?.options || column.record.options || []
|
50
|
+
|
51
|
+
if (typeof options === 'function') {
|
52
|
+
if (!filter?.options) {
|
53
|
+
console.warn(
|
54
|
+
'ox-grist의 column.filter 속성에서는 column.record.options의 함수형 options을 사용할 수 없으므로, filter 속성에서 재지정해야한다.'
|
55
|
+
)
|
56
|
+
}
|
57
|
+
|
58
|
+
options = options.call(null, value, column, form instanceof OxFiltersForm ? form.getFormObjectValue() : {}, owner)
|
59
|
+
|
60
|
+
if (options instanceof Promise) {
|
61
|
+
return html`${until(options.then(options => buildOptions(options, operator)))}`
|
62
|
+
} else {
|
63
|
+
return buildOptions((options || []) as SelectOption[], operator)
|
64
|
+
}
|
65
|
+
} else {
|
66
|
+
return buildOptions((options || []) as SelectOption[], operator)
|
67
|
+
}
|
68
|
+
}
|
@@ -2,56 +2,77 @@ import { css } from 'lit'
|
|
2
2
|
|
3
3
|
export const FilterStyles = css`
|
4
4
|
:host {
|
5
|
-
--ox-input-placeholder-color: var(--primary-color);
|
6
|
-
|
7
|
-
--ox-input-
|
8
|
-
--ox-input-border: 1px solid
|
9
|
-
--ox-input-
|
10
|
-
--ox-input-
|
11
|
-
--ox-input-
|
12
|
-
--ox-
|
13
|
-
|
14
|
-
--ox-filters-
|
15
|
-
|
16
|
-
--ox-filters-form-
|
17
|
-
--ox-
|
5
|
+
--ox-filters-input-placeholder-color: var(--input-placeholder-color, var(--primary-color));
|
6
|
+
|
7
|
+
--ox-filters-input-border: var(--input-border, 1px solid rgba(0, 0, 0, 0.2));
|
8
|
+
--ox-filters-input-focus-border: var(--input-focus-border, 1px solid var(--primary-color));
|
9
|
+
--ox-filters-input-font: var(--input-font, normal 14px var(--theme-font));
|
10
|
+
--ox-filters-input-color: var(--input-color, var(--primary-text-color));
|
11
|
+
--ox-filters-input-focus-color: var(--input-focus-color, var(--primary-color));
|
12
|
+
--ox-filters-label-font: var(--label-font, normal 14px var(--theme-font));
|
13
|
+
--ox-filters-label-color: var(--label-color, var(--primary-text-color));
|
14
|
+
--ox-filters-input-background-color: transparent;
|
15
|
+
|
16
|
+
--ox-filters-form-gap: var(--input-gap-vertical, 8px) var(--input-gap-horizontal, 16px);
|
17
|
+
--ox-filters-input-padding: var(--input-padding, 6px 2px);
|
18
|
+
|
19
|
+
--ox-select-padding: var(--ox-filters-input-padding);
|
20
|
+
--ox-checkbox-background-color: var(--ox-filters-input-background-color, transparent);
|
18
21
|
}
|
19
22
|
|
20
23
|
label {
|
21
|
-
font: var(--ox-filters-
|
22
|
-
color: var(--ox-filters-
|
24
|
+
font: var(--ox-filters-label-font);
|
25
|
+
color: var(--ox-filters-label-color);
|
23
26
|
}
|
27
|
+
|
24
28
|
span {
|
25
|
-
margin-right: var(--margin-narrow);
|
26
29
|
text-transform: capitalize;
|
27
30
|
}
|
28
31
|
|
29
32
|
input::placeholder {
|
30
|
-
color: var(--ox-input-placeholder-color);
|
33
|
+
color: var(--ox-filters-input-placeholder-color);
|
31
34
|
opacity: 0.6;
|
32
35
|
}
|
33
36
|
|
37
|
+
input {
|
38
|
+
padding: var(--ox-filters-input-padding);
|
39
|
+
}
|
40
|
+
|
41
|
+
label > span + *,
|
34
42
|
ox-select,
|
35
43
|
input {
|
36
|
-
padding: var(--input-padding);
|
37
44
|
border: none;
|
38
|
-
border-bottom: var(--ox-input-border);
|
39
|
-
font: var(--ox-input-font);
|
40
|
-
color: var(--ox-input-color);
|
45
|
+
border-bottom: var(--ox-filters-input-border);
|
46
|
+
font: var(--ox-filters-input-font);
|
47
|
+
color: var(--ox-filters-input-color);
|
48
|
+
background-color: var(--ox-filters-input-background-color, transparent);
|
49
|
+
}
|
50
|
+
|
51
|
+
label > span + * {
|
52
|
+
min-width: 120px;
|
41
53
|
}
|
42
54
|
|
43
55
|
ox-select:focus,
|
44
56
|
input:focus {
|
45
57
|
outline: none;
|
46
|
-
border-bottom: var(--ox-input-focus-border);
|
47
|
-
color: var(--
|
58
|
+
border-bottom: var(--ox-filters-input-focus-border);
|
59
|
+
color: var(--ox-filters-input-focus-color);
|
48
60
|
}
|
61
|
+
|
49
62
|
ox-select {
|
50
|
-
|
63
|
+
min-width: 100px;
|
64
|
+
max-width: 170px;
|
65
|
+
}
|
66
|
+
|
67
|
+
ox-input-barcode {
|
68
|
+
min-width: 150px;
|
69
|
+
}
|
70
|
+
|
71
|
+
ox-input-search {
|
72
|
+
max-width: 150px;
|
51
73
|
}
|
52
74
|
|
53
75
|
input[type='number'] {
|
54
|
-
padding-right: var(--padding-narrow);
|
55
76
|
max-width: 90px;
|
56
77
|
}
|
57
78
|
|
@@ -59,15 +80,13 @@ export const FilterStyles = css`
|
|
59
80
|
input[type*='time'],
|
60
81
|
input[type='week'],
|
61
82
|
input[type='month'] {
|
62
|
-
padding: 8px var(--padding-narrow) 8px var(--padding-default);
|
63
83
|
max-width: 170px;
|
64
84
|
}
|
65
85
|
|
66
86
|
@media only screen and (max-width: 460px) {
|
67
87
|
:host {
|
68
88
|
--ox-filters-form-label-font: bold 13px var(--theme-font);
|
69
|
-
--ox-input-font: normal 16px var(--theme-font);
|
70
|
-
--ox-filters-form-gap: var(--margin-narrow);
|
89
|
+
--ox-filters-input-font: normal 16px var(--theme-font);
|
71
90
|
}
|
72
91
|
|
73
92
|
input[from],
|