@operato/form 8.0.0-beta.0 → 8.0.0-beta.1

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 (40) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/package.json +7 -7
  3. package/.editorconfig +0 -29
  4. package/.storybook/main.js +0 -3
  5. package/.storybook/preview.js +0 -52
  6. package/.storybook/server.mjs +0 -8
  7. package/src/components/ox-custom-input.ts +0 -102
  8. package/src/components/ox-custom-select.ts +0 -91
  9. package/src/components/ox-file-uploader.ts +0 -164
  10. package/src/components/ox-form-master.ts +0 -246
  11. package/src/components/ox-form-paginator.ts +0 -60
  12. package/src/components/ox-search-form-paginator.ts +0 -46
  13. package/src/components/ox-search-form.ts +0 -467
  14. package/src/filters/filter-checkbox.ts +0 -34
  15. package/src/filters/filter-input-barcode.ts +0 -35
  16. package/src/filters/filter-input.ts +0 -30
  17. package/src/filters/filter-range-date.ts +0 -81
  18. package/src/filters/filter-range-number.ts +0 -64
  19. package/src/filters/filter-select.ts +0 -56
  20. package/src/filters/filter-styles.ts +0 -127
  21. package/src/filters/index.ts +0 -10
  22. package/src/filters/ox-filter-personalizer.ts +0 -188
  23. package/src/filters/ox-filters-form-base.ts +0 -437
  24. package/src/filters/registry.ts +0 -54
  25. package/src/index.ts +0 -4
  26. package/src/styles/index.ts +0 -3
  27. package/src/styles/multi-column-form-styles.ts +0 -192
  28. package/src/styles/search-form-styles.ts +0 -160
  29. package/src/styles/single-column-form-styles.ts +0 -114
  30. package/src/types.ts +0 -106
  31. package/stories/ox-filters-form-barcode.stories.ts +0 -140
  32. package/stories/ox-filters-form-base-bounded.stories.ts +0 -208
  33. package/stories/ox-filters-form-base-change-handler.stories.ts +0 -220
  34. package/stories/ox-filters-form-base-page-preference.stories.ts +0 -177
  35. package/stories/ox-filters-form-base.stories.ts +0 -179
  36. package/stories/ox-search-form-change-handler.stories.ts +0 -253
  37. package/stories/ox-search-form.stories.ts +0 -258
  38. package/tsconfig.json +0 -24
  39. package/web-dev-server.config.mjs +0 -27
  40. package/web-test-runner.config.mjs +0 -41
@@ -1,160 +0,0 @@
1
- import { css } from 'lit'
2
-
3
- export const SearchFormStyles = css`
4
- :host {
5
- overflow: auto;
6
- background-color: var(--search-form-background-color, var(--md-sys-color-surface));
7
- padding: var(--spacing-medium);
8
- }
9
-
10
- .search-form {
11
- position: relative;
12
- display: grid;
13
- grid-template-columns: repeat(24, 1fr);
14
- grid-gap: var(--form-grid-gap, var(--spacing-medium));
15
- grid-auto-rows: minmax(24px, auto);
16
- }
17
- .search-form label {
18
- grid-column: span 3;
19
- text-align: right;
20
- align-self: center;
21
- text-transform: capitalize;
22
-
23
- font-size: var(--md-sys-typescale-label-large-size, 0.875rem);
24
- color: var(--md-sys-color-on-primary-container);
25
- }
26
-
27
- .search-form input,
28
- .search-form select {
29
- grid-column: span 9;
30
-
31
- border: var(--input-field-border);
32
- border-bottom: 1px solid rgba(0, 0, 0, 0.2);
33
- border-radius: var(--input-field-border-radius);
34
- padding: var(--input-field-padding, var(--spacing-tiny));
35
- font: var(--input-field-font);
36
- max-width: 85%;
37
- color: var(--input-field-color, var(--md-sys-color-on-surface-variant));
38
- background-color: var(--md-sys-color-surface-container-lowest);
39
- }
40
-
41
- .search-form select {
42
- min-height: 25px;
43
- max-width: calc(85% + 18px);
44
- }
45
-
46
- .search-form input[type='checkbox'],
47
- .search-form input[type='radio'] {
48
- justify-self: end;
49
- align-self: center;
50
- grid-column: span 3 / auto;
51
- position: relative;
52
- left: 17px;
53
- }
54
-
55
- .search-form input[type='checkbox'] + label,
56
- .search-form input[type='radio'] + label {
57
- padding-left: 17px;
58
- text-align: left;
59
- align-self: center;
60
- grid-column: span 9 / auto;
61
-
62
- font: var(--form-sublabel-font);
63
- color: var(--form-sublabel-color, var(--md-sys-color-secondary));
64
- }
65
-
66
- input:focus {
67
- outline: none;
68
- }
69
-
70
- input[type='checkbox'] {
71
- margin: 0;
72
- }
73
-
74
- [search] {
75
- position: absolute;
76
- right: var(--spacing-small);
77
- bottom: var(--spacing-none);
78
- color: var(--search-form-icon-color, var(--md-sys-color-primary));
79
- }
80
-
81
- input[readonly],
82
- select[readonly] {
83
- background-color: #f0f0f0;
84
- }
85
-
86
- @media screen and (max-width: 460px) {
87
- .search-form {
88
- grid-template-columns: repeat(12, 1fr);
89
- grid-gap: var(--spacing-medium) var(--spacing-medium);
90
-
91
- max-height: 100%;
92
- overflow-y: auto;
93
- }
94
- .search-form label {
95
- grid-column: span 3;
96
- padding-right: 5px;
97
- align-self: center;
98
- color: var(--md-sys-color-on-surface);
99
- }
100
- .search-form input,
101
- .search-form select {
102
- grid-column: span 8;
103
- max-width: 100%;
104
- color: var(--md-sys-color-on-surface);
105
- }
106
- .search-form input[type='checkbox'],
107
- .search-form input[type='radio'] {
108
- justify-self: end;
109
- align-self: center;
110
- grid-column: span 3 / auto;
111
- }
112
-
113
- .search-form input[type='checkbox'] + label,
114
- .search-form input[type='radio'] + label {
115
- grid-column: span 8 / auto;
116
- align-self: center;
117
- position: relative;
118
- left: 5px;
119
- color: var(--md-sys-color-on-surface);
120
- }
121
-
122
- [search] {
123
- right: var(--spacing-tiny);
124
- color: var(--md-sys-color-on-surface);
125
- }
126
- }
127
- @media (min-width: 461px) and (max-width: 1024px) {
128
- .search-form select {
129
- max-width: calc(85% + 10px);
130
- }
131
- }
132
- @media screen and (min-width: 1201px) and (max-width: 2000px) {
133
- .search-form {
134
- grid-template-columns: repeat(36, 1fr);
135
- }
136
- .search-form input,
137
- .search-form select {
138
- max-width: 90%;
139
- }
140
- .search-form select {
141
- max-width: calc(90% + 18px);
142
- }
143
- }
144
-
145
- @media screen and (min-width: 2001px) {
146
- .search-form {
147
- grid-template-columns: repeat(48, 1fr);
148
- }
149
- .search-form input,
150
- .search-form select {
151
- max-width: 90%;
152
- }
153
- .search-form select {
154
- max-width: calc(90% + 18px);
155
- }
156
- [search] {
157
- right: 0.8%;
158
- }
159
- }
160
- `
@@ -1,114 +0,0 @@
1
- import { css } from 'lit'
2
-
3
- export const SingleColumnFormStyles = css`
4
- :host {
5
- overflow: auto;
6
- padding: var(--form-container-padding);
7
- }
8
-
9
- .single-column-form {
10
- width: 100%;
11
- display: grid;
12
- grid-template-columns: repeat(12, 1fr);
13
- grid-gap: var(--form-grid-gap);
14
- grid-auto-rows: minmax(24px, auto);
15
- max-width: var(--form-max-width);
16
- margin: var(--form-margin);
17
- }
18
- .single-column-form fieldset {
19
- display: contents;
20
- }
21
- .single-column-form legend {
22
- grid-column: span 12;
23
- text-transform: capitalize;
24
-
25
- padding: var(--legend-padding);
26
- font: var(--legend-font);
27
- color: var(--legend-text-color, var(--md-sys-color-on-surface-variant));
28
- border-bottom: var(--legend-border-bottom);
29
- }
30
-
31
- .single-column-form label {
32
- grid-column: span 3;
33
- text-align: right;
34
- text-transform: capitalize;
35
-
36
- color: var(--label-color, var(--md-sys-color-on-surface));
37
- font: var(--label-font);
38
- }
39
-
40
- .single-column-form input,
41
- .single-column-form table,
42
- .single-column-form select,
43
- .single-column-form textarea,
44
- .single-column-form [custom-input] {
45
- grid-column: span 8;
46
-
47
- border: var(--input-field-border);
48
- border-radius: var(--input-field-border-radius);
49
- padding: var(--input-field-padding);
50
- font: var(--input-field-font);
51
- }
52
-
53
- .single-column-form input[type='checkbox'],
54
- .single-column-form input[type='radio'] {
55
- justify-self: end;
56
- align-self: start;
57
- grid-column: span 3 / auto;
58
- position: relative;
59
- left: 17px;
60
- }
61
-
62
- .single-column-form input[type='checkbox'] + label,
63
- .single-column-form input[type='radio'] + label {
64
- padding-left: 17px;
65
- text-align: left;
66
- grid-column: span 9 / auto;
67
-
68
- font: var(--form-sublabel-font);
69
- color: var(--form-sublabel-color, var(--md-sys-color-secondary));
70
- }
71
-
72
- input:focus {
73
- outline: none;
74
- border: 1px solid var(--focus-background-color, var(--md-sys-color-surface-variant));
75
- }
76
- input[type='checkbox'] {
77
- margin: 0;
78
- }
79
-
80
- @media screen and (max-width: 460px) {
81
- .single-column-form {
82
- max-width: 90%;
83
- grid-gap: 5px;
84
- }
85
- .single-column-form label {
86
- grid-column: span 12;
87
- text-align: left;
88
- align-self: end;
89
- }
90
- .single-column-form input,
91
- .single-column-form table,
92
- .single-column-form select,
93
- .single-column-form textarea,
94
- .single-column-form [custom-input] {
95
- grid-column: span 12;
96
-
97
- padding: var(--padding-default, var(--spacing-medium));
98
- font: normal 15px var(--theme-font);
99
- }
100
- .single-column-form input[type='checkbox'],
101
- .single-column-form input[type='radio'] {
102
- justify-self: start;
103
- align-self: center;
104
- grid-column: span 1 / auto;
105
- zoom: 1.4;
106
- }
107
-
108
- .single-column-form input[type='checkbox'] + label,
109
- .single-column-form input[type='radio'] + label {
110
- grid-column: span 11 / auto;
111
- align-self: center;
112
- }
113
- }
114
- `
package/src/types.ts DELETED
@@ -1,106 +0,0 @@
1
- import { TemplateResult } from 'lit-html'
2
- import { OxFiltersFormBase } from './filters/ox-filters-form-base'
3
- import { OxSearchForm } from './components/ox-search-form'
4
-
5
- export type FilterOperator =
6
- | 'search'
7
- | 'eq'
8
- | 'between'
9
- | 'gte'
10
- | 'lte'
11
- | 'is_not_true'
12
- | 'in'
13
- | 'like'
14
- | 'i_like'
15
- | 'noteq'
16
- | 'is_empty_num_id'
17
- | 'is_blank'
18
- | 'is_present'
19
- | 'is_not_false'
20
- | 'is_true'
21
- | 'is_false'
22
- | 'is_not_null'
23
- | 'is_null'
24
- | 'notin_with_null'
25
- | 'notin'
26
- | 'gt'
27
- | 'lt'
28
- | 'i_nlike'
29
- | 'nlike'
30
-
31
- export type SelectOptionObject =
32
- | {
33
- name: string
34
- display?: never
35
- value: string
36
- }
37
- | {
38
- display: string
39
- name?: never
40
- value: string
41
- }
42
-
43
- export type SelectOption = SelectOptionObject | string
44
-
45
- export type FilterChangedCallback = (value: any, form: OxFiltersFormBase) => boolean | Promise<boolean>
46
-
47
- export type FilterConfig = {
48
- name: string
49
- label: string
50
- type: string
51
- operator?: FilterOperator
52
- options?:
53
- | { [key: string]: any }
54
- | SelectOption[]
55
- | ((form: OxFiltersFormBase) => SelectOption[] | Promise<SelectOption[]>)
56
- value?:
57
- | string
58
- | number
59
- | boolean
60
- | { name: string; [params: string]: any }
61
- | string[]
62
- | number[]
63
- | { name: string; [params: string]: any }[]
64
- | undefined
65
- boundTo?: string[]
66
- hidden?: boolean
67
- readonly?: boolean
68
- onchange?: FilterChangedCallback
69
- }
70
-
71
- export type FilterValue = {
72
- name: string
73
- operator: FilterOperator
74
- value: string | number | boolean | string[] | number[] | undefined
75
- }
76
-
77
- export type FilterSelectRenderer = (
78
- filter: FilterConfig,
79
- value: string | number | boolean | string[] | number[] | any | undefined,
80
- owner: Element
81
- ) => TemplateResult | string | void
82
-
83
- export type SearchFilterChangedCallback = (value: any, form: OxSearchForm) => boolean | Promise<boolean>
84
-
85
- export type SearchFormField = {
86
- type: string
87
- hidden?: boolean
88
- name?: string
89
- id?: string
90
- label?: string
91
- placeholder?: string
92
- value?: any
93
- field?: string
94
- queryName?: string
95
- props?: { [prop: string]: string }
96
- attrs?: string[]
97
- options?: SelectOption[] | ((form: OxSearchForm) => SelectOption[] | Promise<SelectOption[]>)
98
- boundTo?: string[]
99
- readonly?: boolean
100
- handlers?: { [event: string]: EventListener }
101
- onchange?: SearchFilterChangedCallback
102
- }
103
-
104
- export type PersonalFilterPreference = {
105
- filters?: Partial<FilterConfig>[]
106
- }
@@ -1,140 +0,0 @@
1
- import { CommonHeaderStyles } from '@operato/styles'
2
- import '../src/filters/ox-filters-form-base.js'
3
-
4
- import { html, TemplateResult } from 'lit'
5
- import { styles as MDTypeScaleStyles } from '@material/web/typography/md-typescale-styles'
6
-
7
- export default {
8
- title: 'ox-filters-form-barcode',
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?: object
25
- filters?: object
26
- urlParamsSensitive: boolean
27
- }
28
-
29
- const Template: Story<ArgTypes> = ({ value, filters, urlParamsSensitive }: ArgTypes) => html`
30
- <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet" />
31
-
32
- <link href="/themes/light.css" rel="stylesheet" />
33
- <link href="/themes/dark.css" rel="stylesheet" />
34
- <link href="/themes/spacing.css" rel="stylesheet" />
35
- <link href="/themes/form-theme.css" rel="stylesheet" />
36
-
37
- <link
38
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
39
- rel="stylesheet"
40
- />
41
- <link
42
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
43
- rel="stylesheet"
44
- />
45
- <link
46
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
47
- rel="stylesheet"
48
- />
49
-
50
- <style>
51
- ${MDTypeScaleStyles.cssText}
52
- </style>
53
-
54
- <style>
55
- ${CommonHeaderStyles.cssText}
56
- </style>
57
-
58
- <style>
59
- body {
60
- width: 100%;
61
- height: 500px;
62
- text-align: center;
63
-
64
- background-color: var(--md-sys-color-background);
65
- color: var(--md-sys-color-on-background);
66
- }
67
-
68
- .header {
69
- padding: var(--spacing-small) var(--spacing-medium);
70
- background-color: var(--md-sys-color-primary-container);
71
- color: var(--md-sys-color-on-primary-container);
72
- }
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: 'test',
95
- type: 'barcode',
96
- label: 'name',
97
- operator: 'eq'
98
- },
99
- {
100
- name: 'active',
101
- type: 'boolean',
102
- label: 'active',
103
- operator: 'eq'
104
- },
105
- {
106
- name: 'sss',
107
- type: 'select',
108
- label: 'sss',
109
- operator: 'eq',
110
- options: () => {
111
- return [
112
- {
113
- display: '',
114
- value: ''
115
- },
116
- {
117
- display: 'ABC',
118
- value: 'ABC'
119
- },
120
- {
121
- display: 'DEF',
122
- value: 'DEF'
123
- }
124
- ]
125
- }
126
- },
127
- {
128
- name: 'range',
129
- type: 'number',
130
- label: 'range',
131
- operator: 'between'
132
- },
133
- {
134
- name: 'date-range',
135
- type: 'datetime',
136
- label: 'date',
137
- operator: 'between'
138
- }
139
- ]
140
- }