@operato/form 2.0.0-alpha.94 → 2.0.0-beta.0
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 +272 -0
- package/dist/src/components/ox-custom-input.js +5 -5
- package/dist/src/components/ox-custom-input.js.map +1 -1
- package/dist/src/components/ox-custom-select.js +2 -1
- package/dist/src/components/ox-custom-select.js.map +1 -1
- package/dist/src/components/ox-file-uploader.js +1 -1
- package/dist/src/components/ox-file-uploader.js.map +1 -1
- package/dist/src/components/ox-search-form.d.ts +12 -23
- package/dist/src/components/ox-search-form.js +227 -91
- package/dist/src/components/ox-search-form.js.map +1 -1
- package/dist/src/filters/filter-checkbox.js +2 -1
- package/dist/src/filters/filter-checkbox.js.map +1 -1
- package/dist/src/filters/filter-input-barcode.js +5 -3
- package/dist/src/filters/filter-input-barcode.js.map +1 -1
- package/dist/src/filters/filter-input.js +2 -1
- package/dist/src/filters/filter-input.js.map +1 -1
- package/dist/src/filters/filter-range-date.js +3 -1
- package/dist/src/filters/filter-range-date.js.map +1 -1
- package/dist/src/filters/filter-range-number.js +3 -1
- package/dist/src/filters/filter-range-number.js.map +1 -1
- package/dist/src/filters/filter-select.js +23 -11
- package/dist/src/filters/filter-select.js.map +1 -1
- package/dist/src/filters/filter-styles.js +56 -24
- package/dist/src/filters/filter-styles.js.map +1 -1
- package/dist/src/filters/ox-filter-personalizer.d.ts +8 -0
- package/dist/src/filters/ox-filter-personalizer.js +175 -0
- package/dist/src/filters/ox-filter-personalizer.js.map +1 -0
- package/dist/src/filters/ox-filters-form-base.d.ts +13 -3
- package/dist/src/filters/ox-filters-form-base.js +196 -60
- package/dist/src/filters/ox-filters-form-base.js.map +1 -1
- package/dist/src/styles/multi-column-form-styles.js +6 -6
- package/dist/src/styles/multi-column-form-styles.js.map +1 -1
- package/dist/src/styles/search-form-styles.js +23 -18
- package/dist/src/styles/search-form-styles.js.map +1 -1
- package/dist/src/styles/single-column-form-styles.js +5 -5
- package/dist/src/styles/single-column-form-styles.js.map +1 -1
- package/dist/src/types.d.ts +42 -2
- package/dist/src/types.js.map +1 -1
- package/dist/stories/ox-filters-form-barcode.stories.d.ts +5 -0
- package/dist/stories/ox-filters-form-barcode.stories.js +51 -12
- package/dist/stories/ox-filters-form-barcode.stories.js.map +1 -1
- package/dist/stories/ox-filters-form-base-bounded.stories.d.ts +35 -0
- package/dist/stories/ox-filters-form-base-bounded.stories.js +187 -0
- package/dist/stories/ox-filters-form-base-bounded.stories.js.map +1 -0
- package/dist/stories/ox-filters-form-base-change-handler.stories.d.ts +35 -0
- package/dist/stories/ox-filters-form-base-change-handler.stories.js +199 -0
- package/dist/stories/ox-filters-form-base-change-handler.stories.js.map +1 -0
- package/dist/stories/ox-filters-form-base-page-preference.stories.d.ts +31 -0
- package/dist/stories/ox-filters-form-base-page-preference.stories.js +173 -0
- package/dist/stories/ox-filters-form-base-page-preference.stories.js.map +1 -0
- package/dist/stories/ox-filters-form-base.stories.d.ts +5 -0
- package/dist/stories/ox-filters-form-base.stories.js +57 -27
- package/dist/stories/ox-filters-form-base.stories.js.map +1 -1
- package/dist/stories/ox-search-form-change-handler.stories.d.ts +34 -0
- package/dist/stories/ox-search-form-change-handler.stories.js +227 -0
- package/dist/stories/ox-search-form-change-handler.stories.js.map +1 -0
- package/dist/stories/ox-search-form.stories.d.ts +45 -0
- package/dist/stories/ox-search-form.stories.js +235 -0
- package/dist/stories/ox-search-form.stories.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -5
- package/src/components/ox-custom-input.ts +5 -5
- package/src/components/ox-custom-select.ts +2 -1
- package/src/components/ox-file-uploader.ts +1 -1
- package/src/components/ox-search-form.ts +231 -97
- package/src/filters/filter-checkbox.ts +2 -1
- package/src/filters/filter-input-barcode.ts +5 -3
- package/src/filters/filter-input.ts +2 -1
- package/src/filters/filter-range-date.ts +3 -1
- package/src/filters/filter-range-number.ts +3 -1
- package/src/filters/filter-select.ts +29 -20
- package/src/filters/filter-styles.ts +56 -24
- package/src/filters/ox-filter-personalizer.ts +188 -0
- package/src/filters/ox-filters-form-base.ts +222 -79
- package/src/styles/multi-column-form-styles.ts +6 -6
- package/src/styles/search-form-styles.ts +23 -18
- package/src/styles/single-column-form-styles.ts +5 -5
- package/src/types.ts +48 -2
- package/stories/ox-filters-form-barcode.stories.ts +54 -14
- package/stories/ox-filters-form-base-bounded.stories.ts +213 -0
- package/stories/ox-filters-form-base-change-handler.stories.ts +225 -0
- package/stories/ox-filters-form-base-page-preference.stories.ts +192 -0
- package/stories/ox-filters-form-base.stories.ts +63 -31
- package/stories/ox-search-form-change-handler.stories.ts +252 -0
- package/stories/ox-search-form.stories.ts +269 -0
- package/themes/dark-hc.css +151 -0
- package/themes/dark-mc.css +151 -0
- package/themes/dark.css +151 -0
- package/themes/grist-theme.css +169 -0
- package/themes/light-hc.css +151 -0
- package/themes/light-mc.css +151 -0
- package/themes/light.css +151 -0
- package/themes/md-typescale-styles.css +100 -0
- package/themes/spacing.css +43 -0
- package/themes/state-color.css +6 -0
- package/themes/app-theme.css +0 -145
- package/themes/form-theme.css +0 -75
|
@@ -4,8 +4,9 @@ import '@operato/input/ox-select.js';
|
|
|
4
4
|
import '@operato/popup/ox-popup-list.js';
|
|
5
5
|
import '@operato/input/ox-input-search.js';
|
|
6
6
|
import json5 from 'json5';
|
|
7
|
-
import { css, html, LitElement } from 'lit';
|
|
8
|
-
import { customElement, property, queryAsync } from 'lit/decorators.js';
|
|
7
|
+
import { css, html, LitElement, nothing } from 'lit';
|
|
8
|
+
import { customElement, property, queryAsync, state } from 'lit/decorators.js';
|
|
9
|
+
import { styles as MDTypeScaleStyles } from '@material/web/typography/md-typescale-styles';
|
|
9
10
|
import { getDefaultValue } from '@operato/time-calculator';
|
|
10
11
|
import { FilterStyles } from './filter-styles.js';
|
|
11
12
|
import { getFilterRenderer } from './registry.js';
|
|
@@ -15,14 +16,30 @@ let OxFiltersFormBase = class OxFiltersFormBase extends LitElement {
|
|
|
15
16
|
this.value = [];
|
|
16
17
|
this.filters = [];
|
|
17
18
|
this.autofocus = true;
|
|
19
|
+
this.autoUpdateTargetsOnChange = {};
|
|
18
20
|
}
|
|
19
21
|
connectedCallback() {
|
|
20
22
|
super.connectedCallback();
|
|
21
23
|
this.renderRoot.addEventListener('change', async (e) => {
|
|
22
24
|
const { target, detail: value } = e;
|
|
23
25
|
const name = target.name;
|
|
24
|
-
const { label, type, operator, value: defaultValue, onchange } = this.
|
|
25
|
-
|
|
26
|
+
const { label, type, operator, value: defaultValue, onchange } = (this.personalFilters || []).find(filter => filter.name == name) || {};
|
|
27
|
+
if (this.autoUpdateTargetsOnChange[name]) {
|
|
28
|
+
/*
|
|
29
|
+
일단은 심플하게, boundTo로 연결된 필터값이 바뀌면, 폼 전체를 update하도록 함.
|
|
30
|
+
*/
|
|
31
|
+
;
|
|
32
|
+
(this.autoUpdateTargetsOnChange[name] || []).forEach(name => {
|
|
33
|
+
const target = this.renderRoot.querySelector(`[name='${name}']`);
|
|
34
|
+
if (target) {
|
|
35
|
+
;
|
|
36
|
+
target.value = '';
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
this.requestUpdate();
|
|
40
|
+
}
|
|
41
|
+
const keepGoing = onchange ? await onchange.call(null, value !== null && value !== void 0 ? value : target.value, this) : true;
|
|
42
|
+
this.value = await this.getQueryFilters();
|
|
26
43
|
keepGoing &&
|
|
27
44
|
this.dispatchEvent(new CustomEvent('filters-change', {
|
|
28
45
|
bubbles: true,
|
|
@@ -39,7 +56,7 @@ let OxFiltersFormBase = class OxFiltersFormBase extends LitElement {
|
|
|
39
56
|
return;
|
|
40
57
|
}
|
|
41
58
|
if (operator == 'between') {
|
|
42
|
-
return defaultValue.map(v => getDefaultValue(v, this));
|
|
59
|
+
return defaultValue instanceof Array && defaultValue.map(v => getDefaultValue(v, this));
|
|
43
60
|
}
|
|
44
61
|
else {
|
|
45
62
|
return getDefaultValue(defaultValue, this);
|
|
@@ -48,78 +65,91 @@ let OxFiltersFormBase = class OxFiltersFormBase extends LitElement {
|
|
|
48
65
|
render() {
|
|
49
66
|
return html `
|
|
50
67
|
<form
|
|
68
|
+
class="md-typescale-body-medium-prominent"
|
|
51
69
|
@submit=${(e) => {
|
|
52
70
|
e.preventDefault();
|
|
53
71
|
}}
|
|
54
72
|
>
|
|
55
|
-
${this.
|
|
73
|
+
${(this.personalFilters || [])
|
|
74
|
+
.filter(filter => !filter.hidden)
|
|
75
|
+
.map((filter) => {
|
|
56
76
|
var _a, _b, _c;
|
|
57
|
-
const { name, label, type, operator, value: defaultValue } = filter;
|
|
77
|
+
const { name, label, type, operator, readonly, value: defaultValue } = filter;
|
|
58
78
|
const idx = operator === 'between' ? 1 : 0;
|
|
59
79
|
const renderer = getFilterRenderer(operator === 'like' || operator === 'i_like' || operator === 'i_nlike' || operator === 'nlike'
|
|
60
80
|
? 'text'
|
|
61
81
|
: type)[idx];
|
|
62
82
|
const value = (_c = (_b = (_a = this.value) === null || _a === void 0 ? void 0 : _a.find(filter => filter.name == name)) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : this.buildDefaultValue(operator, defaultValue);
|
|
63
83
|
if (!renderer) {
|
|
64
|
-
return
|
|
84
|
+
return nothing;
|
|
65
85
|
}
|
|
66
86
|
return type === 'search'
|
|
67
|
-
? html `<ox-input-search
|
|
87
|
+
? html `<ox-input-search
|
|
88
|
+
name="search"
|
|
89
|
+
.value=${value}
|
|
90
|
+
?autofocus=${this.autofocus}
|
|
91
|
+
?readonly=${readonly}
|
|
92
|
+
></ox-input-search>`
|
|
68
93
|
: type === 'boolean' || type === 'checkbox'
|
|
69
94
|
? renderer(filter, value, this)
|
|
70
95
|
: type !== 'select'
|
|
71
96
|
? html `
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
`
|
|
76
|
-
: operator === 'in'
|
|
77
|
-
? html `
|
|
78
|
-
<ox-select
|
|
79
|
-
name=${name}
|
|
80
|
-
placeholder=${label}
|
|
81
|
-
.value=${value}
|
|
82
|
-
@change=${(e) => {
|
|
83
|
-
var _a;
|
|
84
|
-
return (_a = e.target) === null || _a === void 0 ? void 0 : _a.dispatchEvent(new CustomEvent('filter-change', {
|
|
85
|
-
detail: {
|
|
86
|
-
name,
|
|
87
|
-
operator,
|
|
88
|
-
value: e.detail
|
|
89
|
-
}
|
|
90
|
-
}));
|
|
91
|
-
}}
|
|
92
|
-
>
|
|
93
|
-
<ox-popup-list multiple attr-selected="checked" with-search>
|
|
94
|
-
${renderer(filter, value, this)}
|
|
95
|
-
</ox-popup-list>
|
|
96
|
-
</ox-select>
|
|
97
|
+
<label filter-title ?between=${operator == 'between'}
|
|
98
|
+
><span>${label}</span> ${renderer(filter, value, this)}
|
|
99
|
+
</label>
|
|
97
100
|
`
|
|
98
|
-
|
|
99
|
-
<ox-select
|
|
100
|
-
name=${name}
|
|
101
|
-
placeholder=${label}
|
|
102
|
-
.value=${value}
|
|
103
|
-
@change=${(e) => {
|
|
104
|
-
var _a;
|
|
105
|
-
return (_a = e.target) === null || _a === void 0 ? void 0 : _a.dispatchEvent(new CustomEvent('filter-change', {
|
|
106
|
-
detail: {
|
|
107
|
-
name,
|
|
108
|
-
operator,
|
|
109
|
-
value: e.detail
|
|
110
|
-
}
|
|
111
|
-
}));
|
|
112
|
-
}}
|
|
113
|
-
>
|
|
114
|
-
<ox-popup-list with-search> ${renderer(filter, value, this)} </ox-popup-list>
|
|
115
|
-
</ox-select>
|
|
116
|
-
`;
|
|
101
|
+
: this.renderSelect(filter, value, renderer);
|
|
117
102
|
})}
|
|
118
103
|
</form>
|
|
104
|
+
|
|
105
|
+
<slot name="setting"></slot>
|
|
119
106
|
`;
|
|
120
107
|
}
|
|
121
|
-
|
|
122
|
-
|
|
108
|
+
renderSelect(filter, value, renderer) {
|
|
109
|
+
const { name, label, operator, readonly, value: defaultValue } = filter;
|
|
110
|
+
return operator === 'in'
|
|
111
|
+
? html `
|
|
112
|
+
<ox-select
|
|
113
|
+
name=${name}
|
|
114
|
+
placeholder=${label}
|
|
115
|
+
.value=${value !== null && value !== void 0 ? value : defaultValue}
|
|
116
|
+
@change=${(e) => {
|
|
117
|
+
var _a;
|
|
118
|
+
return (_a = e.target) === null || _a === void 0 ? void 0 : _a.dispatchEvent(new CustomEvent('filter-change', {
|
|
119
|
+
detail: {
|
|
120
|
+
name,
|
|
121
|
+
operator,
|
|
122
|
+
value: e.detail
|
|
123
|
+
}
|
|
124
|
+
}));
|
|
125
|
+
}}
|
|
126
|
+
?readonly=${readonly}
|
|
127
|
+
>
|
|
128
|
+
<ox-popup-list multiple attr-selected="checked" with-search>
|
|
129
|
+
${renderer(filter, value, this)}
|
|
130
|
+
</ox-popup-list>
|
|
131
|
+
</ox-select>
|
|
132
|
+
`
|
|
133
|
+
: html `
|
|
134
|
+
<ox-select
|
|
135
|
+
name=${name}
|
|
136
|
+
placeholder=${label}
|
|
137
|
+
.value=${value !== null && value !== void 0 ? value : defaultValue}
|
|
138
|
+
@change=${(e) => {
|
|
139
|
+
var _a;
|
|
140
|
+
return (_a = e.target) === null || _a === void 0 ? void 0 : _a.dispatchEvent(new CustomEvent('filter-change', {
|
|
141
|
+
detail: {
|
|
142
|
+
name,
|
|
143
|
+
operator,
|
|
144
|
+
value: e.detail
|
|
145
|
+
}
|
|
146
|
+
}));
|
|
147
|
+
}}
|
|
148
|
+
?readonly=${readonly}
|
|
149
|
+
>
|
|
150
|
+
<ox-popup-list with-search> ${renderer(filter, value, this)} </ox-popup-list>
|
|
151
|
+
</ox-select>
|
|
152
|
+
`;
|
|
123
153
|
}
|
|
124
154
|
async updated(changes) {
|
|
125
155
|
if (changes.has('urlParamsSensitive')) {
|
|
@@ -175,10 +205,68 @@ let OxFiltersFormBase = class OxFiltersFormBase extends LitElement {
|
|
|
175
205
|
}
|
|
176
206
|
}
|
|
177
207
|
}
|
|
208
|
+
if (changes.has('personalConfigProvider') && this.personalConfigProvider) {
|
|
209
|
+
this.personalConfig = await this.personalConfigProvider.load();
|
|
210
|
+
}
|
|
211
|
+
else if (changes.has('filters') || changes.has('personalConfig')) {
|
|
212
|
+
this.applyUpdatedConfiguration();
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
async applyUpdatedConfiguration() {
|
|
216
|
+
var _a;
|
|
217
|
+
if (!this.filters) {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
if (!this.personalConfig) {
|
|
221
|
+
this.personalFilters = [...this.filters];
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
const { filters: personalFilters } = this.personalConfig;
|
|
225
|
+
if (personalFilters) {
|
|
226
|
+
const xfilters = this.filters.map((filter) => {
|
|
227
|
+
const personalFilter = personalFilters.find(pFilter => pFilter.name == filter.name);
|
|
228
|
+
return personalFilter ? { ...filter, ...personalFilter } : filter;
|
|
229
|
+
});
|
|
230
|
+
function reorderList(a, b) {
|
|
231
|
+
// 결과 배열 초기화, a 배열 길이만큼 undefined로 채움
|
|
232
|
+
const result = new Array(a.length);
|
|
233
|
+
// b 배열에 없는 아이템은 원래 위치로 채움
|
|
234
|
+
a.forEach((item, index) => {
|
|
235
|
+
if (!item.name || !b.find(bi => bi.name == item.name)) {
|
|
236
|
+
result[index] = item;
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
b.forEach(item => {
|
|
240
|
+
const ai = a.find(ai => ai.name == item.name);
|
|
241
|
+
if (ai) {
|
|
242
|
+
result[result.findIndex(slot => slot === undefined)] = ai;
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
return result;
|
|
246
|
+
}
|
|
247
|
+
// 배열 재정렬 실행
|
|
248
|
+
this.personalFilters = reorderList(xfilters, personalFilters);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
this.autoUpdateTargetsOnChange = {};
|
|
252
|
+
(_a = this.personalFilters) === null || _a === void 0 ? void 0 : _a.filter(filter => filter.boundTo && filter.boundTo.length > 0).map(({ name, boundTo }) => {
|
|
253
|
+
boundTo.forEach(to => {
|
|
254
|
+
const origin = this.autoUpdateTargetsOnChange[to] || [];
|
|
255
|
+
if (name && !origin.includes(name)) {
|
|
256
|
+
this.autoUpdateTargetsOnChange[to] = [...origin, name];
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
if (!this.urlParamsSensitive) {
|
|
261
|
+
this.value = await this.getQueryFilters();
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
getFieldByName(name) {
|
|
265
|
+
return this.renderRoot.querySelector(`[name=${name}]`);
|
|
178
266
|
}
|
|
179
267
|
async getQueryFilters() {
|
|
180
268
|
const formData = new FormData(await this.form);
|
|
181
|
-
var filters = this.
|
|
269
|
+
var filters = (this.personalFilters || [])
|
|
182
270
|
.map((filter) => {
|
|
183
271
|
const { name, type, operator } = filter;
|
|
184
272
|
var value = formData.getAll(name);
|
|
@@ -212,12 +300,50 @@ let OxFiltersFormBase = class OxFiltersFormBase extends LitElement {
|
|
|
212
300
|
.filter(result => result !== undefined);
|
|
213
301
|
return filters;
|
|
214
302
|
}
|
|
303
|
+
reset(value) {
|
|
304
|
+
this.form
|
|
305
|
+
.then((form) => {
|
|
306
|
+
if (value) {
|
|
307
|
+
if (value instanceof Array) {
|
|
308
|
+
value
|
|
309
|
+
.filter(item => typeof item == 'string')
|
|
310
|
+
.forEach(item => {
|
|
311
|
+
const field = this.getFieldByName(item);
|
|
312
|
+
if (field) {
|
|
313
|
+
;
|
|
314
|
+
field.value = '';
|
|
315
|
+
}
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
const keys = Object.keys(value);
|
|
320
|
+
keys
|
|
321
|
+
.filter(key => typeof key == 'string')
|
|
322
|
+
.forEach(key => {
|
|
323
|
+
const field = this.getFieldByName(key);
|
|
324
|
+
if (field) {
|
|
325
|
+
;
|
|
326
|
+
field.value = value[key];
|
|
327
|
+
}
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
form.reset();
|
|
333
|
+
}
|
|
334
|
+
})
|
|
335
|
+
.catch((error) => {
|
|
336
|
+
console.error('Error resetting the form:', error);
|
|
337
|
+
});
|
|
338
|
+
}
|
|
215
339
|
};
|
|
216
340
|
OxFiltersFormBase.styles = [
|
|
341
|
+
MDTypeScaleStyles,
|
|
217
342
|
FilterStyles,
|
|
218
343
|
css `
|
|
219
344
|
:host {
|
|
220
345
|
display: flex;
|
|
346
|
+
padding: var(--spacing-small);
|
|
221
347
|
}
|
|
222
348
|
|
|
223
349
|
form {
|
|
@@ -225,13 +351,13 @@ OxFiltersFormBase.styles = [
|
|
|
225
351
|
|
|
226
352
|
display: flex;
|
|
227
353
|
flex-flow: row wrap;
|
|
228
|
-
gap: var(--
|
|
354
|
+
gap: var(--spacing-medium) var(--spacing-large);
|
|
229
355
|
}
|
|
230
356
|
|
|
231
357
|
form > * {
|
|
232
358
|
display: flex;
|
|
233
359
|
align-items: center;
|
|
234
|
-
gap: var(--
|
|
360
|
+
gap: var(--spacing-small, 4px);
|
|
235
361
|
}
|
|
236
362
|
|
|
237
363
|
label span {
|
|
@@ -239,8 +365,9 @@ OxFiltersFormBase.styles = [
|
|
|
239
365
|
}
|
|
240
366
|
|
|
241
367
|
@media only screen and (max-width: 460px) {
|
|
242
|
-
|
|
243
|
-
|
|
368
|
+
form {
|
|
369
|
+
flex-direction: column;
|
|
370
|
+
flex-flow: column;
|
|
244
371
|
}
|
|
245
372
|
}
|
|
246
373
|
`
|
|
@@ -257,6 +384,15 @@ __decorate([
|
|
|
257
384
|
__decorate([
|
|
258
385
|
property({ type: Boolean, attribute: 'autofocus' })
|
|
259
386
|
], OxFiltersFormBase.prototype, "autofocus", void 0);
|
|
387
|
+
__decorate([
|
|
388
|
+
property({ type: Object })
|
|
389
|
+
], OxFiltersFormBase.prototype, "personalConfigProvider", void 0);
|
|
390
|
+
__decorate([
|
|
391
|
+
state()
|
|
392
|
+
], OxFiltersFormBase.prototype, "personalConfig", void 0);
|
|
393
|
+
__decorate([
|
|
394
|
+
state()
|
|
395
|
+
], OxFiltersFormBase.prototype, "personalFilters", void 0);
|
|
260
396
|
__decorate([
|
|
261
397
|
queryAsync('form')
|
|
262
398
|
], OxFiltersFormBase.prototype, "form", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ox-filters-form-base.js","sourceRoot":"","sources":["../../../src/filters/ox-filters-form-base.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/input/ox-checkbox.js'\nimport '@operato/input/ox-select.js'\nimport '@operato/popup/ox-popup-list.js'\nimport '@operato/input/ox-input-search.js'\n\nimport json5 from 'json5'\nimport { css, html, LitElement, PropertyValues, TemplateResult } from 'lit'\nimport { customElement, property, queryAsync } from 'lit/decorators.js'\n\nimport { getDefaultValue } from '@operato/time-calculator'\n\nimport { FilterStyles } from './filter-styles.js'\nimport { getFilterRenderer } from './registry.js'\nimport { FilterConfig, FilterOperator, FilterValue } from '../types.js'\n\nexport type QueryFilterRangeValue = [from: number, to: number]\n\n@customElement('ox-filters-form-base')\nexport class OxFiltersFormBase extends LitElement {\n static styles = [\n FilterStyles,\n css`\n :host {\n display: flex;\n }\n\n form {\n flex: 1;\n\n display: flex;\n flex-flow: row wrap;\n gap: var(--ox-filters-form-gap);\n }\n\n form > * {\n display: flex;\n align-items: center;\n gap: var(--input-intra-gap, 7px);\n }\n\n label span {\n display: block;\n }\n\n @media only screen and (max-width: 460px) {\n label[between] {\n display: block;\n }\n }\n `\n ]\n\n @property({ type: Array }) value: FilterValue[] = []\n @property({ type: Array }) filters: FilterConfig[] = []\n @property({ type: Boolean, attribute: 'url-params-sensitive' }) urlParamsSensitive?: boolean\n @property({ type: Boolean, attribute: 'autofocus' }) autofocus: boolean = true\n\n @queryAsync('form') form!: HTMLFormElement\n\n private _popstateEventHandler?: EventListener\n private _filtersChangeHandler?: EventListener\n\n connectedCallback(): void {\n super.connectedCallback()\n\n this.renderRoot.addEventListener('change', async (e: Event) => {\n const { target, detail: value } = e as CustomEvent\n const name = (target as HTMLInputElement).name\n const {\n label,\n type,\n operator,\n value: defaultValue,\n onchange\n } = this.filters.find(filter => filter.name == name) || {}\n\n const keepGoing = onchange ? onchange.call(null, value ?? (target as HTMLInputElement).value, this) : true\n\n keepGoing &&\n this.dispatchEvent(\n new CustomEvent('filters-change', {\n bubbles: true,\n composed: true,\n detail: {\n filters: this.value,\n from: 'filters-form'\n }\n })\n )\n })\n }\n\n buildDefaultValue(operator: string, defaultValue: any) {\n if (defaultValue === undefined) {\n return\n }\n if (operator == 'between') {\n return (defaultValue as Array<any>).map(v => getDefaultValue(v, this))\n } else {\n return getDefaultValue(defaultValue, this)\n }\n }\n\n render(): TemplateResult {\n return html`\n <form\n @submit=${(e: Event) => {\n e.preventDefault()\n }}\n >\n ${this.filters.map((filter: FilterConfig) => {\n const { name, label, type, operator, value: defaultValue } = filter\n const idx = operator === 'between' ? 1 : 0\n const renderer = getFilterRenderer(\n operator === 'like' || operator === 'i_like' || operator === 'i_nlike' || operator === 'nlike'\n ? 'text'\n : type\n )[idx]\n\n const value =\n this.value?.find(filter => filter.name == name)?.value ?? this.buildDefaultValue(operator!, defaultValue)\n\n if (!renderer) {\n return html``\n }\n\n return type === 'search'\n ? html`<ox-input-search name=\"search\" .value=${value} ?autofocus=${this.autofocus}></ox-input-search>`\n : type === 'boolean' || type === 'checkbox'\n ? renderer(filter, value, this)\n : type !== 'select'\n ? html`\n <label filter-title ?between=${operator == 'between'}\n ><span>${label}</span> ${renderer(filter, value, this)}\n </label>\n `\n : operator === 'in'\n ? html`\n <ox-select\n name=${name}\n placeholder=${label}\n .value=${value}\n @change=${(e: CustomEvent) =>\n e.target?.dispatchEvent(\n new CustomEvent('filter-change', {\n detail: {\n name,\n operator,\n value: e.detail\n }\n })\n )}\n >\n <ox-popup-list multiple attr-selected=\"checked\" with-search>\n ${renderer(filter, value, this)}\n </ox-popup-list>\n </ox-select>\n `\n : html`\n <ox-select\n name=${name}\n placeholder=${label}\n .value=${value}\n @change=${(e: CustomEvent) =>\n e.target?.dispatchEvent(\n new CustomEvent('filter-change', {\n detail: {\n name,\n operator,\n value: e.detail\n }\n })\n )}\n >\n <ox-popup-list with-search> ${renderer(filter, value, this)} </ox-popup-list>\n </ox-select>\n `\n })}\n </form>\n `\n }\n\n getFieldByName(name: string) {\n return this.renderRoot.querySelector(`[name=${name}]`)\n }\n\n async updated(changes: PropertyValues<this>) {\n if (changes.has('urlParamsSensitive')) {\n if (this.urlParamsSensitive) {\n this._popstateEventHandler = () => {\n const queryString = window.location.search\n const urlParams = new URLSearchParams(queryString)\n var filters = urlParams.get('filters')\n\n if (filters) {\n try {\n this.value = json5.parse(filters)\n this.dispatchEvent(\n new CustomEvent('filters-change', {\n bubbles: true,\n composed: true,\n detail: {\n filters: json5.parse(filters),\n from: 'url-parameter'\n }\n })\n )\n } catch (e) {\n console.error(`invalid filters params on URL query string : ${e}`)\n }\n }\n }\n\n //@ts-ignore\n this._popstateEventHandler() // call for the first time\n\n window.addEventListener('popstate', this._popstateEventHandler)\n\n this._filtersChangeHandler = (e: Event) => {\n const urlParams = new URLSearchParams(window.location.search)\n const { filters, from } = (e as CustomEvent).detail || {}\n\n if (from === 'url-parameter') {\n return\n }\n\n if (filters.length > 0) {\n urlParams.set('filters', json5.stringify(filters))\n } else {\n urlParams.delete('filters')\n }\n const queryString = String(urlParams)\n const url = `${window.location.pathname}${queryString ? `?${queryString}` : ''}`\n\n history.pushState({}, document.title, url)\n }\n\n this.addEventListener('filters-change', this._filtersChangeHandler)\n } else {\n if (this._popstateEventHandler) {\n window.removeEventListener('popstate', this._popstateEventHandler)\n }\n if (this._filtersChangeHandler) {\n this.removeEventListener('popstate', this._filtersChangeHandler)\n }\n }\n }\n }\n\n async getQueryFilters(): Promise<FilterValue[]> {\n const formData = new FormData(await this.form)\n\n var filters = this.filters\n .map((filter: FilterConfig) => {\n const { name, type, operator } = filter\n\n var value = formData.getAll(name)\n if (value.length == 0) {\n return\n }\n\n if (-1 === value.findIndex(v => v !== '')) {\n return\n }\n\n const filterValue = value.map(v => {\n const value = v.toString()\n\n /* TODO registry에서 타입별로 parsing 방법을 지정할 수 있도록 해야한다. */\n switch (type) {\n case 'integer':\n case 'float':\n case 'number':\n case 'progress':\n case 'checkbox':\n case 'boolean':\n return !value ? undefined : JSON.parse(value)\n default:\n return value\n }\n })\n\n return {\n name,\n operator,\n value: filterValue.length === 1 ? filterValue[0] : filterValue\n }\n })\n .filter(result => result !== undefined) as FilterValue[]\n\n return filters\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ox-filters-form-base.js","sourceRoot":"","sources":["../../../src/filters/ox-filters-form-base.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/input/ox-checkbox.js'\nimport '@operato/input/ox-select.js'\nimport '@operato/popup/ox-popup-list.js'\nimport '@operato/input/ox-input-search.js'\n\nimport json5 from 'json5'\nimport { css, html, LitElement, nothing, PropertyValues, TemplateResult } from 'lit'\nimport { customElement, property, queryAsync, state } from 'lit/decorators.js'\nimport { styles as MDTypeScaleStyles } from '@material/web/typography/md-typescale-styles'\n\nimport { getDefaultValue } from '@operato/time-calculator'\nimport { PagePreferenceProvider } from '@operato/p13n'\n\nimport { FilterStyles } from './filter-styles.js'\nimport { getFilterRenderer } from './registry.js'\nimport { FilterConfig, FilterOperator, FilterSelectRenderer, FilterValue, PersonalFilterPreference } from '../types.js'\n\nexport type QueryFilterRangeValue = [from: number, to: number]\n\n@customElement('ox-filters-form-base')\nexport class OxFiltersFormBase extends LitElement {\n static styles = [\n MDTypeScaleStyles,\n FilterStyles,\n css`\n :host {\n display: flex;\n padding: var(--spacing-small);\n }\n\n form {\n flex: 1;\n\n display: flex;\n flex-flow: row wrap;\n gap: var(--spacing-medium) var(--spacing-large);\n }\n\n form > * {\n display: flex;\n align-items: center;\n gap: var(--spacing-small, 4px);\n }\n\n label span {\n display: block;\n }\n\n @media only screen and (max-width: 460px) {\n form {\n flex-direction: column;\n flex-flow: column;\n }\n }\n `\n ]\n\n @property({ type: Array }) value: FilterValue[] = []\n @property({ type: Array }) filters: FilterConfig[] = []\n @property({ type: Boolean, attribute: 'url-params-sensitive' }) urlParamsSensitive?: boolean\n @property({ type: Boolean, attribute: 'autofocus' }) autofocus: boolean = true\n @property({ type: Object }) personalConfigProvider?: PagePreferenceProvider\n\n @state() personalConfig?: PersonalFilterPreference\n @state() personalFilters?: FilterConfig[]\n\n @queryAsync('form') form!: HTMLFormElement\n\n private _popstateEventHandler?: EventListener\n private _filtersChangeHandler?: EventListener\n private autoUpdateTargetsOnChange: { [name: string]: string[] } = {}\n\n connectedCallback(): void {\n super.connectedCallback()\n\n this.renderRoot.addEventListener('change', async (e: Event) => {\n const { target, detail: value } = e as CustomEvent\n const name = (target as HTMLInputElement).name\n const {\n label,\n type,\n operator,\n value: defaultValue,\n onchange\n } = (this.personalFilters || []).find(filter => filter.name == name) || {}\n\n if (this.autoUpdateTargetsOnChange[name]) {\n /* \n 일단은 심플하게, boundTo로 연결된 필터값이 바뀌면, 폼 전체를 update하도록 함.\n */\n ;(this.autoUpdateTargetsOnChange[name] || []).forEach(name => {\n const target = this.renderRoot.querySelector(`[name='${name}']`)\n if (target) {\n ;(target as HTMLInputElement).value = ''\n }\n })\n\n this.requestUpdate()\n }\n\n const keepGoing = onchange ? await onchange.call(null, value ?? (target as HTMLInputElement).value, this) : true\n\n this.value = await this.getQueryFilters()\n\n keepGoing &&\n this.dispatchEvent(\n new CustomEvent('filters-change', {\n bubbles: true,\n composed: true,\n detail: {\n filters: this.value,\n from: 'filters-form'\n }\n })\n )\n })\n }\n\n buildDefaultValue(operator: FilterOperator, defaultValue: any) {\n if (defaultValue === undefined) {\n return\n }\n if (operator == 'between') {\n return defaultValue instanceof Array && (defaultValue as Array<any>).map(v => getDefaultValue(v, this))\n } else {\n return getDefaultValue(defaultValue, this)\n }\n }\n\n render(): TemplateResult {\n return html`\n <form\n class=\"md-typescale-body-medium-prominent\"\n @submit=${(e: Event) => {\n e.preventDefault()\n }}\n >\n ${(this.personalFilters || [])\n .filter(filter => !filter.hidden)\n .map((filter: FilterConfig) => {\n const { name, label, type, operator, readonly, value: defaultValue } = filter\n const idx = operator === 'between' ? 1 : 0\n const renderer = getFilterRenderer(\n operator === 'like' || operator === 'i_like' || operator === 'i_nlike' || operator === 'nlike'\n ? 'text'\n : type\n )[idx]\n\n const value =\n this.value?.find(filter => filter.name == name)?.value ?? this.buildDefaultValue(operator!, defaultValue)\n\n if (!renderer) {\n return nothing\n }\n\n return type === 'search'\n ? html`<ox-input-search\n name=\"search\"\n .value=${value}\n ?autofocus=${this.autofocus}\n ?readonly=${readonly}\n ></ox-input-search>`\n : type === 'boolean' || type === 'checkbox'\n ? renderer(filter, value, this)\n : type !== 'select'\n ? html`\n <label filter-title ?between=${operator == 'between'}\n ><span>${label}</span> ${renderer(filter, value, this)}\n </label>\n `\n : this.renderSelect(filter, value, renderer)\n })}\n </form>\n\n <slot name=\"setting\"></slot>\n `\n }\n\n renderSelect(filter: FilterConfig, value: any, renderer: FilterSelectRenderer) {\n const { name, label, operator, readonly, value: defaultValue } = filter\n\n return operator === 'in'\n ? html`\n <ox-select\n name=${name}\n placeholder=${label}\n .value=${value ?? defaultValue}\n @change=${(e: CustomEvent) =>\n e.target?.dispatchEvent(\n new CustomEvent('filter-change', {\n detail: {\n name,\n operator,\n value: e.detail\n }\n })\n )}\n ?readonly=${readonly}\n >\n <ox-popup-list multiple attr-selected=\"checked\" with-search>\n ${renderer(filter, value, this)}\n </ox-popup-list>\n </ox-select>\n `\n : html`\n <ox-select\n name=${name}\n placeholder=${label}\n .value=${value ?? defaultValue}\n @change=${(e: CustomEvent) =>\n e.target?.dispatchEvent(\n new CustomEvent('filter-change', {\n detail: {\n name,\n operator,\n value: e.detail\n }\n })\n )}\n ?readonly=${readonly}\n >\n <ox-popup-list with-search> ${renderer(filter, value, this)} </ox-popup-list>\n </ox-select>\n `\n }\n\n async updated(changes: PropertyValues<this>) {\n if (changes.has('urlParamsSensitive')) {\n if (this.urlParamsSensitive) {\n this._popstateEventHandler = () => {\n const queryString = window.location.search\n const urlParams = new URLSearchParams(queryString)\n var filters = urlParams.get('filters')\n\n if (filters) {\n try {\n this.value = json5.parse(filters)\n this.dispatchEvent(\n new CustomEvent('filters-change', {\n bubbles: true,\n composed: true,\n detail: {\n filters: json5.parse(filters),\n from: 'url-parameter'\n }\n })\n )\n } catch (e) {\n console.error(`invalid filters params on URL query string : ${e}`)\n }\n }\n }\n\n //@ts-ignore\n this._popstateEventHandler() // call for the first time\n\n window.addEventListener('popstate', this._popstateEventHandler)\n\n this._filtersChangeHandler = (e: Event) => {\n const urlParams = new URLSearchParams(window.location.search)\n const { filters, from } = (e as CustomEvent).detail || {}\n\n if (from === 'url-parameter') {\n return\n }\n\n if (filters.length > 0) {\n urlParams.set('filters', json5.stringify(filters))\n } else {\n urlParams.delete('filters')\n }\n const queryString = String(urlParams)\n const url = `${window.location.pathname}${queryString ? `?${queryString}` : ''}`\n\n history.pushState({}, document.title, url)\n }\n\n this.addEventListener('filters-change', this._filtersChangeHandler)\n } else {\n if (this._popstateEventHandler) {\n window.removeEventListener('popstate', this._popstateEventHandler)\n }\n if (this._filtersChangeHandler) {\n this.removeEventListener('popstate', this._filtersChangeHandler)\n }\n }\n }\n\n if (changes.has('personalConfigProvider') && this.personalConfigProvider) {\n this.personalConfig = await this.personalConfigProvider.load()\n } else if (changes.has('filters') || changes.has('personalConfig')) {\n this.applyUpdatedConfiguration()\n }\n }\n\n async applyUpdatedConfiguration() {\n if (!this.filters) {\n return\n }\n\n if (!this.personalConfig) {\n this.personalFilters = [...this.filters]\n } else {\n const { filters: personalFilters } = this.personalConfig\n\n if (personalFilters) {\n const xfilters = this.filters.map((filter: Partial<FilterConfig>) => {\n const personalFilter = personalFilters.find(pFilter => pFilter.name == filter.name)\n return personalFilter ? { ...filter, ...personalFilter } : filter\n })\n\n function reorderList(a: Partial<FilterConfig>[], b: Partial<FilterConfig>[]): Partial<FilterConfig>[] {\n // 결과 배열 초기화, a 배열 길이만큼 undefined로 채움\n const result = new Array(a.length)\n\n // b 배열에 없는 아이템은 원래 위치로 채움\n a.forEach((item, index) => {\n if (!item.name || !b.find(bi => bi.name == item.name)) {\n result[index] = item\n }\n })\n\n b.forEach(item => {\n const ai = a.find(ai => ai.name == item.name)\n if (ai) {\n result[result.findIndex(slot => slot === undefined)] = ai\n }\n })\n\n return result\n }\n\n // 배열 재정렬 실행\n this.personalFilters = reorderList(xfilters as any, personalFilters as any) as FilterConfig[]\n }\n }\n\n this.autoUpdateTargetsOnChange = {}\n\n this.personalFilters\n ?.filter(filter => filter.boundTo && filter.boundTo.length > 0)\n .map(({ name, boundTo }) => {\n boundTo!.forEach(to => {\n const origin = this.autoUpdateTargetsOnChange[to] || []\n if (name && !origin.includes(name)) {\n this.autoUpdateTargetsOnChange[to] = [...origin, name]\n }\n })\n })\n\n if (!this.urlParamsSensitive) {\n this.value = await this.getQueryFilters()\n }\n }\n\n getFieldByName(name: string) {\n return this.renderRoot.querySelector(`[name=${name}]`)\n }\n\n async getQueryFilters(): Promise<FilterValue[]> {\n const formData = new FormData(await this.form)\n\n var filters = (this.personalFilters || [])\n .map((filter: FilterConfig) => {\n const { name, type, operator } = filter\n\n var value = formData.getAll(name)\n if (value.length == 0) {\n return\n }\n\n if (-1 === value.findIndex(v => v !== '')) {\n return\n }\n\n const filterValue = value.map(v => {\n const value = v.toString()\n\n /* TODO registry에서 타입별로 parsing 방법을 지정할 수 있도록 해야한다. */\n switch (type) {\n case 'integer':\n case 'float':\n case 'number':\n case 'progress':\n case 'checkbox':\n case 'boolean':\n return !value ? undefined : JSON.parse(value)\n default:\n return value\n }\n })\n\n return {\n name,\n operator,\n value: filterValue.length === 1 ? filterValue[0] : filterValue\n }\n })\n .filter(result => result !== undefined) as FilterValue[]\n\n return filters\n }\n\n reset(value?: string[] | { [field: string]: any }) {\n this.form\n .then((form: HTMLFormElement) => {\n if (value) {\n if (value instanceof Array) {\n value\n .filter(item => typeof item == 'string')\n .forEach(item => {\n const field = this.getFieldByName(item)\n if (field) {\n ;(field as HTMLInputElement).value = ''\n }\n })\n } else {\n const keys = Object.keys(value)\n keys\n .filter(key => typeof key == 'string')\n .forEach(key => {\n const field = this.getFieldByName(key)\n if (field) {\n ;(field as HTMLInputElement).value = value[key]\n }\n })\n }\n } else {\n form.reset()\n }\n })\n .catch((error: any) => {\n console.error('Error resetting the form:', error)\n })\n }\n}\n"]}
|
|
@@ -22,7 +22,7 @@ export const MultiColumnFormStyles = css `
|
|
|
22
22
|
|
|
23
23
|
padding: var(--legend-padding);
|
|
24
24
|
font: var(--legend-font);
|
|
25
|
-
color: var(--legend-text-color);
|
|
25
|
+
color: var(--legend-text-color, var(--md-sys-color-on-surface-variant));
|
|
26
26
|
border-bottom: var(--legend-border-bottom);
|
|
27
27
|
}
|
|
28
28
|
|
|
@@ -32,7 +32,7 @@ export const MultiColumnFormStyles = css `
|
|
|
32
32
|
text-transform: capitalize;
|
|
33
33
|
align-self: center;
|
|
34
34
|
|
|
35
|
-
color: var(--label-color);
|
|
35
|
+
color: var(--label-color, var(--md-sys-color-on-surface));
|
|
36
36
|
font: var(--label-font);
|
|
37
37
|
}
|
|
38
38
|
|
|
@@ -71,7 +71,7 @@ export const MultiColumnFormStyles = css `
|
|
|
71
71
|
grid-column: span 9 / auto;
|
|
72
72
|
|
|
73
73
|
font: var(--form-sublabel-font);
|
|
74
|
-
color: var(--form-sublabel-color);
|
|
74
|
+
color: var(--form-sublabel-color, var(--md-sys-color-on-surface));
|
|
75
75
|
}
|
|
76
76
|
.multi-column-form [options-wrap] {
|
|
77
77
|
grid-column: span 21 / auto;
|
|
@@ -79,7 +79,7 @@ export const MultiColumnFormStyles = css `
|
|
|
79
79
|
|
|
80
80
|
input:focus {
|
|
81
81
|
outline: none;
|
|
82
|
-
border: 1px solid var(--focus-background-color);
|
|
82
|
+
border: 1px solid var(--focus-background-color, var(--md-sys-color-surface-variant));
|
|
83
83
|
}
|
|
84
84
|
input[type='checkbox'] {
|
|
85
85
|
margin: 0;
|
|
@@ -108,7 +108,7 @@ export const MultiColumnFormStyles = css `
|
|
|
108
108
|
.multi-column-form [custom-input] {
|
|
109
109
|
grid-column: span 8 / auto;
|
|
110
110
|
max-width: initial;
|
|
111
|
-
padding: var(--padding-default);
|
|
111
|
+
padding: var(--padding-default, var(--spacing-medium));
|
|
112
112
|
font: normal 15px var(--theme-font);
|
|
113
113
|
}
|
|
114
114
|
.multi-column-form input[type='checkbox'],
|
|
@@ -130,7 +130,7 @@ export const MultiColumnFormStyles = css `
|
|
|
130
130
|
.multi-column-form [options-wrap] {
|
|
131
131
|
grid-column: span 12 / auto;
|
|
132
132
|
display: grid;
|
|
133
|
-
grid-gap: var(--padding-default) var(--padding-narrow);
|
|
133
|
+
grid-gap: var(--padding-default, var(--spacing-small)) var(--padding-narrow, var(--spacing-small));
|
|
134
134
|
grid-template-columns: repeat(12, 1fr);
|
|
135
135
|
}
|
|
136
136
|
.multi-column-form [options-wrap] input[type='checkbox'] + label,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi-column-form-styles.js","sourceRoot":"","sources":["../../../src/styles/multi-column-form-styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAEzB,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6LvC,CAAA","sourcesContent":["import { css } from 'lit'\n\nexport const MultiColumnFormStyles = css`\n :host {\n overflow: auto;\n padding: var(--form-container-padding);\n }\n\n .multi-column-form {\n display: grid;\n grid-template-columns: repeat(24, 1fr);\n grid-gap: var(--form-grid-gap);\n grid-auto-rows: minmax(24px, auto);\n max-width: var(--form-multi-column-max-width);\n margin: var(--form-margin);\n }\n .multi-column-form fieldset {\n display: contents;\n }\n .multi-column-form legend {\n grid-column: span 24;\n text-transform: capitalize;\n\n padding: var(--legend-padding);\n font: var(--legend-font);\n color: var(--legend-text-color);\n border-bottom: var(--legend-border-bottom);\n }\n\n .multi-column-form label {\n grid-column: span 3;\n text-align: right;\n text-transform: capitalize;\n align-self: center;\n\n color: var(--label-color);\n font: var(--label-font);\n }\n\n .multi-column-form input,\n .multi-column-form table,\n .multi-column-form select,\n .multi-column-form textarea,\n .multi-column-form [custom-input] {\n grid-column: span 9;\n\n border: var(--input-field-border);\n border-radius: var(--input-field-border-radius);\n padding: var(--input-field-padding);\n font: var(--input-field-font);\n max-width: 85%;\n }\n .multi-column-form select {\n min-height: 25px;\n max-width: calc(85% + 18px);\n }\n\n .multi-column-form input[type='checkbox'],\n .multi-column-form input[type='radio'] {\n justify-self: end;\n align-self: center;\n grid-column: span 3 / auto;\n position: relative;\n left: 17px;\n }\n\n .multi-column-form input[type='checkbox'] + label,\n .multi-column-form input[type='radio'] + label {\n padding-left: 17px;\n text-align: left;\n align-self: center;\n grid-column: span 9 / auto;\n\n font: var(--form-sublabel-font);\n color: var(--form-sublabel-color);\n }\n .multi-column-form [options-wrap] {\n grid-column: span 21 / auto;\n }\n\n input:focus {\n outline: none;\n border: 1px solid var(--focus-background-color);\n }\n input[type='checkbox'] {\n margin: 0;\n }\n\n @media screen and (max-width: 460px) {\n .multi-column-form {\n max-width: 100%;\n grid-template-columns: repeat(12, 1fr);\n grid-gap: 5px;\n }\n .multi-column-form legend {\n grid-column: span 12;\n }\n .multi-column-form label {\n grid-column: span 4 / auto;\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n }\n .multi-column-form input,\n .multi-column-form table,\n .multi-column-form select,\n .multi-column-form textarea,\n .multi-column-form [custom-input] {\n grid-column: span 8 / auto;\n max-width: initial;\n padding: var(--padding-default);\n font: normal 15px var(--theme-font);\n }\n .multi-column-form input[type='checkbox'],\n .multi-column-form input[type='radio'] {\n justify-self: left;\n align-self: center;\n grid-column: span 1 / auto;\n left: 0;\n zoom: 1.4;\n }\n\n .multi-column-form input[type='checkbox'] + label,\n .multi-column-form input[type='radio'] + label {\n grid-column: span 11 / auto;\n align-self: center;\n position: relative;\n left: -25px;\n }\n .multi-column-form [options-wrap] {\n grid-column: span 12 / auto;\n display: grid;\n grid-gap: var(--padding-default) var(--padding-narrow);\n grid-template-columns: repeat(12, 1fr);\n }\n .multi-column-form [options-wrap] input[type='checkbox'] + label,\n .multi-column-form [options-wrap] input[type='radio'] + label {\n grid-column: span 5 / auto;\n align-self: left;\n left: -4%;\n margin-right: 0;\n }\n }\n @media (min-width: 481px) and (max-width: 1024px) {\n .multi-column-form select {\n max-width: calc(85% + 10px);\n }\n }\n @media screen and (min-width: 1201px) and (max-width: 2000px) {\n .multi-column-form {\n grid-template-columns: repeat(36, 1fr);\n }\n .multi-column-form legend {\n grid-column: span 36;\n }\n .multi-column-form input,\n .multi-column-form table,\n .multi-column-form select,\n .multi-column-form textarea,\n .multi-column-form [custom-input] {\n max-width: 90%;\n }\n .multi-column-form select {\n max-width: calc(90% + 18px);\n }\n .multi-column-form [options-wrap] {\n grid-column: span 33 / auto;\n }\n }\n @media screen and (min-width: 2001px) {\n .multi-column-form {\n grid-template-columns: repeat(48, 1fr);\n }\n .multi-column-form legend {\n grid-column: span 48;\n }\n .multi-column-form input,\n .multi-column-form table,\n .multi-column-form select,\n .multi-column-form textarea,\n .multi-column-form [custom-input] {\n max-width: 90%;\n }\n .multi-column-form select {\n max-width: calc(90% + 18px);\n }\n .multi-column-form [options-wrap] {\n grid-column: span 45 / auto;\n }\n }\n`\n"]}
|
|
1
|
+
{"version":3,"file":"multi-column-form-styles.js","sourceRoot":"","sources":["../../../src/styles/multi-column-form-styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAEzB,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6LvC,CAAA","sourcesContent":["import { css } from 'lit'\n\nexport const MultiColumnFormStyles = css`\n :host {\n overflow: auto;\n padding: var(--form-container-padding);\n }\n\n .multi-column-form {\n display: grid;\n grid-template-columns: repeat(24, 1fr);\n grid-gap: var(--form-grid-gap);\n grid-auto-rows: minmax(24px, auto);\n max-width: var(--form-multi-column-max-width);\n margin: var(--form-margin);\n }\n .multi-column-form fieldset {\n display: contents;\n }\n .multi-column-form legend {\n grid-column: span 24;\n text-transform: capitalize;\n\n padding: var(--legend-padding);\n font: var(--legend-font);\n color: var(--legend-text-color, var(--md-sys-color-on-surface-variant));\n border-bottom: var(--legend-border-bottom);\n }\n\n .multi-column-form label {\n grid-column: span 3;\n text-align: right;\n text-transform: capitalize;\n align-self: center;\n\n color: var(--label-color, var(--md-sys-color-on-surface));\n font: var(--label-font);\n }\n\n .multi-column-form input,\n .multi-column-form table,\n .multi-column-form select,\n .multi-column-form textarea,\n .multi-column-form [custom-input] {\n grid-column: span 9;\n\n border: var(--input-field-border);\n border-radius: var(--input-field-border-radius);\n padding: var(--input-field-padding);\n font: var(--input-field-font);\n max-width: 85%;\n }\n .multi-column-form select {\n min-height: 25px;\n max-width: calc(85% + 18px);\n }\n\n .multi-column-form input[type='checkbox'],\n .multi-column-form input[type='radio'] {\n justify-self: end;\n align-self: center;\n grid-column: span 3 / auto;\n position: relative;\n left: 17px;\n }\n\n .multi-column-form input[type='checkbox'] + label,\n .multi-column-form input[type='radio'] + label {\n padding-left: 17px;\n text-align: left;\n align-self: center;\n grid-column: span 9 / auto;\n\n font: var(--form-sublabel-font);\n color: var(--form-sublabel-color, var(--md-sys-color-on-surface));\n }\n .multi-column-form [options-wrap] {\n grid-column: span 21 / auto;\n }\n\n input:focus {\n outline: none;\n border: 1px solid var(--focus-background-color, var(--md-sys-color-surface-variant));\n }\n input[type='checkbox'] {\n margin: 0;\n }\n\n @media screen and (max-width: 460px) {\n .multi-column-form {\n max-width: 100%;\n grid-template-columns: repeat(12, 1fr);\n grid-gap: 5px;\n }\n .multi-column-form legend {\n grid-column: span 12;\n }\n .multi-column-form label {\n grid-column: span 4 / auto;\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n }\n .multi-column-form input,\n .multi-column-form table,\n .multi-column-form select,\n .multi-column-form textarea,\n .multi-column-form [custom-input] {\n grid-column: span 8 / auto;\n max-width: initial;\n padding: var(--padding-default, var(--spacing-medium));\n font: normal 15px var(--theme-font);\n }\n .multi-column-form input[type='checkbox'],\n .multi-column-form input[type='radio'] {\n justify-self: left;\n align-self: center;\n grid-column: span 1 / auto;\n left: 0;\n zoom: 1.4;\n }\n\n .multi-column-form input[type='checkbox'] + label,\n .multi-column-form input[type='radio'] + label {\n grid-column: span 11 / auto;\n align-self: center;\n position: relative;\n left: -25px;\n }\n .multi-column-form [options-wrap] {\n grid-column: span 12 / auto;\n display: grid;\n grid-gap: var(--padding-default, var(--spacing-small)) var(--padding-narrow, var(--spacing-small));\n grid-template-columns: repeat(12, 1fr);\n }\n .multi-column-form [options-wrap] input[type='checkbox'] + label,\n .multi-column-form [options-wrap] input[type='radio'] + label {\n grid-column: span 5 / auto;\n align-self: left;\n left: -4%;\n margin-right: 0;\n }\n }\n @media (min-width: 481px) and (max-width: 1024px) {\n .multi-column-form select {\n max-width: calc(85% + 10px);\n }\n }\n @media screen and (min-width: 1201px) and (max-width: 2000px) {\n .multi-column-form {\n grid-template-columns: repeat(36, 1fr);\n }\n .multi-column-form legend {\n grid-column: span 36;\n }\n .multi-column-form input,\n .multi-column-form table,\n .multi-column-form select,\n .multi-column-form textarea,\n .multi-column-form [custom-input] {\n max-width: 90%;\n }\n .multi-column-form select {\n max-width: calc(90% + 18px);\n }\n .multi-column-form [options-wrap] {\n grid-column: span 33 / auto;\n }\n }\n @media screen and (min-width: 2001px) {\n .multi-column-form {\n grid-template-columns: repeat(48, 1fr);\n }\n .multi-column-form legend {\n grid-column: span 48;\n }\n .multi-column-form input,\n .multi-column-form table,\n .multi-column-form select,\n .multi-column-form textarea,\n .multi-column-form [custom-input] {\n max-width: 90%;\n }\n .multi-column-form select {\n max-width: calc(90% + 18px);\n }\n .multi-column-form [options-wrap] {\n grid-column: span 45 / auto;\n }\n }\n`\n"]}
|
|
@@ -2,17 +2,16 @@ import { css } from 'lit';
|
|
|
2
2
|
export const SearchFormStyles = css `
|
|
3
3
|
:host {
|
|
4
4
|
overflow: auto;
|
|
5
|
-
background-color:
|
|
5
|
+
background-color: transparent;
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
.search-form {
|
|
9
9
|
position: relative;
|
|
10
10
|
display: grid;
|
|
11
11
|
grid-template-columns: repeat(24, 1fr);
|
|
12
|
-
grid-gap: var(--form-grid-gap);
|
|
12
|
+
grid-gap: var(--form-grid-gap, var(--spacing-medium));
|
|
13
13
|
grid-auto-rows: minmax(24px, auto);
|
|
14
|
-
|
|
15
|
-
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
|
|
14
|
+
background-color: var(--search-form-background-color, var(--md-sys-color-surface));
|
|
16
15
|
}
|
|
17
16
|
.search-form label {
|
|
18
17
|
grid-column: span 3;
|
|
@@ -20,8 +19,8 @@ export const SearchFormStyles = css `
|
|
|
20
19
|
align-self: center;
|
|
21
20
|
text-transform: capitalize;
|
|
22
21
|
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
font-size: var(--md-sys-typescale-label-large-size, 0.875rem);
|
|
23
|
+
color: var(--md-sys-color-on-primary-container);
|
|
25
24
|
}
|
|
26
25
|
|
|
27
26
|
.search-form input,
|
|
@@ -29,12 +28,13 @@ export const SearchFormStyles = css `
|
|
|
29
28
|
grid-column: span 9;
|
|
30
29
|
|
|
31
30
|
border: var(--input-field-border);
|
|
31
|
+
border-bottom: 1px solid rgba(0, 0, 0, 0.2);
|
|
32
32
|
border-radius: var(--input-field-border-radius);
|
|
33
|
-
padding: var(--input-field-padding);
|
|
33
|
+
padding: var(--input-field-padding, var(--spacing-tiny));
|
|
34
34
|
font: var(--input-field-font);
|
|
35
35
|
max-width: 85%;
|
|
36
|
-
color: var(--input-field-color);
|
|
37
|
-
background-color:
|
|
36
|
+
color: var(--input-field-color, var(--md-sys-color-on-surface-variant));
|
|
37
|
+
background-color: transparent;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
.search-form select {
|
|
@@ -59,13 +59,13 @@ export const SearchFormStyles = css `
|
|
|
59
59
|
grid-column: span 9 / auto;
|
|
60
60
|
|
|
61
61
|
font: var(--form-sublabel-font);
|
|
62
|
-
color: var(--form-sublabel-color);
|
|
62
|
+
color: var(--form-sublabel-color, var(--md-sys-color-on-surface-variant));
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
input:focus {
|
|
66
66
|
outline: none;
|
|
67
|
-
border: 1px solid var(--focus-background-color);
|
|
68
67
|
}
|
|
68
|
+
|
|
69
69
|
input[type='checkbox'] {
|
|
70
70
|
margin: 0;
|
|
71
71
|
}
|
|
@@ -74,14 +74,19 @@ export const SearchFormStyles = css `
|
|
|
74
74
|
position: absolute;
|
|
75
75
|
right: 1%;
|
|
76
76
|
bottom: 15px;
|
|
77
|
-
color: var(--search-form-icon-color);
|
|
77
|
+
color: var(--search-form-icon-color, var(--md-sys-color-on-surface-variant));
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
input[readonly],
|
|
81
|
+
select[readonly] {
|
|
82
|
+
background-color: #f0f0f0;
|
|
78
83
|
}
|
|
79
84
|
|
|
80
85
|
@media screen and (max-width: 460px) {
|
|
81
86
|
.search-form {
|
|
82
87
|
grid-template-columns: repeat(12, 1fr);
|
|
83
|
-
grid-gap:
|
|
84
|
-
background-color:
|
|
88
|
+
grid-gap: var(--spacing-medium) var(--spacing-medium);
|
|
89
|
+
background-color: transparent;
|
|
85
90
|
|
|
86
91
|
max-height: 100%;
|
|
87
92
|
overflow-y: auto;
|
|
@@ -90,13 +95,13 @@ export const SearchFormStyles = css `
|
|
|
90
95
|
grid-column: span 3;
|
|
91
96
|
padding-right: 5px;
|
|
92
97
|
align-self: center;
|
|
93
|
-
color: var(--search-form-narrow-text-color);
|
|
98
|
+
color: var(--search-form-narrow-text-color, var(--md-sys-color-on-surface));
|
|
94
99
|
}
|
|
95
100
|
.search-form input,
|
|
96
101
|
.search-form select {
|
|
97
102
|
grid-column: span 8;
|
|
98
103
|
max-width: 100%;
|
|
99
|
-
color: var(--
|
|
104
|
+
color: var(--md-sys-color-surface, var(--md-sys-color-on-surface));
|
|
100
105
|
}
|
|
101
106
|
.search-form input[type='checkbox'],
|
|
102
107
|
.search-form input[type='radio'] {
|
|
@@ -111,12 +116,12 @@ export const SearchFormStyles = css `
|
|
|
111
116
|
align-self: center;
|
|
112
117
|
position: relative;
|
|
113
118
|
left: 5px;
|
|
114
|
-
color: var(--search-form-narrow-text-color);
|
|
119
|
+
color: var(--search-form-narrow-text-color, var(--md-sys-color-on-surface));
|
|
115
120
|
}
|
|
116
121
|
|
|
117
122
|
[search] {
|
|
118
123
|
right: 3%;
|
|
119
|
-
color: var(--search-form-narrow-text-color);
|
|
124
|
+
color: var(--search-form-narrow-text-color, var(--md-sys-color-on-surface));
|
|
120
125
|
}
|
|
121
126
|
}
|
|
122
127
|
@media (min-width: 461px) and (max-width: 1024px) {
|