@operato/form 2.0.0-alpha.92 → 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.
Files changed (97) hide show
  1. package/CHANGELOG.md +281 -0
  2. package/dist/src/components/ox-custom-input.js +5 -5
  3. package/dist/src/components/ox-custom-input.js.map +1 -1
  4. package/dist/src/components/ox-custom-select.js +2 -1
  5. package/dist/src/components/ox-custom-select.js.map +1 -1
  6. package/dist/src/components/ox-file-uploader.js +1 -1
  7. package/dist/src/components/ox-file-uploader.js.map +1 -1
  8. package/dist/src/components/ox-search-form.d.ts +12 -23
  9. package/dist/src/components/ox-search-form.js +227 -91
  10. package/dist/src/components/ox-search-form.js.map +1 -1
  11. package/dist/src/filters/filter-checkbox.js +2 -1
  12. package/dist/src/filters/filter-checkbox.js.map +1 -1
  13. package/dist/src/filters/filter-input-barcode.js +5 -3
  14. package/dist/src/filters/filter-input-barcode.js.map +1 -1
  15. package/dist/src/filters/filter-input.js +2 -1
  16. package/dist/src/filters/filter-input.js.map +1 -1
  17. package/dist/src/filters/filter-range-date.js +3 -1
  18. package/dist/src/filters/filter-range-date.js.map +1 -1
  19. package/dist/src/filters/filter-range-number.js +3 -1
  20. package/dist/src/filters/filter-range-number.js.map +1 -1
  21. package/dist/src/filters/filter-select.js +23 -11
  22. package/dist/src/filters/filter-select.js.map +1 -1
  23. package/dist/src/filters/filter-styles.js +56 -24
  24. package/dist/src/filters/filter-styles.js.map +1 -1
  25. package/dist/src/filters/ox-filter-personalizer.d.ts +8 -0
  26. package/dist/src/filters/ox-filter-personalizer.js +175 -0
  27. package/dist/src/filters/ox-filter-personalizer.js.map +1 -0
  28. package/dist/src/filters/ox-filters-form-base.d.ts +13 -3
  29. package/dist/src/filters/ox-filters-form-base.js +197 -61
  30. package/dist/src/filters/ox-filters-form-base.js.map +1 -1
  31. package/dist/src/styles/multi-column-form-styles.js +6 -6
  32. package/dist/src/styles/multi-column-form-styles.js.map +1 -1
  33. package/dist/src/styles/search-form-styles.js +23 -18
  34. package/dist/src/styles/search-form-styles.js.map +1 -1
  35. package/dist/src/styles/single-column-form-styles.js +5 -5
  36. package/dist/src/styles/single-column-form-styles.js.map +1 -1
  37. package/dist/src/types.d.ts +42 -2
  38. package/dist/src/types.js.map +1 -1
  39. package/dist/stories/ox-filters-form-barcode.stories.d.ts +5 -0
  40. package/dist/stories/ox-filters-form-barcode.stories.js +51 -12
  41. package/dist/stories/ox-filters-form-barcode.stories.js.map +1 -1
  42. package/dist/stories/ox-filters-form-base-bounded.stories.d.ts +35 -0
  43. package/dist/stories/ox-filters-form-base-bounded.stories.js +187 -0
  44. package/dist/stories/ox-filters-form-base-bounded.stories.js.map +1 -0
  45. package/dist/stories/ox-filters-form-base-change-handler.stories.d.ts +35 -0
  46. package/dist/stories/ox-filters-form-base-change-handler.stories.js +199 -0
  47. package/dist/stories/ox-filters-form-base-change-handler.stories.js.map +1 -0
  48. package/dist/stories/ox-filters-form-base-page-preference.stories.d.ts +31 -0
  49. package/dist/stories/ox-filters-form-base-page-preference.stories.js +173 -0
  50. package/dist/stories/ox-filters-form-base-page-preference.stories.js.map +1 -0
  51. package/dist/stories/ox-filters-form-base.stories.d.ts +5 -0
  52. package/dist/stories/ox-filters-form-base.stories.js +57 -27
  53. package/dist/stories/ox-filters-form-base.stories.js.map +1 -1
  54. package/dist/stories/ox-search-form-change-handler.stories.d.ts +34 -0
  55. package/dist/stories/ox-search-form-change-handler.stories.js +227 -0
  56. package/dist/stories/ox-search-form-change-handler.stories.js.map +1 -0
  57. package/dist/stories/ox-search-form.stories.d.ts +45 -0
  58. package/dist/stories/ox-search-form.stories.js +235 -0
  59. package/dist/stories/ox-search-form.stories.js.map +1 -0
  60. package/dist/tsconfig.tsbuildinfo +1 -1
  61. package/package.json +7 -5
  62. package/src/components/ox-custom-input.ts +5 -5
  63. package/src/components/ox-custom-select.ts +2 -1
  64. package/src/components/ox-file-uploader.ts +1 -1
  65. package/src/components/ox-search-form.ts +231 -97
  66. package/src/filters/filter-checkbox.ts +2 -1
  67. package/src/filters/filter-input-barcode.ts +5 -3
  68. package/src/filters/filter-input.ts +2 -1
  69. package/src/filters/filter-range-date.ts +3 -1
  70. package/src/filters/filter-range-number.ts +3 -1
  71. package/src/filters/filter-select.ts +29 -20
  72. package/src/filters/filter-styles.ts +56 -24
  73. package/src/filters/ox-filter-personalizer.ts +188 -0
  74. package/src/filters/ox-filters-form-base.ts +222 -79
  75. package/src/styles/multi-column-form-styles.ts +6 -6
  76. package/src/styles/search-form-styles.ts +23 -18
  77. package/src/styles/single-column-form-styles.ts +5 -5
  78. package/src/types.ts +48 -2
  79. package/stories/ox-filters-form-barcode.stories.ts +54 -14
  80. package/stories/ox-filters-form-base-bounded.stories.ts +213 -0
  81. package/stories/ox-filters-form-base-change-handler.stories.ts +225 -0
  82. package/stories/ox-filters-form-base-page-preference.stories.ts +192 -0
  83. package/stories/ox-filters-form-base.stories.ts +63 -31
  84. package/stories/ox-search-form-change-handler.stories.ts +252 -0
  85. package/stories/ox-search-form.stories.ts +269 -0
  86. package/themes/dark-hc.css +151 -0
  87. package/themes/dark-mc.css +151 -0
  88. package/themes/dark.css +151 -0
  89. package/themes/grist-theme.css +169 -0
  90. package/themes/light-hc.css +151 -0
  91. package/themes/light-mc.css +151 -0
  92. package/themes/light.css +151 -0
  93. package/themes/md-typescale-styles.css +100 -0
  94. package/themes/spacing.css +43 -0
  95. package/themes/state-color.css +6 -0
  96. package/themes/app-theme.css +0 -145
  97. 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.filters.find(filter => filter.name == name) || {};
25
- const keepGoing = onchange ? onchange.call(null, value !== null && value !== void 0 ? value : target.value, this) : true;
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.filters.map((filter) => {
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 html ``;
84
+ return nothing;
65
85
  }
66
86
  return type === 'search'
67
- ? html `<ox-input-search name="search" .value=${value} ?autofocus=${this.autofocus}></ox-input-search>`
68
- : type === 'boolean'
87
+ ? html `<ox-input-search
88
+ name="search"
89
+ .value=${value}
90
+ ?autofocus=${this.autofocus}
91
+ ?readonly=${readonly}
92
+ ></ox-input-search>`
93
+ : type === 'boolean' || type === 'checkbox'
69
94
  ? renderer(filter, value, this)
70
95
  : type !== 'select'
71
96
  ? html `
72
- <label filter-title ?between=${operator == 'between'}
73
- ><span>${label}</span> ${renderer(filter, value, this)}
74
- </label>
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
- : html `
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
- getFieldByName(name) {
122
- return this.renderRoot.querySelector(`[name=${name}]`);
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.filters
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(--ox-filters-form-gap);
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(--input-intra-gap, 7px);
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
- label[between] {
243
- display: block;
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'\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: var(--search-form-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
- padding: var(--search-form-box-padding);
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
- color: var(--label-color);
24
- font: var(--label-font);
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: var(--input-field-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: 10px 5px;
84
- background-color: var(--search-form-narrow-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(--theme-white-color);
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) {