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

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 +164 -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,244 @@
1
+ import { CommonHeaderStyles } from '@operato/styles'
2
+ import { sleep } from '@operato/utils'
3
+ import '../src/components/ox-search-form.js'
4
+
5
+ import { html, TemplateResult } from 'lit'
6
+ import { OxSearchForm, SearchFormField } from '../src/index.js'
7
+
8
+ export default {
9
+ title: 'ox-search-form',
10
+ component: 'ox-search-form',
11
+ argTypes: {
12
+ value: { control: 'object' },
13
+ fields: { control: 'object' },
14
+ hideSearchButton: { control: 'boolean' },
15
+ autofocus: { control: 'boolean' }
16
+ }
17
+ }
18
+
19
+ interface Story<T> {
20
+ (args: T): TemplateResult
21
+ args?: Partial<T>
22
+ argTypes?: Record<string, unknown>
23
+ }
24
+
25
+ interface ArgTypes {
26
+ fields?: SearchFormField[]
27
+ hideSearchButton?: boolean
28
+ autofocus?: boolean
29
+ }
30
+
31
+ const Template: Story<ArgTypes> = ({ fields, hideSearchButton, autofocus }: ArgTypes) => html`
32
+ <link href="/themes/app-theme.css" rel="stylesheet" />
33
+ <link href="/themes/form-theme.css" rel="stylesheet" />
34
+ <link href="/themes/input-theme.css" rel="stylesheet" />
35
+
36
+ <link
37
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
38
+ rel="stylesheet"
39
+ />
40
+ <link
41
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
42
+ rel="stylesheet"
43
+ />
44
+ <link
45
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
46
+ rel="stylesheet"
47
+ />
48
+
49
+ <style>
50
+ body {
51
+ height: 500px;
52
+ }
53
+ </style>
54
+
55
+ <style>
56
+ ox-search-form {
57
+ --input-gap-vertical: 8px;
58
+ --input-gap-horizontal: 16px;
59
+
60
+ --ox-filters-input-placeholder-color: var(--primary-color);
61
+
62
+ --ox-filters-input-border: 1px solid rgba(0, 0, 0, 0.2);
63
+ --ox-filters-input-focus-border: 1px solid var(--primary-color);
64
+ --ox-filters-input-font: normal 14px var(--theme-font);
65
+ --ox-filters-input-color: var(--primary-text-color);
66
+ --ox-filters-input-focus-color: var(--primary-color);
67
+ --ox-filters-label-font: normal 14px var(--theme-font);
68
+ --ox-filters-label-color: var(--primary-text-color);
69
+
70
+ --ox-filters-form-gap: var(--input-gap-vertical, 8px) var(--input-gap-horizontal, 16px);
71
+ --ox-filters-input-padding: 6px 2px;
72
+ }
73
+
74
+ ${CommonHeaderStyles.cssText}
75
+ </style>
76
+
77
+ <div class="header">
78
+ <div class="filters">
79
+ <ox-search-form
80
+ .fields=${fields!}
81
+ ?autofocus=${autofocus}
82
+ ?hideSearchButton=${hideSearchButton}
83
+ @change=${(e: CustomEvent) => {
84
+ console.log('search form changed', e.detail)
85
+ }}
86
+ >
87
+ </ox-search-form>
88
+ </div>
89
+ </div>
90
+ `
91
+
92
+ const WAREHOUSE = [
93
+ {
94
+ id: '01',
95
+ name: '제 1 창고',
96
+ zones: [
97
+ {
98
+ id: 'Z001',
99
+ name: 'Zone 01-001',
100
+ locations: ['L01-001-01', 'L01-001-02', 'L01-001-03', 'L01-001-04', 'L01-001-05']
101
+ },
102
+ {
103
+ id: 'Z002',
104
+ name: 'Zone 01-002',
105
+ locations: ['L01-002-01', 'L01-002-02', 'L01-002-03', 'L01-002-04', 'L01-002-05']
106
+ }
107
+ ]
108
+ },
109
+ {
110
+ id: '02',
111
+ name: '제 2 창고',
112
+ zones: [
113
+ {
114
+ id: 'Z001',
115
+ name: 'Zone 02-001',
116
+ locations: ['L02-001-01', 'L02-001-02', 'L02-001-03', 'L02-001-04', 'L02-001-05']
117
+ },
118
+ {
119
+ id: 'Z002',
120
+ name: 'Zone 02-002',
121
+ locations: ['L02-002-01', 'L02-002-02', 'L02-002-03', 'L02-002-04', 'L02-002-05']
122
+ }
123
+ ]
124
+ }
125
+ ]
126
+
127
+ export const Regular = Template.bind({})
128
+ Regular.args = {
129
+ fields: [
130
+ {
131
+ type: 'select',
132
+ name: 'warehouse',
133
+ label: 'warehouse',
134
+ options: async (form: OxSearchForm) => {
135
+ await sleep(1000) // 테스트를 위해서 강제로 1초 쉬기
136
+ return [
137
+ {
138
+ display: '',
139
+ value: ''
140
+ }
141
+ ].concat(
142
+ WAREHOUSE.map(w => {
143
+ return {
144
+ display: w.name,
145
+ value: w.id
146
+ }
147
+ })
148
+ )
149
+ }
150
+ },
151
+ {
152
+ type: 'select',
153
+ name: 'zone',
154
+ label: 'zone',
155
+ boundTo: ['warehouse'],
156
+ options: async (form: OxSearchForm) => {
157
+ await sleep(1000) // 테스트를 위해서 강제로 1초 쉬기
158
+ const formData = new FormData(await form.form)
159
+ const warehouse = formData?.get('warehouse')
160
+ console.log('warehouse', warehouse)
161
+
162
+ const targetWH = warehouse && WAREHOUSE.find(w => w.id == warehouse)
163
+ const zones = targetWH
164
+ ? targetWH.zones
165
+ : WAREHOUSE.reduce((sum, warehouse) => {
166
+ sum = sum.concat(warehouse.zones)
167
+ return sum
168
+ }, [] as any[])
169
+
170
+ return [
171
+ {
172
+ display: '',
173
+ value: ''
174
+ }
175
+ ].concat(
176
+ zones.map((z: any) => {
177
+ return {
178
+ display: z.name,
179
+ value: z.id
180
+ }
181
+ })
182
+ )
183
+ }
184
+ },
185
+ {
186
+ name: 'location',
187
+ type: 'select',
188
+ label: 'location',
189
+ boundTo: ['warehouse', 'zone'],
190
+ options: async (form: OxSearchForm) => {
191
+ await sleep(1000) // 테스트를 위해서 강제로 1초 쉬기
192
+ const formData = new FormData(await form.form)
193
+ const warehouse = formData?.get('warehouse')
194
+ const zone = formData?.get('zone')
195
+ console.log('warehouse, zone', warehouse, zone)
196
+
197
+ const targetWH = (warehouse && WAREHOUSE.find(w => w.id == warehouse)) || null
198
+ const targetZone = zone && targetWH?.zones.find(z => z.id == zone)
199
+ return targetZone ? ['', ...targetZone.locations] : []
200
+ }
201
+ }
202
+ ],
203
+ hideSearchButton: true,
204
+ autofocus: true
205
+ }
206
+
207
+ export const RegularContact = Template.bind({})
208
+ RegularContact.args = {
209
+ fields: [
210
+ {
211
+ label: 'name',
212
+ name: 'name',
213
+ type: 'text',
214
+ placeholder: 'type your name.',
215
+ props: { searchOper: 'i_like' }
216
+ },
217
+ {
218
+ label: 'email',
219
+ name: 'email',
220
+ type: 'text',
221
+ props: { searchOper: 'i_like' }
222
+ },
223
+ {
224
+ label: 'fax',
225
+ name: 'fax',
226
+ type: 'text',
227
+ props: { searchOper: 'i_like' }
228
+ },
229
+ {
230
+ label: 'phone',
231
+ name: 'phone',
232
+ type: 'text',
233
+ props: { searchOper: 'i_like' }
234
+ },
235
+ {
236
+ label: 'description',
237
+ name: 'description',
238
+ type: 'text',
239
+ props: { searchOper: 'i_like' }
240
+ }
241
+ ],
242
+ hideSearchButton: true,
243
+ autofocus: true
244
+ }
@@ -1,19 +1,19 @@
1
1
  body {
2
2
  /* theme color */
3
- --primary-color-rgb: 130, 105, 96;
3
+ --primary-color-rgb: 56, 162, 91;
4
4
  --primary-color: rgb(var(--primary-color-rgb));
5
- --secondary-color-rgb: 78, 78, 90;
5
+ --secondary-color-rgb: 71, 97, 114;
6
6
  --secondary-color: rgb(var(--secondary-color-rgb));
7
7
  --focus-color: var(--theme-white-color);
8
8
  --primary-background-color: var(--secondary-color);
9
- --secondary-background-color: #283644;
10
- --main-section-background-color: #f5f2ee;
9
+ --secondary-background-color: #183936;
10
+ --main-section-background-color: #f7f6f4;
11
11
  --theme-white-color: #fff;
12
12
  --theme-black-color: rgba(0, 0, 0, 0.9);
13
13
 
14
14
  --focus-background-color: var(--primary-color);
15
- --primary-text-color: #3c3938;
16
- --secondary-text-color: var(--primary-color);
15
+ --primary-text-color: var(--theme-black-color);
16
+ --secondary-text-color: #218f62;
17
17
 
18
18
  --opacity-dark-color: rgba(0, 0, 0, 0.4);
19
19
  --opacity-light-color: rgba(255, 255, 255, 0.8);
@@ -124,7 +124,7 @@ body {
124
124
  --label-color: var(--secondary-color);
125
125
  --label-text-transform: capitalize;
126
126
  --input-margin: var(--margin-narrow) 0;
127
- --input-padding: var(--padding-default);
127
+ --input-padding: 6px 2px;
128
128
  --input-min-width: 200px;
129
129
  --input-font: normal var(--fontsize-default) var(--theme-font);
130
130
  --input-hint-font: normal var(--fontsize-small) var(--theme-font);
@@ -1,4 +1,5 @@
1
1
  body {
2
+ /* */
2
3
  --form-border: none;
3
4
  --form-margin: var(--margin-wide);
4
5
  --form-max-width: 700px;
@@ -12,7 +13,6 @@ body {
12
13
  --legend-text-color: var(--secondary-text-color);
13
14
  --legend-border-bottom: 1px solid var(--primary-color);
14
15
 
15
- --label-padding: 3px 0;
16
16
  --label-font: normal 14px var(--theme-font);
17
17
  --label-color: var(--secondary-color);
18
18
 
@@ -0,0 +1,32 @@
1
+ body {
2
+ --input-intra-gap: 7px;
3
+ --input-border: 1px solid rgba(0, 0, 0, 0.1);
4
+ --input-border-radius: var(--border-radius);
5
+ --input-font: normal 15px var(--theme-font);
6
+ --input-color: var(--secondary-color);
7
+
8
+ --ox-checkbox-disabled-opacity: 0.5;
9
+ --ox-checkbox-border-radius: 4px;
10
+ --ox-checkbox-border: 1px solid rgba(0, 0, 0, 0.3);
11
+ --ox-checkbox-background-color: #fff;
12
+ --ox-checkbox-size: 15px;
13
+ --ox-checkbox-checked-border: 1px solid var(--primary-color);
14
+ --ox-checkbox-unchecked-border: 1px solid rgba(0, 0, 0, 0.3);
15
+ --ox-checkbox-checked-background-color: #fff;
16
+ --ox-checkbox-unchecked-background-color: #fff;
17
+ --ox-checkbox-fill-color: rgba(0, 0, 0, 0.1);
18
+ --ox-checkbox-checked-color: var(--primary-color);
19
+ --ox-checkbox-label-color: var(--label-color);
20
+ --ox-checkbox-checked-font-weight: bold;
21
+ }
22
+
23
+ @media screen and (max-width: 480px) {
24
+ body {
25
+ }
26
+ }
27
+
28
+ @media (min-width: 481px) and (max-width: 1024px) {
29
+ body {
30
+ --input-font: normal 16px var(--theme-font);
31
+ }
32
+ }
@@ -1,17 +0,0 @@
1
- import { TemplateResult } from 'lit-html';
2
- export type FilterOperator = 'search' | 'eq' | 'between' | 'gte' | 'lte' | 'is_not_true' | 'in' | 'like' | 'i_like' | 'noteq' | 'is_empty_num_id' | 'is_blank' | 'is_present' | 'is_not_false' | 'is_true' | 'is_false' | 'is_not_null' | 'is_null' | 'notin_with_null' | 'notin' | 'gt' | 'lt' | 'i_nlike' | 'nlike';
3
- export type FilterConfig = {
4
- name: string;
5
- label: string;
6
- type: string;
7
- operator?: FilterOperator;
8
- options?: {
9
- [key: string]: any;
10
- };
11
- };
12
- export type FilterValue = {
13
- name: string;
14
- operator: FilterOperator;
15
- value: string | number | boolean | string[] | number[] | undefined;
16
- };
17
- export type FilterSelectRenderer = (filter: FilterConfig, value: string | number | boolean | string[] | number[] | any | undefined, owner: Element) => TemplateResult | string | void;
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/filters/types.ts"],"names":[],"mappings":"","sourcesContent":["import { TemplateResult } from 'lit-html'\n\nexport type FilterOperator =\n | 'search'\n | 'eq'\n | 'between'\n | 'gte'\n | 'lte'\n | 'is_not_true'\n | 'in'\n | 'like'\n | 'i_like'\n | 'noteq'\n | 'is_empty_num_id'\n | 'is_blank'\n | 'is_present'\n | 'is_not_false'\n | 'is_true'\n | 'is_false'\n | 'is_not_null'\n | 'is_null'\n | 'notin_with_null'\n | 'notin'\n | 'gt'\n | 'lt'\n | 'i_nlike'\n | 'nlike'\n\nexport type FilterConfig = {\n name: string\n label: string\n type: string\n operator?: FilterOperator\n options?: { [key: string]: any }\n}\n\nexport type FilterValue = {\n name: string\n operator: FilterOperator\n value: string | number | boolean | string[] | number[] | undefined\n}\n\nexport type FilterSelectRenderer = (\n filter: FilterConfig,\n value: string | number | boolean | string[] | number[] | any | undefined,\n owner: Element\n) => TemplateResult | string | void\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ox-filter-form-barcode.stories.js","sourceRoot":"","sources":["../../stories/ox-filter-form-barcode.stories.ts"],"names":[],"mappings":"AAAA,OAAO,wCAAwC,CAAA;AAE/C,OAAO,EAAE,IAAI,EAAkB,MAAM,KAAK,CAAA;AAE1C,eAAe;IACb,KAAK,EAAE,yBAAyB;IAChC,SAAS,EAAE,yBAAyB;IACpC,QAAQ,EAAE;QACR,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;QAC5B,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;QAC9B,kBAAkB,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;KAC3C;CACF,CAAA;AAcD,MAAM,QAAQ,GAAoB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAY,EAAE,EAAE,CAAC,IAAI,CAAA;;;;;;;;;;aAU/E,KAAK;eACH,OAAO;4BACM,kBAAkB;sBACxB,CAAC,CAAc,EAAE,EAAE;IACnC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;AAC1C,CAAC;;;CAGJ,CAAA;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACxC,OAAO,CAAC,IAAI,GAAG;IACb,OAAO,EAAE;QACP;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,GAAG,EAAE;gBACZ,OAAO;oBACL;wBACE,OAAO,EAAE,EAAE;wBACX,KAAK,EAAE,EAAE;qBACV;oBACD;wBACE,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,KAAK;qBACb;oBACD;wBACE,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,KAAK;qBACb;iBACF,CAAA;YACH,CAAC;SACF;QACD;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,SAAS;SACpB;QACD;YACE,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,SAAS;SACpB;KACF;CACF,CAAA","sourcesContent":["import '../src/filters/ox-filters-form-base.js'\n\nimport { html, TemplateResult } from 'lit'\n\nexport default {\n title: 'ox-filters-form-barcode',\n component: 'ox-filters-form-barcode',\n argTypes: {\n value: { control: 'object' },\n filters: { control: 'object' },\n urlParamsSensitive: { control: 'boolean' }\n }\n}\n\ninterface Story<T> {\n (args: T): TemplateResult\n args?: Partial<T>\n argTypes?: Record<string, unknown>\n}\n\ninterface ArgTypes {\n value?: object\n filters?: object\n urlParamsSensitive: boolean\n}\n\nconst Template: Story<ArgTypes> = ({ value, filters, urlParamsSensitive }: ArgTypes) => html`\n <link href=\"/themes/app-theme.css\" rel=\"stylesheet\" />\n <link href=\"/themes/form-theme.css\" rel=\"stylesheet\" />\n <link href=\"https://fonts.googleapis.com/css?family=Material+Icons&display=block\" rel=\"stylesheet\" />\n <style>\n body {\n }\n </style>\n\n <ox-filters-form-base\n .value=${value}\n .filters=${filters}\n ?url-params-sensitive=${urlParamsSensitive}\n @filters-change=${(e: CustomEvent) => {\n console.log('filters changed', e.detail)\n }}\n >\n </ox-filters-form-base>\n`\n\nexport const Regular = Template.bind({})\nRegular.args = {\n filters: [\n {\n name: 'test',\n type: 'barcode',\n label: 'name',\n operator: 'eq'\n },\n {\n name: 'active',\n type: 'boolean',\n label: 'active',\n operator: 'eq'\n },\n {\n name: 'sss',\n type: 'select',\n label: 'sss',\n operator: 'eq',\n options: () => {\n return [\n {\n display: '',\n value: ''\n },\n {\n display: 'ABC',\n value: 'ABC'\n },\n {\n display: 'DEF',\n value: 'DEF'\n }\n ]\n }\n },\n {\n name: 'range',\n type: 'number',\n label: 'range',\n operator: 'between'\n },\n {\n name: 'date-range',\n type: 'datetime',\n label: 'date',\n operator: 'between'\n }\n ]\n}\n"]}
@@ -1,82 +0,0 @@
1
- import '../src/filters/ox-filters-form-base.js';
2
- import { html } from 'lit';
3
- export default {
4
- title: 'ox-filters-form-base',
5
- component: 'ox-filters-form-base',
6
- argTypes: {
7
- value: { control: 'object' },
8
- filters: { control: 'object' },
9
- urlParamsSensitive: { control: 'boolean' }
10
- }
11
- };
12
- const Template = ({ value, filters, urlParamsSensitive }) => html `
13
- <link href="/themes/app-theme.css" rel="stylesheet" />
14
- <link href="/themes/form-theme.css" rel="stylesheet" />
15
- <link href="https://fonts.googleapis.com/css?family=Material+Icons&display=block" rel="stylesheet" />
16
- <style>
17
- body {
18
- }
19
- </style>
20
-
21
- <ox-filters-form-base
22
- .value=${value}
23
- .filters=${filters}
24
- ?url-params-sensitive=${urlParamsSensitive}
25
- @filters-change=${(e) => {
26
- console.log('filters changed', e.detail);
27
- }}
28
- >
29
- </ox-filters-form-base>
30
- `;
31
- export const Regular = Template.bind({});
32
- Regular.args = {
33
- filters: [
34
- {
35
- name: 'test',
36
- type: 'string',
37
- label: 'name',
38
- operator: 'eq'
39
- },
40
- {
41
- name: 'active',
42
- type: 'boolean',
43
- label: 'active',
44
- operator: 'eq'
45
- },
46
- {
47
- name: 'sss',
48
- type: 'select',
49
- label: 'sss',
50
- operator: 'eq',
51
- options: () => {
52
- return [
53
- {
54
- display: '',
55
- value: ''
56
- },
57
- {
58
- display: 'ABC',
59
- value: 'ABC'
60
- },
61
- {
62
- display: 'DEF',
63
- value: 'DEF'
64
- }
65
- ];
66
- }
67
- },
68
- {
69
- name: 'range',
70
- type: 'number',
71
- label: 'range',
72
- operator: 'between'
73
- },
74
- {
75
- name: 'date-range',
76
- type: 'datetime',
77
- label: 'date',
78
- operator: 'between'
79
- }
80
- ]
81
- };
82
- //# sourceMappingURL=ox-filter-form-base.stories.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ox-filter-form-base.stories.js","sourceRoot":"","sources":["../../stories/ox-filter-form-base.stories.ts"],"names":[],"mappings":"AAAA,OAAO,wCAAwC,CAAA;AAE/C,OAAO,EAAE,IAAI,EAAkB,MAAM,KAAK,CAAA;AAE1C,eAAe;IACb,KAAK,EAAE,sBAAsB;IAC7B,SAAS,EAAE,sBAAsB;IACjC,QAAQ,EAAE;QACR,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;QAC5B,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;QAC9B,kBAAkB,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;KAC3C;CACF,CAAA;AAcD,MAAM,QAAQ,GAAoB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAY,EAAE,EAAE,CAAC,IAAI,CAAA;;;;;;;;;;aAU/E,KAAK;eACH,OAAO;4BACM,kBAAkB;sBACxB,CAAC,CAAc,EAAE,EAAE;IACnC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;AAC1C,CAAC;;;CAGJ,CAAA;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACxC,OAAO,CAAC,IAAI,GAAG;IACb,OAAO,EAAE;QACP;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,GAAG,EAAE;gBACZ,OAAO;oBACL;wBACE,OAAO,EAAE,EAAE;wBACX,KAAK,EAAE,EAAE;qBACV;oBACD;wBACE,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,KAAK;qBACb;oBACD;wBACE,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,KAAK;qBACb;iBACF,CAAA;YACH,CAAC;SACF;QACD;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,SAAS;SACpB;QACD;YACE,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,SAAS;SACpB;KACF;CACF,CAAA","sourcesContent":["import '../src/filters/ox-filters-form-base.js'\n\nimport { html, TemplateResult } from 'lit'\n\nexport default {\n title: 'ox-filters-form-base',\n component: 'ox-filters-form-base',\n argTypes: {\n value: { control: 'object' },\n filters: { control: 'object' },\n urlParamsSensitive: { control: 'boolean' }\n }\n}\n\ninterface Story<T> {\n (args: T): TemplateResult\n args?: Partial<T>\n argTypes?: Record<string, unknown>\n}\n\ninterface ArgTypes {\n value?: object\n filters?: object\n urlParamsSensitive: boolean\n}\n\nconst Template: Story<ArgTypes> = ({ value, filters, urlParamsSensitive }: ArgTypes) => html`\n <link href=\"/themes/app-theme.css\" rel=\"stylesheet\" />\n <link href=\"/themes/form-theme.css\" rel=\"stylesheet\" />\n <link href=\"https://fonts.googleapis.com/css?family=Material+Icons&display=block\" rel=\"stylesheet\" />\n <style>\n body {\n }\n </style>\n\n <ox-filters-form-base\n .value=${value}\n .filters=${filters}\n ?url-params-sensitive=${urlParamsSensitive}\n @filters-change=${(e: CustomEvent) => {\n console.log('filters changed', e.detail)\n }}\n >\n </ox-filters-form-base>\n`\n\nexport const Regular = Template.bind({})\nRegular.args = {\n filters: [\n {\n name: 'test',\n type: 'string',\n label: 'name',\n operator: 'eq'\n },\n {\n name: 'active',\n type: 'boolean',\n label: 'active',\n operator: 'eq'\n },\n {\n name: 'sss',\n type: 'select',\n label: 'sss',\n operator: 'eq',\n options: () => {\n return [\n {\n display: '',\n value: ''\n },\n {\n display: 'ABC',\n value: 'ABC'\n },\n {\n display: 'DEF',\n value: 'DEF'\n }\n ]\n }\n },\n {\n name: 'range',\n type: 'number',\n label: 'range',\n operator: 'between'\n },\n {\n name: 'date-range',\n type: 'datetime',\n label: 'date',\n operator: 'between'\n }\n ]\n}\n"]}
@@ -1,47 +0,0 @@
1
- import { TemplateResult } from 'lit-html'
2
-
3
- export type FilterOperator =
4
- | 'search'
5
- | 'eq'
6
- | 'between'
7
- | 'gte'
8
- | 'lte'
9
- | 'is_not_true'
10
- | 'in'
11
- | 'like'
12
- | 'i_like'
13
- | 'noteq'
14
- | 'is_empty_num_id'
15
- | 'is_blank'
16
- | 'is_present'
17
- | 'is_not_false'
18
- | 'is_true'
19
- | 'is_false'
20
- | 'is_not_null'
21
- | 'is_null'
22
- | 'notin_with_null'
23
- | 'notin'
24
- | 'gt'
25
- | 'lt'
26
- | 'i_nlike'
27
- | 'nlike'
28
-
29
- export type FilterConfig = {
30
- name: string
31
- label: string
32
- type: string
33
- operator?: FilterOperator
34
- options?: { [key: string]: any }
35
- }
36
-
37
- export type FilterValue = {
38
- name: string
39
- operator: FilterOperator
40
- value: string | number | boolean | string[] | number[] | undefined
41
- }
42
-
43
- export type FilterSelectRenderer = (
44
- filter: FilterConfig,
45
- value: string | number | boolean | string[] | number[] | any | undefined,
46
- owner: Element
47
- ) => TemplateResult | string | void
@@ -1,97 +0,0 @@
1
- import '../src/filters/ox-filters-form-base.js'
2
-
3
- import { html, TemplateResult } from 'lit'
4
-
5
- export default {
6
- title: 'ox-filters-form-base',
7
- component: 'ox-filters-form-base',
8
- argTypes: {
9
- value: { control: 'object' },
10
- filters: { control: 'object' },
11
- urlParamsSensitive: { control: 'boolean' }
12
- }
13
- }
14
-
15
- interface Story<T> {
16
- (args: T): TemplateResult
17
- args?: Partial<T>
18
- argTypes?: Record<string, unknown>
19
- }
20
-
21
- interface ArgTypes {
22
- value?: object
23
- filters?: object
24
- urlParamsSensitive: boolean
25
- }
26
-
27
- const Template: Story<ArgTypes> = ({ value, filters, urlParamsSensitive }: ArgTypes) => html`
28
- <link href="/themes/app-theme.css" rel="stylesheet" />
29
- <link href="/themes/form-theme.css" rel="stylesheet" />
30
- <link href="https://fonts.googleapis.com/css?family=Material+Icons&display=block" rel="stylesheet" />
31
- <style>
32
- body {
33
- }
34
- </style>
35
-
36
- <ox-filters-form-base
37
- .value=${value}
38
- .filters=${filters}
39
- ?url-params-sensitive=${urlParamsSensitive}
40
- @filters-change=${(e: CustomEvent) => {
41
- console.log('filters changed', e.detail)
42
- }}
43
- >
44
- </ox-filters-form-base>
45
- `
46
-
47
- export const Regular = Template.bind({})
48
- Regular.args = {
49
- filters: [
50
- {
51
- name: 'test',
52
- type: 'string',
53
- label: 'name',
54
- operator: 'eq'
55
- },
56
- {
57
- name: 'active',
58
- type: 'boolean',
59
- label: 'active',
60
- operator: 'eq'
61
- },
62
- {
63
- name: 'sss',
64
- type: 'select',
65
- label: 'sss',
66
- operator: 'eq',
67
- options: () => {
68
- return [
69
- {
70
- display: '',
71
- value: ''
72
- },
73
- {
74
- display: 'ABC',
75
- value: 'ABC'
76
- },
77
- {
78
- display: 'DEF',
79
- value: 'DEF'
80
- }
81
- ]
82
- }
83
- },
84
- {
85
- name: 'range',
86
- type: 'number',
87
- label: 'range',
88
- operator: 'between'
89
- },
90
- {
91
- name: 'date-range',
92
- type: 'datetime',
93
- label: 'date',
94
- operator: 'between'
95
- }
96
- ]
97
- }
File without changes