@operato/form 2.0.0-alpha.0 → 2.0.0-alpha.104

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 (91) hide show
  1. package/CHANGELOG.md +172 -0
  2. package/demo/index.html +14 -3
  3. package/dist/src/components/ox-custom-input.d.ts +1 -1
  4. package/dist/src/components/ox-custom-select.d.ts +1 -1
  5. package/dist/src/components/ox-file-uploader.d.ts +1 -1
  6. package/dist/src/components/ox-file-uploader.js +7 -7
  7. package/dist/src/components/ox-file-uploader.js.map +1 -1
  8. package/dist/src/components/ox-form-paginator.d.ts +1 -1
  9. package/dist/src/components/ox-search-form.d.ts +10 -25
  10. package/dist/src/components/ox-search-form.js +163 -89
  11. package/dist/src/components/ox-search-form.js.map +1 -1
  12. package/dist/src/filters/filter-checkbox.d.ts +1 -1
  13. package/dist/src/filters/filter-checkbox.js +4 -2
  14. package/dist/src/filters/filter-checkbox.js.map +1 -1
  15. package/dist/src/filters/filter-input-barcode.d.ts +1 -1
  16. package/dist/src/filters/filter-input-barcode.js +2 -2
  17. package/dist/src/filters/filter-input-barcode.js.map +1 -1
  18. package/dist/src/filters/filter-input.d.ts +1 -1
  19. package/dist/src/filters/filter-input.js.map +1 -1
  20. package/dist/src/filters/filter-range-date.d.ts +1 -1
  21. package/dist/src/filters/filter-range-date.js +14 -3
  22. package/dist/src/filters/filter-range-date.js.map +1 -1
  23. package/dist/src/filters/filter-range-number.d.ts +1 -1
  24. package/dist/src/filters/filter-range-number.js.map +1 -1
  25. package/dist/src/filters/filter-select.d.ts +1 -1
  26. package/dist/src/filters/filter-select.js +23 -11
  27. package/dist/src/filters/filter-select.js.map +1 -1
  28. package/dist/src/filters/filter-styles.js +38 -28
  29. package/dist/src/filters/filter-styles.js.map +1 -1
  30. package/dist/src/filters/index.d.ts +1 -1
  31. package/dist/src/filters/index.js +1 -1
  32. package/dist/src/filters/index.js.map +1 -1
  33. package/dist/src/filters/ox-filters-form-base.d.ts +8 -9
  34. package/dist/src/filters/ox-filters-form-base.js +126 -72
  35. package/dist/src/filters/ox-filters-form-base.js.map +1 -1
  36. package/dist/src/filters/registry.d.ts +1 -1
  37. package/dist/src/filters/registry.js.map +1 -1
  38. package/dist/src/styles/search-form-styles.js +1 -1
  39. package/dist/src/styles/search-form-styles.js.map +1 -1
  40. package/dist/src/types.d.ts +59 -0
  41. package/dist/src/types.js.map +1 -0
  42. package/dist/stories/{ox-filter-form-barcode.stories.js → ox-filters-form-barcode.stories.js} +29 -12
  43. package/dist/stories/ox-filters-form-barcode.stories.js.map +1 -0
  44. package/dist/stories/{ox-filter-form-base.stories.d.ts → ox-filters-form-base-bounded.stories.d.ts} +3 -2
  45. package/dist/stories/ox-filters-form-base-bounded.stories.js +182 -0
  46. package/dist/stories/ox-filters-form-base-bounded.stories.js.map +1 -0
  47. package/dist/stories/ox-filters-form-base-change-handler.stories.d.ts +30 -0
  48. package/dist/stories/ox-filters-form-base-change-handler.stories.js +194 -0
  49. package/dist/stories/ox-filters-form-base-change-handler.stories.js.map +1 -0
  50. package/dist/stories/ox-filters-form-base-dependencies.stories.d.ts +30 -0
  51. package/dist/stories/ox-filters-form-base-dependencies.stories.js +182 -0
  52. package/dist/stories/ox-filters-form-base-dependencies.stories.js.map +1 -0
  53. package/dist/stories/ox-filters-form-base.stories.d.ts +30 -0
  54. package/dist/stories/ox-filters-form-base.stories.js +142 -0
  55. package/dist/stories/ox-filters-form-base.stories.js.map +1 -0
  56. package/dist/stories/ox-search-form.stories.d.ts +34 -0
  57. package/dist/stories/ox-search-form.stories.js +219 -0
  58. package/dist/stories/ox-search-form.stories.js.map +1 -0
  59. package/dist/tsconfig.tsbuildinfo +1 -1
  60. package/package.json +17 -16
  61. package/src/components/ox-file-uploader.ts +7 -7
  62. package/src/components/ox-search-form.ts +195 -122
  63. package/src/filters/filter-checkbox.ts +5 -3
  64. package/src/filters/filter-input-barcode.ts +3 -3
  65. package/src/filters/filter-input.ts +1 -1
  66. package/src/filters/filter-range-date.ts +21 -6
  67. package/src/filters/filter-range-number.ts +1 -1
  68. package/src/filters/filter-select.ts +29 -20
  69. package/src/filters/filter-styles.ts +38 -28
  70. package/src/filters/index.ts +1 -1
  71. package/src/filters/ox-filters-form-base.ts +136 -72
  72. package/src/filters/registry.ts +1 -1
  73. package/src/styles/search-form-styles.ts +1 -1
  74. package/src/types.ts +96 -0
  75. package/stories/{ox-filter-form-barcode.stories.ts → ox-filters-form-barcode.stories.ts} +30 -13
  76. package/stories/ox-filters-form-base-bounded.stories.ts +206 -0
  77. package/stories/ox-filters-form-base-change-handler.stories.ts +218 -0
  78. package/stories/ox-filters-form-base.stories.ts +159 -0
  79. package/stories/ox-search-form.stories.ts +244 -0
  80. package/themes/app-theme.css +7 -7
  81. package/themes/form-theme.css +1 -1
  82. package/themes/input-theme.css +32 -0
  83. package/dist/src/filters/types.d.ts +0 -17
  84. package/dist/src/filters/types.js.map +0 -1
  85. package/dist/stories/ox-filter-form-barcode.stories.js.map +0 -1
  86. package/dist/stories/ox-filter-form-base.stories.js +0 -82
  87. package/dist/stories/ox-filter-form-base.stories.js.map +0 -1
  88. package/src/filters/types.ts +0 -47
  89. package/stories/ox-filter-form-base.stories.ts +0 -97
  90. /package/dist/src/{filters/types.js → types.js} +0 -0
  91. /package/dist/stories/{ox-filter-form-barcode.stories.d.ts → ox-filters-form-barcode.stories.d.ts} +0 -0
@@ -0,0 +1,206 @@
1
+ import { CommonHeaderStyles } from '@operato/styles'
2
+ import { sleep } from '@operato/utils'
3
+ import '../src/filters/ox-filters-form-base.js'
4
+
5
+ import { html, TemplateResult } from 'lit'
6
+ import { OxFiltersFormBase, FilterConfig, FilterValue } from '../src/index.js'
7
+
8
+ export default {
9
+ title: 'ox-filters-form-base bounded',
10
+ component: 'ox-filters-form-base',
11
+ argTypes: {
12
+ value: { control: 'object' },
13
+ filters: { control: 'object' },
14
+ urlParamsSensitive: { control: 'boolean' }
15
+ }
16
+ }
17
+
18
+ interface Story<T> {
19
+ (args: T): TemplateResult
20
+ args?: Partial<T>
21
+ argTypes?: Record<string, unknown>
22
+ }
23
+
24
+ interface ArgTypes {
25
+ value?: FilterValue[]
26
+ filters?: FilterConfig[]
27
+ urlParamsSensitive: boolean
28
+ }
29
+
30
+ const Template: Story<ArgTypes> = ({ value, filters, urlParamsSensitive }: ArgTypes) => html`
31
+ <link href="/themes/app-theme.css" rel="stylesheet" />
32
+ <link href="/themes/form-theme.css" rel="stylesheet" />
33
+ <link href="/themes/input-theme.css" rel="stylesheet" />
34
+
35
+ <link
36
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
37
+ rel="stylesheet"
38
+ />
39
+ <link
40
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
41
+ rel="stylesheet"
42
+ />
43
+ <link
44
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
45
+ rel="stylesheet"
46
+ />
47
+
48
+ <style>
49
+ body {
50
+ height: 500px;
51
+ }
52
+ </style>
53
+
54
+ <style>
55
+ ox-filters-form-base {
56
+ --input-gap-vertical: 8px;
57
+ --input-gap-horizontal: 16px;
58
+
59
+ --ox-filters-input-placeholder-color: var(--primary-color);
60
+
61
+ --ox-filters-input-border: 1px solid rgba(0, 0, 0, 0.2);
62
+ --ox-filters-input-focus-border: 1px solid var(--primary-color);
63
+ --ox-filters-input-font: normal 14px var(--theme-font);
64
+ --ox-filters-input-color: var(--primary-text-color);
65
+ --ox-filters-input-focus-color: var(--primary-color);
66
+ --ox-filters-label-font: normal 14px var(--theme-font);
67
+ --ox-filters-label-color: var(--primary-text-color);
68
+
69
+ --ox-filters-form-gap: var(--input-gap-vertical, 8px) var(--input-gap-horizontal, 16px);
70
+ --ox-filters-input-padding: 6px 2px;
71
+ }
72
+
73
+ ${CommonHeaderStyles.cssText}
74
+ </style>
75
+
76
+ <div class="header">
77
+ <div class="filters">
78
+ <ox-filters-form-base
79
+ .value=${value!}
80
+ .filters=${filters!}
81
+ ?url-params-sensitive=${urlParamsSensitive}
82
+ @filters-change=${(e: CustomEvent) => {}}
83
+ >
84
+ </ox-filters-form-base>
85
+ </div>
86
+ </div>
87
+ `
88
+
89
+ const WAREHOUSE = [
90
+ {
91
+ id: '01',
92
+ name: '제 1 창고',
93
+ zones: [
94
+ {
95
+ id: 'W1Z001',
96
+ name: 'Zone 01-001',
97
+ locations: ['L01-001-01', 'L01-001-02', 'L01-001-03', 'L01-001-04', 'L01-001-05']
98
+ },
99
+ {
100
+ id: 'W1Z002',
101
+ name: 'Zone 01-002',
102
+ locations: ['L01-002-01', 'L01-002-02', 'L01-002-03', 'L01-002-04', 'L01-002-05']
103
+ }
104
+ ]
105
+ },
106
+ {
107
+ id: '02',
108
+ name: '제 2 창고',
109
+ zones: [
110
+ {
111
+ id: 'W2Z001',
112
+ name: 'Zone 02-001',
113
+ locations: ['L02-001-01', 'L02-001-02', 'L02-001-03', 'L02-001-04', 'L02-001-05']
114
+ },
115
+ {
116
+ id: 'W2Z002',
117
+ name: 'Zone 02-002',
118
+ locations: ['L02-002-01', 'L02-002-02', 'L02-002-03', 'L02-002-04', 'L02-002-05']
119
+ }
120
+ ]
121
+ }
122
+ ]
123
+
124
+ export const Regular = Template.bind({})
125
+ Regular.args = {
126
+ filters: [
127
+ {
128
+ name: 'warehouse',
129
+ type: 'select',
130
+ label: 'warehouse',
131
+ operator: 'eq',
132
+ value: '01',
133
+ options: async (form: OxFiltersFormBase) => {
134
+ await sleep(1000) // 테스트를 위해서 강제로 1초 쉬기
135
+ return [
136
+ {
137
+ display: '',
138
+ value: ''
139
+ }
140
+ ].concat(
141
+ WAREHOUSE.map(w => {
142
+ return {
143
+ display: w.name,
144
+ value: w.id
145
+ }
146
+ })
147
+ )
148
+ }
149
+ },
150
+ {
151
+ name: 'zone',
152
+ type: 'select',
153
+ label: 'zone',
154
+ operator: 'eq',
155
+ value: 'W1Z001',
156
+ boundTo: ['warehouse'],
157
+ options: async (form: OxFiltersFormBase) => {
158
+ await sleep(1000) // 테스트를 위해서 강제로 1초 쉬기
159
+ const formData = new FormData(await form.form)
160
+ const warehouse = formData?.get('warehouse')
161
+ console.log('warehouse', warehouse)
162
+
163
+ const targetWH = warehouse && WAREHOUSE.find(w => w.id == warehouse)
164
+ const zones = targetWH
165
+ ? targetWH.zones
166
+ : WAREHOUSE.reduce((sum, warehouse) => {
167
+ sum = sum.concat(warehouse.zones)
168
+ return sum
169
+ }, [] as any[])
170
+
171
+ return [
172
+ {
173
+ display: '',
174
+ value: ''
175
+ }
176
+ ].concat(
177
+ zones.map((z: any) => {
178
+ return {
179
+ display: z.name,
180
+ value: z.id
181
+ }
182
+ })
183
+ )
184
+ }
185
+ },
186
+ {
187
+ name: 'location',
188
+ type: 'select',
189
+ label: 'location',
190
+ operator: 'eq',
191
+ value: '',
192
+ boundTo: ['warehouse', 'zone'],
193
+ options: async (form: OxFiltersFormBase) => {
194
+ await sleep(1000) // 테스트를 위해서 강제로 1초 쉬기
195
+ const formData = new FormData(await form.form)
196
+ const warehouse = formData?.get('warehouse')
197
+ const zone = formData?.get('zone')
198
+ console.log('warehouse, zone', warehouse, zone)
199
+
200
+ const targetWH = (warehouse && WAREHOUSE.find(w => w.id == warehouse)) || null
201
+ const targetZone = zone && targetWH?.zones.find(z => z.id == zone)
202
+ return targetZone ? ['', ...targetZone.locations] : []
203
+ }
204
+ }
205
+ ]
206
+ }
@@ -0,0 +1,218 @@
1
+ import { CommonHeaderStyles } from '@operato/styles'
2
+ import { sleep } from '@operato/utils'
3
+ import '../src/filters/ox-filters-form-base.js'
4
+
5
+ import { html, TemplateResult } from 'lit'
6
+ import { OxFiltersFormBase, FilterConfig, FilterValue } from '../src/index.js'
7
+
8
+ export default {
9
+ title: 'ox-filters-form-base change-handler',
10
+ component: 'ox-filters-form-base',
11
+ argTypes: {
12
+ value: { control: 'object' },
13
+ filters: { control: 'object' },
14
+ urlParamsSensitive: { control: 'boolean' }
15
+ }
16
+ }
17
+
18
+ interface Story<T> {
19
+ (args: T): TemplateResult
20
+ args?: Partial<T>
21
+ argTypes?: Record<string, unknown>
22
+ }
23
+
24
+ interface ArgTypes {
25
+ value?: FilterValue[]
26
+ filters?: FilterConfig[]
27
+ urlParamsSensitive: boolean
28
+ }
29
+
30
+ const Template: Story<ArgTypes> = ({ value, filters, urlParamsSensitive }: ArgTypes) => html`
31
+ <link href="/themes/app-theme.css" rel="stylesheet" />
32
+ <link href="/themes/form-theme.css" rel="stylesheet" />
33
+ <link href="/themes/input-theme.css" rel="stylesheet" />
34
+
35
+ <link
36
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
37
+ rel="stylesheet"
38
+ />
39
+ <link
40
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
41
+ rel="stylesheet"
42
+ />
43
+ <link
44
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
45
+ rel="stylesheet"
46
+ />
47
+
48
+ <style>
49
+ body {
50
+ height: 500px;
51
+ }
52
+ </style>
53
+
54
+ <style>
55
+ ox-filters-form-base {
56
+ --input-gap-vertical: 8px;
57
+ --input-gap-horizontal: 16px;
58
+
59
+ --ox-filters-input-placeholder-color: var(--primary-color);
60
+
61
+ --ox-filters-input-border: 1px solid rgba(0, 0, 0, 0.2);
62
+ --ox-filters-input-focus-border: 1px solid var(--primary-color);
63
+ --ox-filters-input-font: normal 14px var(--theme-font);
64
+ --ox-filters-input-color: var(--primary-text-color);
65
+ --ox-filters-input-focus-color: var(--primary-color);
66
+ --ox-filters-label-font: normal 14px var(--theme-font);
67
+ --ox-filters-label-color: var(--primary-text-color);
68
+
69
+ --ox-filters-form-gap: var(--input-gap-vertical, 8px) var(--input-gap-horizontal, 16px);
70
+ --ox-filters-input-padding: 6px 2px;
71
+ }
72
+
73
+ ${CommonHeaderStyles.cssText}
74
+ </style>
75
+
76
+ <div class="header">
77
+ <div class="filters">
78
+ <ox-filters-form-base
79
+ .value=${value!}
80
+ .filters=${filters!}
81
+ ?url-params-sensitive=${urlParamsSensitive}
82
+ @filters-change=${(e: CustomEvent) => {
83
+ const { filters } = e.detail
84
+ const { value } = e.currentTarget as any
85
+ console.log('filters-change event fired', filters, value, e.currentTarget)
86
+ }}
87
+ >
88
+ </ox-filters-form-base>
89
+ </div>
90
+ </div>
91
+ `
92
+
93
+ const WAREHOUSE = [
94
+ {
95
+ id: '01',
96
+ name: '제 1 창고',
97
+ zones: [
98
+ {
99
+ id: 'W1Z001',
100
+ name: 'Zone 01-001',
101
+ locations: ['L01-001-01', 'L01-001-02', 'L01-001-03', 'L01-001-04', 'L01-001-05']
102
+ },
103
+ {
104
+ id: 'W1Z002',
105
+ name: 'Zone 01-002',
106
+ locations: ['L01-002-01', 'L01-002-02', 'L01-002-03', 'L01-002-04', 'L01-002-05']
107
+ }
108
+ ]
109
+ },
110
+ {
111
+ id: '02',
112
+ name: '제 2 창고',
113
+ zones: [
114
+ {
115
+ id: 'W2Z001',
116
+ name: 'Zone 02-001',
117
+ locations: ['L02-001-01', 'L02-001-02', 'L02-001-03', 'L02-001-04', 'L02-001-05']
118
+ },
119
+ {
120
+ id: 'W2Z002',
121
+ name: 'Zone 02-002',
122
+ locations: ['L02-002-01', 'L02-002-02', 'L02-002-03', 'L02-002-04', 'L02-002-05']
123
+ }
124
+ ]
125
+ }
126
+ ]
127
+
128
+ export const Regular = Template.bind({})
129
+ Regular.args = {
130
+ filters: [
131
+ {
132
+ name: 'warehouse',
133
+ type: 'select',
134
+ label: 'warehouse',
135
+ operator: 'eq',
136
+ value: '01',
137
+ options: async (form: OxFiltersFormBase) => {
138
+ await sleep(1000) // 테스트를 위해서 강제로 1초 쉬기
139
+ return [
140
+ {
141
+ display: '',
142
+ value: ''
143
+ }
144
+ ].concat(
145
+ WAREHOUSE.map(w => {
146
+ return {
147
+ display: w.name,
148
+ value: w.id
149
+ }
150
+ })
151
+ )
152
+ },
153
+ onchange: async (value: any, form: OxFiltersFormBase) => {
154
+ await sleep(1000)
155
+ console.log("won't submit..")
156
+ return false
157
+ }
158
+ },
159
+ {
160
+ name: 'zone',
161
+ type: 'select',
162
+ label: 'zone',
163
+ operator: 'eq',
164
+ value: 'W1Z001',
165
+ boundTo: ['warehouse'],
166
+ options: async (form: OxFiltersFormBase) => {
167
+ await sleep(1000) // 테스트를 위해서 강제로 1초 쉬기
168
+ const formData = new FormData(await form.form)
169
+ const warehouse = formData?.get('warehouse')
170
+ console.log('warehouse', warehouse)
171
+
172
+ const targetWH = warehouse && WAREHOUSE.find(w => w.id == warehouse)
173
+ const zones = targetWH
174
+ ? targetWH.zones
175
+ : WAREHOUSE.reduce((sum, warehouse) => {
176
+ sum = sum.concat(warehouse.zones)
177
+ return sum
178
+ }, [] as any[])
179
+
180
+ return [
181
+ {
182
+ display: '',
183
+ value: ''
184
+ }
185
+ ].concat(
186
+ zones.map((z: any) => {
187
+ return {
188
+ display: z.name,
189
+ value: z.id
190
+ }
191
+ })
192
+ )
193
+ },
194
+ onchange: () => {
195
+ return false
196
+ }
197
+ },
198
+ {
199
+ name: 'location',
200
+ type: 'select',
201
+ label: 'location',
202
+ operator: 'eq',
203
+ value: '',
204
+ boundTo: ['warehouse', 'zone'],
205
+ options: async (form: OxFiltersFormBase) => {
206
+ await sleep(1000) // 테스트를 위해서 강제로 1초 쉬기
207
+ const formData = new FormData(await form.form)
208
+ const warehouse = formData?.get('warehouse')
209
+ const zone = formData?.get('zone')
210
+ console.log('warehouse, zone', warehouse, zone)
211
+
212
+ const targetWH = (warehouse && WAREHOUSE.find(w => w.id == warehouse)) || null
213
+ const targetZone = zone && targetWH?.zones.find(z => z.id == zone)
214
+ return targetZone ? ['', ...targetZone.locations] : []
215
+ }
216
+ }
217
+ ]
218
+ }
@@ -0,0 +1,159 @@
1
+ import { CommonHeaderStyles } from '@operato/styles'
2
+ import '../src/filters/ox-filters-form-base.js'
3
+
4
+ import { html, TemplateResult } from 'lit'
5
+ import { OxFiltersFormBase, FilterConfig, FilterValue } from '../src/index.js'
6
+
7
+ export default {
8
+ title: 'ox-filters-form-base',
9
+ component: 'ox-filters-form-base',
10
+ argTypes: {
11
+ value: { control: 'object' },
12
+ filters: { control: 'object' },
13
+ urlParamsSensitive: { control: 'boolean' }
14
+ }
15
+ }
16
+
17
+ interface Story<T> {
18
+ (args: T): TemplateResult
19
+ args?: Partial<T>
20
+ argTypes?: Record<string, unknown>
21
+ }
22
+
23
+ interface ArgTypes {
24
+ value?: FilterValue[]
25
+ filters?: FilterConfig[]
26
+ urlParamsSensitive: boolean
27
+ }
28
+
29
+ const Template: Story<ArgTypes> = ({ value, filters, urlParamsSensitive }: ArgTypes) => html`
30
+ <link href="/themes/app-theme.css" rel="stylesheet" />
31
+ <link href="/themes/form-theme.css" rel="stylesheet" />
32
+ <link href="/themes/input-theme.css" rel="stylesheet" />
33
+
34
+ <link
35
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
36
+ rel="stylesheet"
37
+ />
38
+ <link
39
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
40
+ rel="stylesheet"
41
+ />
42
+ <link
43
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
44
+ rel="stylesheet"
45
+ />
46
+
47
+ <style>
48
+ body {
49
+ height: 500px;
50
+ }
51
+ </style>
52
+
53
+ <style>
54
+ ox-filters-form-base {
55
+ --input-gap-vertical: 8px;
56
+ --input-gap-horizontal: 16px;
57
+
58
+ --ox-filters-input-placeholder-color: var(--primary-color);
59
+
60
+ --ox-filters-input-border: 1px solid rgba(0, 0, 0, 0.2);
61
+ --ox-filters-input-focus-border: 1px solid var(--primary-color);
62
+ --ox-filters-input-font: normal 14px var(--theme-font);
63
+ --ox-filters-input-color: var(--primary-text-color);
64
+ --ox-filters-input-focus-color: var(--primary-color);
65
+ --ox-filters-label-font: normal 14px var(--theme-font);
66
+ --ox-filters-label-color: var(--primary-text-color);
67
+
68
+ --ox-filters-form-gap: var(--input-gap-vertical, 8px) var(--input-gap-horizontal, 16px);
69
+ --ox-filters-input-padding: 6px 2px;
70
+ }
71
+
72
+ ${CommonHeaderStyles.cssText}
73
+ </style>
74
+
75
+ <div class="header">
76
+ <div class="filters">
77
+ <ox-filters-form-base
78
+ .value=${value!}
79
+ .filters=${filters!}
80
+ ?url-params-sensitive=${urlParamsSensitive}
81
+ @filters-change=${(e: CustomEvent) => {
82
+ console.log('filters changed', e.detail)
83
+ }}
84
+ >
85
+ </ox-filters-form-base>
86
+ </div>
87
+ </div>
88
+ `
89
+
90
+ export const Regular = Template.bind({})
91
+ Regular.args = {
92
+ filters: [
93
+ {
94
+ name: 'search',
95
+ type: 'search',
96
+ label: 'search',
97
+ operator: 'eq',
98
+ value: ''
99
+ },
100
+ {
101
+ name: 'test',
102
+ type: 'string',
103
+ label: 'name',
104
+ operator: 'eq',
105
+ value: 'No Name'
106
+ },
107
+ {
108
+ name: 'active',
109
+ type: 'boolean',
110
+ label: 'active',
111
+ operator: 'eq',
112
+ value: true,
113
+ onchange: (value, formBase: OxFiltersFormBase) => {
114
+ const sss = formBase.getFieldByName('sss') as HTMLInputElement
115
+ sss.value = value ? 'DEF' : 'ABC'
116
+
117
+ return false
118
+ }
119
+ },
120
+ {
121
+ name: 'sss',
122
+ type: 'select',
123
+ label: 'sss',
124
+ operator: 'eq',
125
+ options: () => {
126
+ return [
127
+ {
128
+ display: '',
129
+ value: ''
130
+ },
131
+ {
132
+ display: 'ABC',
133
+ value: 'ABC'
134
+ },
135
+ {
136
+ display: 'DEF',
137
+ value: 'DEF'
138
+ }
139
+ ]
140
+ }
141
+ },
142
+ {
143
+ name: 'range',
144
+ type: 'number',
145
+ label: 'range',
146
+ operator: 'between'
147
+ },
148
+ {
149
+ name: 'date-range',
150
+ type: 'date',
151
+ label: 'date',
152
+ operator: 'between',
153
+ value: [
154
+ { name: 'week', params: { relativeWeeks: -1 } },
155
+ { name: 'today', params: { relativeDays: +1 } }
156
+ ]
157
+ }
158
+ ]
159
+ }