@operato/data-grist 0.3.4 → 0.3.13

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 (111) hide show
  1. package/CHANGELOG.md +82 -0
  2. package/custom-elements.json +984 -2383
  3. package/demo/index.html +22 -12
  4. package/dist/src/data-card/data-card.js +1 -0
  5. package/dist/src/data-card/data-card.js.map +1 -1
  6. package/dist/src/data-grid/data-grid-field.d.ts +1 -1
  7. package/dist/src/data-grid/data-grid-field.js +3 -1
  8. package/dist/src/data-grid/data-grid-field.js.map +1 -1
  9. package/dist/src/data-grid/data-grid-header.js +13 -7
  10. package/dist/src/data-grid/data-grid-header.js.map +1 -1
  11. package/dist/src/data-grist.js +1 -1
  12. package/dist/src/data-grist.js.map +1 -1
  13. package/dist/src/data-list/data-list.js +1 -0
  14. package/dist/src/data-list/data-list.js.map +1 -1
  15. package/dist/src/filters/filter-checkbox.js +1 -0
  16. package/dist/src/filters/filter-checkbox.js.map +1 -1
  17. package/dist/src/filters/filter-input.js +1 -1
  18. package/dist/src/filters/filter-input.js.map +1 -1
  19. package/dist/src/filters/filter-range-date.js +1 -1
  20. package/dist/src/filters/filter-range-date.js.map +1 -1
  21. package/dist/src/filters/filter-range-number.js +2 -1
  22. package/dist/src/filters/filter-range-number.js.map +1 -1
  23. package/dist/src/filters/filters-form.d.ts +19 -0
  24. package/dist/src/filters/filters-form.js +99 -0
  25. package/dist/src/filters/filters-form.js.map +1 -0
  26. package/dist/src/filters/index.d.ts +1 -0
  27. package/dist/src/filters/index.js +1 -0
  28. package/dist/src/filters/index.js.map +1 -1
  29. package/dist/src/filters/registry.d.ts +5 -5
  30. package/dist/src/filters/registry.js +25 -25
  31. package/dist/src/filters/registry.js.map +1 -1
  32. package/dist/src/gutters/gutter-button.js +1 -0
  33. package/dist/src/gutters/gutter-button.js.map +1 -1
  34. package/dist/src/gutters/gutter-row-selector.js +1 -0
  35. package/dist/src/gutters/gutter-row-selector.js.map +1 -1
  36. package/dist/src/index.d.ts +1 -2
  37. package/dist/src/index.js +1 -2
  38. package/dist/src/index.js.map +1 -1
  39. package/dist/src/record-view/record-view-body.d.ts +1 -1
  40. package/dist/src/record-view/record-view-body.js +5 -5
  41. package/dist/src/record-view/record-view-body.js.map +1 -1
  42. package/dist/src/record-view/record-view.d.ts +1 -1
  43. package/dist/src/record-view/record-view.js +1 -3
  44. package/dist/src/record-view/record-view.js.map +1 -1
  45. package/dist/src/types.d.ts +4 -3
  46. package/dist/src/types.js.map +1 -1
  47. package/dist/tsconfig.tsbuildinfo +1 -1
  48. package/package.json +9 -8
  49. package/src/data-card/data-card.ts +2 -0
  50. package/src/data-grid/data-grid-field.ts +4 -2
  51. package/src/data-grid/data-grid-header.ts +12 -6
  52. package/src/data-grist.ts +1 -1
  53. package/src/data-list/data-list.ts +2 -0
  54. package/src/filters/filter-checkbox.ts +1 -0
  55. package/src/filters/filter-input.ts +1 -1
  56. package/src/filters/filter-range-date.ts +1 -1
  57. package/src/filters/filter-range-number.ts +2 -1
  58. package/src/filters/filters-form.ts +132 -0
  59. package/src/filters/index.ts +2 -0
  60. package/src/filters/registry.ts +26 -26
  61. package/src/gutters/gutter-button.ts +3 -2
  62. package/src/gutters/gutter-row-selector.ts +3 -2
  63. package/src/index.ts +1 -3
  64. package/src/record-view/record-view-body.ts +7 -7
  65. package/src/record-view/record-view.ts +2 -4
  66. package/src/types.ts +34 -4
  67. package/themes/grist-theme.css +2 -22
  68. package/dist/src/interfaces/index.d.ts +0 -2
  69. package/dist/src/interfaces/index.js +0 -3
  70. package/dist/src/interfaces/index.js.map +0 -1
  71. package/dist/src/interfaces/ox-grist-search-form.d.ts +0 -6
  72. package/dist/src/interfaces/ox-grist-search-form.js +0 -2
  73. package/dist/src/interfaces/ox-grist-search-form.js.map +0 -1
  74. package/dist/src/interfaces/ox-search-field.d.ts +0 -39
  75. package/dist/src/interfaces/ox-search-field.js +0 -2
  76. package/dist/src/interfaces/ox-search-field.js.map +0 -1
  77. package/dist/src/search-form/index.d.ts +0 -7
  78. package/dist/src/search-form/index.js +0 -8
  79. package/dist/src/search-form/index.js.map +0 -1
  80. package/dist/src/search-form/ox-basic-field.d.ts +0 -18
  81. package/dist/src/search-form/ox-basic-field.js +0 -75
  82. package/dist/src/search-form/ox-basic-field.js.map +0 -1
  83. package/dist/src/search-form/ox-checkbox-field.d.ts +0 -11
  84. package/dist/src/search-form/ox-checkbox-field.js +0 -60
  85. package/dist/src/search-form/ox-checkbox-field.js.map +0 -1
  86. package/dist/src/search-form/ox-grist-search-form.d.ts +0 -11
  87. package/dist/src/search-form/ox-grist-search-form.js +0 -177
  88. package/dist/src/search-form/ox-grist-search-form.js.map +0 -1
  89. package/dist/src/search-form/ox-number-field.d.ts +0 -14
  90. package/dist/src/search-form/ox-number-field.js +0 -112
  91. package/dist/src/search-form/ox-number-field.js.map +0 -1
  92. package/dist/src/search-form/ox-search-form.d.ts +0 -15
  93. package/dist/src/search-form/ox-search-form.js +0 -53
  94. package/dist/src/search-form/ox-search-form.js.map +0 -1
  95. package/dist/src/search-form/ox-select-field.d.ts +0 -21
  96. package/dist/src/search-form/ox-select-field.js +0 -181
  97. package/dist/src/search-form/ox-select-field.js.map +0 -1
  98. package/dist/src/search-form/ox-text-field.d.ts +0 -11
  99. package/dist/src/search-form/ox-text-field.js +0 -60
  100. package/dist/src/search-form/ox-text-field.js.map +0 -1
  101. package/src/interfaces/index.ts +0 -2
  102. package/src/interfaces/ox-grist-search-form.ts +0 -7
  103. package/src/interfaces/ox-search-field.ts +0 -52
  104. package/src/search-form/index.ts +0 -7
  105. package/src/search-form/ox-basic-field.ts +0 -86
  106. package/src/search-form/ox-checkbox-field.ts +0 -57
  107. package/src/search-form/ox-grist-search-form.ts +0 -200
  108. package/src/search-form/ox-number-field.ts +0 -113
  109. package/src/search-form/ox-search-form.ts +0 -71
  110. package/src/search-form/ox-select-field.ts +0 -189
  111. package/src/search-form/ox-text-field.ts +0 -55
@@ -1,189 +0,0 @@
1
- import '@operato/popup/ox-popup-list.js'
2
- import '@material/mwc-icon'
3
-
4
- import { css, CSSResult, html, TemplateResult } from 'lit'
5
- import { ifDefined } from 'lit-html/directives/if-defined.js'
6
- import { customElement, property } from 'lit/decorators.js'
7
-
8
- import { OxPopupList } from '@operato/popup'
9
-
10
- import { OXFieldOptionProps, OXSelectFieldProps } from '../index.js'
11
- import { OXBasicField } from './ox-basic-field.js'
12
-
13
- @customElement('ox-select-field')
14
- export class OXSelectField extends OXBasicField {
15
- @property({ type: Object }) field!: OXSelectFieldProps
16
- @property({ type: Boolean }) checked: boolean = false
17
- @property({ type: String }) searchCondition: string = ''
18
- @property({ type: String }) value: string = ''
19
-
20
- static styles: CSSResult[] = [
21
- css`
22
- :host > label {
23
- display: inline-flex;
24
- flex-direction: column;
25
- font-size: var(--fontsize-default, 14px);
26
- color: var(--primary-text-color, #476172);
27
- }
28
- .input-wrapper {
29
- display: inline-flex;
30
- }
31
- .input-wrapper mwc-icon {
32
- opacity: 0.7;
33
- font-size: var(--fontsize-default, 16px);
34
- color: var(--primary-text-color, #476172);
35
- line-height: 2;
36
- }
37
- input {
38
- border: none;
39
- outline: none;
40
- padding: 4px 9px;
41
- font-size: var(--fontsize-default, 14px);
42
- color: var(--primary-text-color, #476172);
43
- }
44
- .search-input-wrapper {
45
- display: inline-flex;
46
- border-bottom: var(--border-dark-color, 1px solid rgba(0, 0, 0, 0.15));
47
- }
48
- .search-input-wrapper mwc-icon {
49
- opacity: 0.7;
50
- font-size: 20px;
51
- color: var(--primary-text-color, #476172);
52
- }
53
- label[option] {
54
- display: inline-flex;
55
- margin: 5px 0px;
56
- gap: 5px;
57
- }
58
- `
59
- ]
60
-
61
- get input(): HTMLInputElement {
62
- const input: HTMLInputElement | null = this.renderRoot.querySelector('input[readonly]')
63
- if (!input) throw new Error('Failed to find input element')
64
-
65
- return input
66
- }
67
-
68
- get checkedOption(): OXFieldOptionProps {
69
- if (!this.value) throw new Error('Value is not defined yet')
70
-
71
- const checkedOption: OXFieldOptionProps | undefined = this.field.options.find(
72
- (option: OXFieldOptionProps) => option.value === this.value
73
- )
74
- if (!checkedOption) throw new Error('No checked option found')
75
-
76
- return checkedOption
77
- }
78
-
79
- get displayValue(): string {
80
- try {
81
- return this.checkedOption.name || this.checkedOption.value
82
- } catch (e) {
83
- return ''
84
- }
85
- }
86
-
87
- get searchInput(): HTMLInputElement {
88
- const searchInput: HTMLInputElement | null = this.renderRoot.querySelector('input#search-input')
89
- if (!searchInput) throw new Error('No search input found')
90
-
91
- return searchInput
92
- }
93
-
94
- setDefaultValue(defaultValue: any): void {
95
- const input: HTMLInputElement | null = this.renderRoot.querySelector(`input[value="${defaultValue}"]`)
96
- if (!input) return
97
- input.checked = true
98
-
99
- const option: OXFieldOptionProps | undefined = this.field.options.find(
100
- (option: OXFieldOptionProps) => option.value === defaultValue
101
- )
102
- if (!option) throw new Error('No matched option found')
103
-
104
- this.value = option.name || option.value
105
- }
106
-
107
- render(): TemplateResult {
108
- const { name, hidden, id, options, searchEnable = true, placeholder } = this.field
109
-
110
- return html`
111
- <span class="input-wrapper" ?hidden=${hidden} @click=${this.openPopup.bind(this)}>
112
- <input
113
- id=${ifDefined(id)}
114
- name=${name}
115
- readonly
116
- placeholder=${ifDefined(placeholder)}
117
- .value=${this.displayValue}
118
- />
119
- <mwc-icon>keyboard_arrow_down</mwc-icon>
120
- </span>
121
-
122
- <ox-popup-list id="popup-list" multiple>
123
- ${searchEnable
124
- ? html`
125
- <div class="search-input-wrapper">
126
- <input id="search-input" type="text" @input=${this.onSearchInputHandler.bind(this)} />
127
- <mwc-icon>search</mwc-icon>
128
- </div>
129
- `
130
- : ''}
131
- ${options
132
- .filter(
133
- (option: OXFieldOptionProps) =>
134
- option.value.indexOf(this.searchCondition) >= 0 ||
135
- (option.name && option?.name.indexOf(this.searchCondition) >= 0)
136
- )
137
- .map(
138
- (option: OXFieldOptionProps) => html`
139
- <label option>
140
- <input
141
- name=${name}
142
- type="checkbox"
143
- .value=${option.value}
144
- @change=${this.onValueChange.bind(this)}
145
- .checked=${this.value === option.value}
146
- />
147
- <span>${option.name || option.value}</span>
148
- </label>
149
- `
150
- )}
151
- </ox-popup-list>
152
- `
153
- }
154
-
155
- openPopup(event: MouseEvent): void {
156
- const popupList: OxPopupList | null = this.renderRoot.querySelector('#popup-list')
157
- if (!popupList) throw new Error('Failed to find popup element')
158
-
159
- const offsetHeight: number = this.input.offsetHeight
160
- const { x, y } = this.input.getBoundingClientRect()
161
-
162
- popupList.open({ left: x, top: y + offsetHeight })
163
- }
164
-
165
- onSearchInputHandler(): void {
166
- this.searchCondition = this.searchInput.value
167
- }
168
-
169
- onValueChange(event: Event): void {
170
- if (this.value) {
171
- const prevCheckedInput: HTMLInputElement | null = this.renderRoot.querySelector(`input[value=${this.value}`)
172
- if (prevCheckedInput) prevCheckedInput.checked = false
173
- }
174
-
175
- const checkedInput: HTMLInputElement | null = event.currentTarget as HTMLInputElement | null
176
- if (!checkedInput) throw new Error('No checked input found')
177
-
178
- if (checkedInput.value === this.value) {
179
- this.value = ''
180
- } else {
181
- const foundOption: OXFieldOptionProps | undefined = this.field.options.find(
182
- (option: OXFieldOptionProps) => option.value === checkedInput.value
183
- )
184
- if (!foundOption) throw new Error('No matched option found')
185
-
186
- this.value = foundOption.value
187
- }
188
- }
189
- }
@@ -1,55 +0,0 @@
1
- import { css, html, TemplateResult } from 'lit'
2
- import { customElement, property } from 'lit/decorators.js'
3
- import { ifDefined } from 'lit/directives/if-defined.js'
4
-
5
- import { OXTextFieldProps } from '..'
6
- import { OXBasicField } from './ox-basic-field'
7
-
8
- @customElement('ox-text-field')
9
- export class OXTextField extends OXBasicField {
10
- @property({ type: Object }) field!: OXTextFieldProps
11
- @property({ type: String }) value: string = ''
12
-
13
- static styles = [
14
- ...OXBasicField.styles,
15
- css`
16
- label {
17
- display: inline-flex;
18
- flex-direction: column;
19
- }
20
- span.input-wrapper {
21
- display: inline-flex;
22
- border-bottom: var(--border-dark-color, 1px solid rgba(0, 0, 0, 0.15));
23
- }
24
- `
25
- ]
26
-
27
- setDefaultValue(defaultValue: string) {
28
- this.value = defaultValue
29
- }
30
-
31
- render(): TemplateResult {
32
- if (!this.field) return html``
33
-
34
- const { name, hidden, id, placeholder } = this.field
35
-
36
- return html`
37
- <label>
38
- <span class="input-wrapper" ?hidden=${hidden}>
39
- <input
40
- id=${ifDefined(id)}
41
- name=${name}
42
- type="text"
43
- placeholder=${ifDefined(placeholder)}
44
- .value=${this.value}
45
- @input=${this.onChangeHandler.bind(this)}
46
- />
47
- </span>
48
- </label>
49
- `
50
- }
51
-
52
- private onChangeHandler(): void {
53
- this.value = this.input.value
54
- }
55
- }