@operato/data-grist 0.2.35 → 0.2.39

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 (113) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/custom-elements.json +1702 -5
  3. package/demo/data-grist-test.html +1 -1
  4. package/demo/index.html +18 -1
  5. package/dist/src/data-card/data-card-gutter-menu.js +2 -2
  6. package/dist/src/data-card/data-card-gutter-menu.js.map +1 -1
  7. package/dist/src/data-card/data-card-gutter.d.ts +13 -1
  8. package/dist/src/data-card/data-card-gutter.js +1 -0
  9. package/dist/src/data-card/data-card-gutter.js.map +1 -1
  10. package/dist/src/data-card/data-card.d.ts +1 -1
  11. package/dist/src/data-card/data-card.js +2 -8
  12. package/dist/src/data-card/data-card.js.map +1 -1
  13. package/dist/src/data-consumer.d.ts +1 -10
  14. package/dist/src/data-consumer.js.map +1 -1
  15. package/dist/src/data-grid/data-grid-field.d.ts +2 -2
  16. package/dist/src/data-grid/data-grid-field.js.map +1 -1
  17. package/dist/src/data-grid/data-grid-header.d.ts +3 -0
  18. package/dist/src/data-grid/data-grid-header.js +38 -10
  19. package/dist/src/data-grid/data-grid-header.js.map +1 -1
  20. package/dist/src/data-grist.d.ts +11 -9
  21. package/dist/src/data-grist.js +38 -25
  22. package/dist/src/data-grist.js.map +1 -1
  23. package/dist/src/data-list/data-list-field.d.ts +2 -2
  24. package/dist/src/data-list/data-list-field.js +5 -5
  25. package/dist/src/data-list/data-list-field.js.map +1 -1
  26. package/dist/src/data-list/data-list-gutter.d.ts +13 -1
  27. package/dist/src/data-list/data-list-gutter.js +1 -0
  28. package/dist/src/data-list/data-list-gutter.js.map +1 -1
  29. package/dist/src/data-list/data-list.d.ts +1 -1
  30. package/dist/src/data-list/data-list.js +2 -8
  31. package/dist/src/data-list/data-list.js.map +1 -1
  32. package/dist/src/data-provider.js +2 -2
  33. package/dist/src/data-provider.js.map +1 -1
  34. package/dist/src/data-report/data-report-field.d.ts +2 -2
  35. package/dist/src/data-report/data-report-field.js.map +1 -1
  36. package/dist/src/filters/index.d.ts +2 -0
  37. package/dist/src/filters/index.js +3 -0
  38. package/dist/src/filters/index.js.map +1 -0
  39. package/dist/src/filters/list-select.d.ts +3 -0
  40. package/dist/src/filters/list-select.js +12 -0
  41. package/dist/src/filters/list-select.js.map +1 -0
  42. package/dist/src/filters/registry.d.ts +7 -0
  43. package/dist/src/filters/registry.js +40 -0
  44. package/dist/src/filters/registry.js.map +1 -0
  45. package/dist/src/index.d.ts +2 -0
  46. package/dist/src/index.js +2 -0
  47. package/dist/src/index.js.map +1 -1
  48. package/dist/src/interfaces/index.d.ts +2 -0
  49. package/dist/src/interfaces/index.js +3 -0
  50. package/dist/src/interfaces/index.js.map +1 -0
  51. package/dist/src/interfaces/ox-grist-search-form.d.ts +6 -0
  52. package/dist/src/interfaces/ox-grist-search-form.js +2 -0
  53. package/dist/src/interfaces/ox-grist-search-form.js.map +1 -0
  54. package/dist/src/interfaces/ox-search-field.d.ts +39 -0
  55. package/dist/src/interfaces/ox-search-field.js +2 -0
  56. package/dist/src/interfaces/ox-search-field.js.map +1 -0
  57. package/dist/src/search-form/index.d.ts +7 -0
  58. package/dist/src/search-form/index.js +8 -0
  59. package/dist/src/search-form/index.js.map +1 -0
  60. package/dist/src/search-form/ox-basic-field.d.ts +18 -0
  61. package/dist/src/search-form/ox-basic-field.js +75 -0
  62. package/dist/src/search-form/ox-basic-field.js.map +1 -0
  63. package/dist/src/search-form/ox-checkbox-field.d.ts +11 -0
  64. package/dist/src/search-form/ox-checkbox-field.js +60 -0
  65. package/dist/src/search-form/ox-checkbox-field.js.map +1 -0
  66. package/dist/src/search-form/ox-grist-search-form.d.ts +11 -0
  67. package/dist/src/search-form/ox-grist-search-form.js +177 -0
  68. package/dist/src/search-form/ox-grist-search-form.js.map +1 -0
  69. package/dist/src/search-form/ox-number-field.d.ts +14 -0
  70. package/dist/src/search-form/ox-number-field.js +112 -0
  71. package/dist/src/search-form/ox-number-field.js.map +1 -0
  72. package/dist/src/search-form/ox-search-form.d.ts +15 -0
  73. package/dist/src/search-form/ox-search-form.js +53 -0
  74. package/dist/src/search-form/ox-search-form.js.map +1 -0
  75. package/dist/src/search-form/ox-select-field.d.ts +21 -0
  76. package/dist/src/search-form/ox-select-field.js +181 -0
  77. package/dist/src/search-form/ox-select-field.js.map +1 -0
  78. package/dist/src/search-form/ox-text-field.d.ts +11 -0
  79. package/dist/src/search-form/ox-text-field.js +60 -0
  80. package/dist/src/search-form/ox-text-field.js.map +1 -0
  81. package/dist/src/types.d.ts +32 -3
  82. package/dist/src/types.js.map +1 -1
  83. package/dist/tsconfig.tsbuildinfo +1 -1
  84. package/package.json +7 -6
  85. package/src/data-card/data-card-gutter-menu.ts +2 -2
  86. package/src/data-card/data-card-gutter.ts +3 -3
  87. package/src/data-card/data-card.ts +3 -9
  88. package/src/data-consumer.ts +1 -6
  89. package/src/data-grid/data-grid-field.ts +2 -2
  90. package/src/data-grid/data-grid-header.ts +42 -11
  91. package/src/data-grist.ts +52 -31
  92. package/src/data-list/data-list-field.ts +8 -7
  93. package/src/data-list/data-list-gutter.ts +3 -3
  94. package/src/data-list/data-list.ts +3 -9
  95. package/src/data-provider.ts +4 -5
  96. package/src/data-report/data-report-field.ts +2 -2
  97. package/src/filters/index.ts +3 -0
  98. package/src/filters/list-select.ts +14 -0
  99. package/src/filters/registry.ts +48 -0
  100. package/src/index.ts +3 -0
  101. package/src/interfaces/index.ts +2 -0
  102. package/src/interfaces/ox-grist-search-form.ts +7 -0
  103. package/src/interfaces/ox-search-field.ts +52 -0
  104. package/src/search-form/index.ts +7 -0
  105. package/src/search-form/ox-basic-field.ts +86 -0
  106. package/src/search-form/ox-checkbox-field.ts +57 -0
  107. package/src/search-form/ox-grist-search-form.ts +200 -0
  108. package/src/search-form/ox-number-field.ts +113 -0
  109. package/src/search-form/ox-search-form.ts +71 -0
  110. package/src/search-form/ox-select-field.ts +188 -0
  111. package/src/search-form/ox-text-field.ts +55 -0
  112. package/src/types.ts +37 -3
  113. package/yarn-error.log +2427 -3205
@@ -0,0 +1,40 @@
1
+ import { ListSelect } from './list-select';
2
+ var RENDERERS = {
3
+ string: ListSelect,
4
+ text: ListSelect,
5
+ email: ListSelect,
6
+ tel: ListSelect,
7
+ password: ListSelect,
8
+ integer: ListSelect,
9
+ float: ListSelect,
10
+ number: ListSelect,
11
+ select: ListSelect,
12
+ boolean: ListSelect,
13
+ checkbox: ListSelect,
14
+ month: ListSelect,
15
+ week: ListSelect,
16
+ date: ListSelect,
17
+ time: ListSelect,
18
+ datetime: ListSelect,
19
+ color: ListSelect,
20
+ progress: ListSelect,
21
+ link: ListSelect,
22
+ image: ListSelect,
23
+ json5: ListSelect
24
+ };
25
+ export function registerRenderer(type, renderer) {
26
+ RENDERERS[type] = renderer;
27
+ }
28
+ export function unregisterRenderer(type) {
29
+ delete RENDERERS[type];
30
+ }
31
+ export function getRenderers() {
32
+ return { ...RENDERERS };
33
+ }
34
+ export function getRenderer(type) {
35
+ if (typeof type == 'function') {
36
+ return type;
37
+ }
38
+ return RENDERERS[type || 'text'] || ListSelect;
39
+ }
40
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/filters/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,IAAI,SAAS,GAET;IACF,MAAM,EAAE,UAAU;IAClB,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,UAAU;IACjB,GAAG,EAAE,UAAU;IACf,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,UAAU;IACnB,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,UAAU;IAClB,MAAM,EAAE,UAAU;IAClB,OAAO,EAAE,UAAU;IACnB,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,UAAU;IACjB,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,UAAU;IACjB,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,UAAU;CAClB,CAAA;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,QAA8B;IAC3E,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,SAAS,CAAC,IAAI,CAAC,CAAA;AACxB,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAmC;IAC7D,IAAI,OAAO,IAAI,IAAI,UAAU,EAAE;QAC7B,OAAO,IAAI,CAAA;KACZ;IAED,OAAO,SAAS,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,UAAU,CAAA;AAChD,CAAC","sourcesContent":["import { FilterSelectRenderer } from '../types'\nimport { ListSelect } from './list-select'\n\nvar RENDERERS: {\n [name: string]: FilterSelectRenderer\n} = {\n string: ListSelect,\n text: ListSelect,\n email: ListSelect,\n tel: ListSelect,\n password: ListSelect,\n integer: ListSelect,\n float: ListSelect,\n number: ListSelect,\n select: ListSelect,\n boolean: ListSelect,\n checkbox: ListSelect,\n month: ListSelect,\n week: ListSelect,\n date: ListSelect,\n time: ListSelect,\n datetime: ListSelect,\n color: ListSelect,\n progress: ListSelect,\n link: ListSelect,\n image: ListSelect,\n json5: ListSelect\n}\n\nexport function registerRenderer(type: string, renderer: FilterSelectRenderer) {\n RENDERERS[type] = renderer\n}\n\nexport function unregisterRenderer(type: string): void {\n delete RENDERERS[type]\n}\n\nexport function getRenderers(): { [name: string]: FilterSelectRenderer } {\n return { ...RENDERERS }\n}\n\nexport function getRenderer(type: string | FilterSelectRenderer): FilterSelectRenderer {\n if (typeof type == 'function') {\n return type\n }\n\n return RENDERERS[type || 'text'] || ListSelect\n}\n"]}
@@ -6,3 +6,5 @@ export * from './renderers';
6
6
  export * from './handlers';
7
7
  export * from './formatters';
8
8
  export * from './gutters';
9
+ export * from './interfaces';
10
+ export * from './search-form';
package/dist/src/index.js CHANGED
@@ -6,4 +6,6 @@ export * from './renderers';
6
6
  export * from './handlers';
7
7
  export * from './formatters';
8
8
  export * from './gutters';
9
+ export * from './interfaces';
10
+ export * from './search-form';
9
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAE7B,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA","sourcesContent":["export * from './configure/zero-config'\nexport * from './data-grist'\nexport * from './data-report'\n\nexport * from './editors'\nexport * from './renderers'\nexport * from './handlers'\nexport * from './formatters'\nexport * from './gutters'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAE7B,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AAEzB,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA","sourcesContent":["export * from './configure/zero-config'\nexport * from './data-grist'\nexport * from './data-report'\n\nexport * from './editors'\nexport * from './renderers'\nexport * from './handlers'\nexport * from './formatters'\nexport * from './gutters'\n\nexport * from './interfaces'\nexport * from './search-form'\n"]}
@@ -0,0 +1,2 @@
1
+ export * from './ox-search-field';
2
+ export * from './ox-grist-search-form';
@@ -0,0 +1,3 @@
1
+ export * from './ox-search-field';
2
+ export * from './ox-grist-search-form';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/interfaces/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA","sourcesContent":["export * from './ox-search-field'\nexport * from './ox-grist-search-form'\n"]}
@@ -0,0 +1,6 @@
1
+ export declare type QueryFilterRangeValue = [from: number, to: number];
2
+ export declare type QueryFilter = {
3
+ name: string;
4
+ operator?: string;
5
+ value: any;
6
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ox-grist-search-form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ox-grist-search-form.js","sourceRoot":"","sources":["../../../src/interfaces/ox-grist-search-form.ts"],"names":[],"mappings":"","sourcesContent":["export type QueryFilterRangeValue = [from: number, to: number]\n\nexport type QueryFilter = {\n name: string\n operator?: string\n value: any\n}\n"]}
@@ -0,0 +1,39 @@
1
+ export declare type OXSearchFieldType = 'select' | 'checkbox' | 'text' | 'number';
2
+ export interface OXFieldOptionProps {
3
+ name?: string;
4
+ value: string;
5
+ }
6
+ export interface OXBasicFieldProps {
7
+ name: string;
8
+ type?: OXSearchFieldType;
9
+ hidden?: boolean;
10
+ id?: string;
11
+ placeholder?: string;
12
+ handlers?: Record<string, (event: Event) => void>;
13
+ defaultValue?: any;
14
+ operator?: string;
15
+ }
16
+ export interface OXTextFieldProps extends OXBasicFieldProps {
17
+ defaultValue?: string;
18
+ }
19
+ export interface OXNumberFieldProps extends OXBasicFieldProps {
20
+ min?: number;
21
+ max?: number;
22
+ step: number;
23
+ defaultValue?: number;
24
+ }
25
+ export interface OXObjectFieldProps extends OXBasicFieldProps {
26
+ field: string;
27
+ queryName: string;
28
+ defaultValue?: Record<string, any>;
29
+ }
30
+ export interface OXSelectFieldProps extends OXBasicFieldProps {
31
+ searchEnable?: boolean;
32
+ options: OXFieldOptionProps[];
33
+ defaultValue?: any;
34
+ }
35
+ export interface OXCheckboxFieldProps extends OXBasicFieldProps {
36
+ indeterminate?: boolean;
37
+ defaultValue?: boolean;
38
+ }
39
+ export declare type OXSearchFieldProps = OXTextFieldProps | OXNumberFieldProps | OXObjectFieldProps | OXSelectFieldProps | OXCheckboxFieldProps;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ox-search-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ox-search-field.js","sourceRoot":"","sources":["../../../src/interfaces/ox-search-field.ts"],"names":[],"mappings":"","sourcesContent":["export type OXSearchFieldType = 'select' | 'checkbox' | 'text' | 'number'\n\nexport interface OXFieldOptionProps {\n name?: string\n value: string\n}\n\nexport interface OXBasicFieldProps {\n name: string\n type?: OXSearchFieldType\n hidden?: boolean\n id?: string\n placeholder?: string\n handlers?: Record<string, (event: Event) => void>\n defaultValue?: any\n operator?: string\n}\n\nexport interface OXTextFieldProps extends OXBasicFieldProps {\n defaultValue?: string\n}\n\nexport interface OXNumberFieldProps extends OXBasicFieldProps {\n min?: number\n max?: number\n step: number\n defaultValue?: number\n}\n\nexport interface OXObjectFieldProps extends OXBasicFieldProps {\n field: string\n queryName: string\n defaultValue?: Record<string, any>\n}\n\nexport interface OXSelectFieldProps extends OXBasicFieldProps {\n searchEnable?: boolean\n options: OXFieldOptionProps[]\n defaultValue?: any\n}\n\nexport interface OXCheckboxFieldProps extends OXBasicFieldProps {\n indeterminate?: boolean\n defaultValue?: boolean\n}\n\nexport type OXSearchFieldProps =\n | OXTextFieldProps\n | OXNumberFieldProps\n | OXObjectFieldProps\n | OXSelectFieldProps\n | OXCheckboxFieldProps\n"]}
@@ -0,0 +1,7 @@
1
+ export * from './ox-search-form';
2
+ export * from './ox-grist-search-form';
3
+ export * from './ox-basic-field';
4
+ export * from './ox-checkbox-field';
5
+ export * from './ox-number-field';
6
+ export * from './ox-select-field';
7
+ export * from './ox-text-field';
@@ -0,0 +1,8 @@
1
+ export * from './ox-search-form';
2
+ export * from './ox-grist-search-form';
3
+ export * from './ox-basic-field';
4
+ export * from './ox-checkbox-field';
5
+ export * from './ox-number-field';
6
+ export * from './ox-select-field';
7
+ export * from './ox-text-field';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/search-form/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA;AACtC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA","sourcesContent":["export * from './ox-search-form'\nexport * from './ox-grist-search-form'\nexport * from './ox-basic-field'\nexport * from './ox-checkbox-field'\nexport * from './ox-number-field'\nexport * from './ox-select-field'\nexport * from './ox-text-field'\n"]}
@@ -0,0 +1,18 @@
1
+ import { LitElement } from 'lit-element';
2
+ import { OXBasicFieldProps } from '../interfaces/ox-search-field';
3
+ export declare abstract class OXBasicField extends LitElement {
4
+ static styles: import("lit-element").CSSResult[];
5
+ field: OXBasicFieldProps;
6
+ private form;
7
+ value?: any;
8
+ abstract setDefaultValue(defaultValue: unknown): void;
9
+ get input(): HTMLInputElement | HTMLSelectElement;
10
+ connectedCallback(): void;
11
+ disconnectedCallback(): void;
12
+ firstUpdated(): void;
13
+ private findFormElement;
14
+ private registerCustomEventHandlers;
15
+ private registerBasicEventHandlers;
16
+ private appendFormData;
17
+ private submit;
18
+ }
@@ -0,0 +1,75 @@
1
+ import { css, LitElement } from 'lit-element';
2
+ export class OXBasicField extends LitElement {
3
+ constructor() {
4
+ super(...arguments);
5
+ this.form = null;
6
+ }
7
+ get input() {
8
+ if (!this.field.name)
9
+ throw new Error('No name property provided');
10
+ const input = this.renderRoot.querySelector(`input[name=${this.field.name}],select[name=${this.field.name}]`);
11
+ if (!input)
12
+ throw new Error('Failed to find input element');
13
+ return input;
14
+ }
15
+ connectedCallback() {
16
+ var _a;
17
+ super.connectedCallback();
18
+ this.form = this.findFormElement();
19
+ (_a = this.form) === null || _a === void 0 ? void 0 : _a.addEventListener('formdata', this.appendFormData.bind(this));
20
+ }
21
+ disconnectedCallback() {
22
+ var _a;
23
+ super.disconnectedCallback();
24
+ (_a = this.form) === null || _a === void 0 ? void 0 : _a.removeEventListener('formdata', this.appendFormData.bind(this));
25
+ this.form = null;
26
+ }
27
+ firstUpdated() {
28
+ const { handlers } = this.field || {};
29
+ this.registerBasicEventHandlers();
30
+ if (handlers)
31
+ this.registerCustomEventHandlers(handlers);
32
+ if (this.field.defaultValue !== undefined)
33
+ this.setDefaultValue(this.field.defaultValue);
34
+ }
35
+ findFormElement() {
36
+ const rootNode = this.getRootNode();
37
+ const forms = Array.from(rootNode.querySelectorAll('form'));
38
+ return forms.find((form) => form.contains(this)) || null;
39
+ }
40
+ registerCustomEventHandlers(handlers) {
41
+ const eventNames = Object.keys(handlers);
42
+ if (!eventNames.length)
43
+ return;
44
+ eventNames.forEach((eventName) => this.input.addEventListener(eventName, handlers[eventName]));
45
+ }
46
+ registerBasicEventHandlers() {
47
+ this.input.onkeydown = (event) => {
48
+ if (event.key === 'Enter')
49
+ this.submit();
50
+ };
51
+ }
52
+ appendFormData({ formData }) {
53
+ formData.append(this.field.name, this.value);
54
+ }
55
+ submit() {
56
+ if (this.form)
57
+ this.dispatchEvent(new CustomEvent('submit-field', { composed: true, bubbles: true }));
58
+ }
59
+ }
60
+ OXBasicField.styles = [
61
+ css `
62
+ input,
63
+ select {
64
+ background-color: transparent;
65
+ border: none;
66
+ box-sizing: border-box;
67
+ outline: none;
68
+ padding: 4px 9px;
69
+ font-size: var(--fontsize-default, 14px);
70
+ color: var(--primary-text-color, #476172);
71
+ font-weight: bold;
72
+ }
73
+ `
74
+ ];
75
+ //# sourceMappingURL=ox-basic-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ox-basic-field.js","sourceRoot":"","sources":["../../../src/search-form/ox-basic-field.ts"],"names":[],"mappings":"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","sourcesContent":["import { css, LitElement } from 'lit-element'\n\nimport { OXBasicFieldProps } from '../interfaces/ox-search-field'\n\nexport abstract class OXBasicField extends LitElement {\n static styles = [\n css`\n input,\n select {\n background-color: transparent;\n border: none;\n box-sizing: border-box;\n outline: none;\n padding: 4px 9px;\n font-size: var(--fontsize-default, 14px);\n color: var(--primary-text-color, #476172);\n font-weight: bold;\n }\n `\n ]\n\n field!: OXBasicFieldProps\n\n private form: HTMLFormElement | null = null\n value?: any\n\n abstract setDefaultValue(defaultValue: unknown): void\n\n get input(): HTMLInputElement | HTMLSelectElement {\n if (!this.field.name) throw new Error('No name property provided')\n const input: HTMLInputElement | null = this.renderRoot.querySelector(\n `input[name=${this.field.name}],select[name=${this.field.name}]`\n )\n if (!input) throw new Error('Failed to find input element')\n\n return input\n }\n\n override connectedCallback(): void {\n super.connectedCallback()\n this.form = this.findFormElement()\n this.form?.addEventListener('formdata', this.appendFormData.bind(this))\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback()\n this.form?.removeEventListener('formdata', this.appendFormData.bind(this))\n this.form = null\n }\n\n override firstUpdated(): void {\n const { handlers } = this.field || {}\n\n this.registerBasicEventHandlers()\n if (handlers) this.registerCustomEventHandlers(handlers)\n if (this.field.defaultValue !== undefined) this.setDefaultValue(this.field.defaultValue)\n }\n\n private findFormElement(): HTMLFormElement | null {\n const rootNode: HTMLElement = this.getRootNode() as HTMLElement\n const forms: HTMLFormElement[] = Array.from(rootNode.querySelectorAll('form'))\n\n return forms.find((form: HTMLFormElement) => form.contains(this)) || null\n }\n\n private registerCustomEventHandlers(handlers: Record<string, (event: Event) => void>): void {\n const eventNames: string[] = Object.keys(handlers)\n if (!eventNames.length) return\n\n eventNames.forEach((eventName: string) => this.input.addEventListener(eventName, handlers[eventName]))\n }\n\n private registerBasicEventHandlers(): void {\n this.input.onkeydown = (event: KeyboardEvent) => {\n if (event.key === 'Enter') this.submit()\n }\n }\n\n private appendFormData({ formData }: FormDataEvent): void {\n formData.append(this.field.name, this.value)\n }\n\n private submit(): void {\n if (this.form) this.dispatchEvent(new CustomEvent('submit-field', { composed: true, bubbles: true }))\n }\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import { TemplateResult } from 'lit';
2
+ import { OXCheckboxFieldProps } from '..';
3
+ import { OXBasicField } from './ox-basic-field';
4
+ export declare class OXCheckboxField extends OXBasicField {
5
+ field: OXCheckboxFieldProps;
6
+ value?: boolean;
7
+ static styles: import("lit").CSSResult[];
8
+ setDefaultValue(defaultValue: boolean): void;
9
+ render(): TemplateResult;
10
+ private onClickHandler;
11
+ }
@@ -0,0 +1,60 @@
1
+ import { __decorate } from "tslib";
2
+ import { css, html } from 'lit';
3
+ import { ifDefined } from 'lit-html/directives/if-defined.js';
4
+ import { customElement, property } from 'lit/decorators.js';
5
+ import { OXBasicField } from './ox-basic-field';
6
+ let OXCheckboxField = class OXCheckboxField extends OXBasicField {
7
+ setDefaultValue(defaultValue) {
8
+ this.value = defaultValue;
9
+ }
10
+ render() {
11
+ const { name, hidden, placeholder, id } = this.field;
12
+ return html `<label ?hidden=${hidden}>
13
+ <input
14
+ id=${ifDefined(id)}
15
+ type="checkbox"
16
+ name=${name}
17
+ .checked=${Boolean(this.value)}
18
+ @click=${this.onClickHandler.bind(this)}
19
+ />
20
+ ${placeholder || name}
21
+ </label>`;
22
+ }
23
+ onClickHandler() {
24
+ const checkbox = this.input;
25
+ if (!this.field.indeterminate) {
26
+ this.value = !this.value;
27
+ }
28
+ else {
29
+ if (this.value === false) {
30
+ this.value = undefined;
31
+ checkbox.indeterminate = true;
32
+ }
33
+ else if (this.value === undefined) {
34
+ this.value = true;
35
+ }
36
+ else {
37
+ this.value = false;
38
+ }
39
+ }
40
+ }
41
+ };
42
+ OXCheckboxField.styles = [
43
+ css `
44
+ label {
45
+ font-size: var(--fontsize-default, 14px);
46
+ color: var(--primary-text-color, #476172);
47
+ }
48
+ `
49
+ ];
50
+ __decorate([
51
+ property({ type: Object })
52
+ ], OXCheckboxField.prototype, "field", void 0);
53
+ __decorate([
54
+ property({ type: Boolean })
55
+ ], OXCheckboxField.prototype, "value", void 0);
56
+ OXCheckboxField = __decorate([
57
+ customElement('ox-checkbox-field')
58
+ ], OXCheckboxField);
59
+ export { OXCheckboxField };
60
+ //# sourceMappingURL=ox-checkbox-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ox-checkbox-field.js","sourceRoot":"","sources":["../../../src/search-form/ox-checkbox-field.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAkB,MAAM,KAAK,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAG3D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAG/C,IAAa,eAAe,GAA5B,MAAa,eAAgB,SAAQ,YAAY;IAa/C,eAAe,CAAC,YAAqB;QACnC,IAAI,CAAC,KAAK,GAAG,YAAY,CAAA;IAC3B,CAAC;IAED,MAAM;QACJ,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAA;QAEpD,OAAO,IAAI,CAAA,kBAAkB,MAAM;;aAE1B,SAAS,CAAC,EAAE,CAAC;;eAEX,IAAI;mBACA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;iBACrB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;;QAEvC,WAAW,IAAI,IAAI;aACd,CAAA;IACX,CAAC;IAEO,cAAc;QACpB,MAAM,QAAQ,GAAqB,IAAI,CAAC,KAAyB,CAAA;QAEjE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;YAC7B,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAA;SACzB;aAAM;YACL,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;gBACxB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAA;gBACtB,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAA;aAC9B;iBAAM,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;gBACnC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;aAClB;iBAAM;gBACL,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;aACnB;SACF;IACH,CAAC;CACF,CAAA;AA5CQ,sBAAM,GAAG;IACd,GAAG,CAAA;;;;;KAKF;CACF,CAAA;AAV2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;8CAA6B;AAC3B;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;8CAAgB;AAFjC,eAAe;IAD3B,aAAa,CAAC,mBAAmB,CAAC;GACtB,eAAe,CAgD3B;SAhDY,eAAe","sourcesContent":["import { css, html, TemplateResult } from 'lit'\nimport { ifDefined } from 'lit-html/directives/if-defined.js'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport { OXCheckboxFieldProps } from '..'\nimport { OXBasicField } from './ox-basic-field'\n\n@customElement('ox-checkbox-field')\nexport class OXCheckboxField extends OXBasicField {\n @property({ type: Object }) field!: OXCheckboxFieldProps\n @property({ type: Boolean }) value?: boolean\n\n static styles = [\n css`\n label {\n font-size: var(--fontsize-default, 14px);\n color: var(--primary-text-color, #476172);\n }\n `\n ]\n\n setDefaultValue(defaultValue: boolean): void {\n this.value = defaultValue\n }\n\n render(): TemplateResult {\n const { name, hidden, placeholder, id } = this.field\n\n return html`<label ?hidden=${hidden}>\n <input\n id=${ifDefined(id)}\n type=\"checkbox\"\n name=${name}\n .checked=${Boolean(this.value)}\n @click=${this.onClickHandler.bind(this)}\n />\n ${placeholder || name}\n </label>`\n }\n\n private onClickHandler(): void {\n const checkbox: HTMLInputElement = this.input as HTMLInputElement\n\n if (!this.field.indeterminate) {\n this.value = !this.value\n } else {\n if (this.value === false) {\n this.value = undefined\n checkbox.indeterminate = true\n } else if (this.value === undefined) {\n this.value = true\n } else {\n this.value = false\n }\n }\n }\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import { GristConfig } from '../types';
2
+ import { LitElement, TemplateResult } from 'lit';
3
+ import { QueryFilter } from '..';
4
+ export declare class OXGristSearchForm extends LitElement {
5
+ config: GristConfig;
6
+ defaultOperator: string;
7
+ private timeout?;
8
+ render(): TemplateResult;
9
+ private convertToSearchFields;
10
+ get queryFilters(): QueryFilter[];
11
+ }
@@ -0,0 +1,177 @@
1
+ import { __decorate } from "tslib";
2
+ import { LitElement, html } from 'lit';
3
+ import { customElement, property } from 'lit/decorators.js';
4
+ let OXGristSearchForm = class OXGristSearchForm extends LitElement {
5
+ constructor() {
6
+ super(...arguments);
7
+ this.defaultOperator = 'eq';
8
+ }
9
+ render() {
10
+ const fields = this.convertToSearchFields(this.config);
11
+ return html ` <ox-search-form .fields=${fields}></ox-search-form> `;
12
+ }
13
+ convertToSearchFields(config) {
14
+ const supportingTypes = ['string', 'integer', 'number', 'float', 'select', 'boolean', 'checkbox'];
15
+ return config.columns
16
+ .filter((columnConfig) => supportingTypes.indexOf(columnConfig.type) >= 0)
17
+ .map((columnConfig) => {
18
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
19
+ let fieldProps = {
20
+ name: columnConfig.name,
21
+ hidden: Boolean(columnConfig.hidden),
22
+ placeholder: typeof columnConfig.label === 'string' ? columnConfig.label : columnConfig.name
23
+ };
24
+ switch (columnConfig.type) {
25
+ case 'string':
26
+ return {
27
+ ...fieldProps,
28
+ type: 'text'
29
+ };
30
+ case 'integer':
31
+ return {
32
+ ...fieldProps,
33
+ type: 'number',
34
+ min: ((_b = (_a = columnConfig.record) === null || _a === void 0 ? void 0 : _a.options) === null || _b === void 0 ? void 0 : _b.min) || undefined,
35
+ max: ((_d = (_c = columnConfig.record) === null || _c === void 0 ? void 0 : _c.options) === null || _d === void 0 ? void 0 : _d.max) || undefined
36
+ };
37
+ case 'number':
38
+ return {
39
+ ...fieldProps,
40
+ type: 'number',
41
+ min: ((_f = (_e = columnConfig.record) === null || _e === void 0 ? void 0 : _e.options) === null || _f === void 0 ? void 0 : _f.min) || undefined,
42
+ max: ((_h = (_g = columnConfig.record) === null || _g === void 0 ? void 0 : _g.options) === null || _h === void 0 ? void 0 : _h.max) || undefined
43
+ };
44
+ case 'float':
45
+ return {
46
+ ...fieldProps,
47
+ type: 'number',
48
+ min: ((_k = (_j = columnConfig.record) === null || _j === void 0 ? void 0 : _j.options) === null || _k === void 0 ? void 0 : _k.min) || undefined,
49
+ max: ((_m = (_l = columnConfig.record) === null || _l === void 0 ? void 0 : _l.options) === null || _m === void 0 ? void 0 : _m.max) || undefined
50
+ };
51
+ case 'select':
52
+ return {
53
+ ...fieldProps,
54
+ type: 'select',
55
+ searchEnable: true,
56
+ options: (_o = columnConfig.record) === null || _o === void 0 ? void 0 : _o.options.map((option) => {
57
+ if (typeof option === 'string') {
58
+ return { value: option };
59
+ }
60
+ else if (option.display && option.value) {
61
+ return {
62
+ name: option.display,
63
+ value: option.value
64
+ };
65
+ }
66
+ else {
67
+ throw new Error('Unexpected option property');
68
+ }
69
+ })
70
+ };
71
+ case 'boolean':
72
+ return {
73
+ ...fieldProps,
74
+ type: 'checkbox',
75
+ indeterminate: true
76
+ };
77
+ case 'checkbox':
78
+ return {
79
+ ...fieldProps,
80
+ type: 'checkbox',
81
+ indeterminate: true
82
+ };
83
+ default:
84
+ throw new Error('Non-supported type of column config');
85
+ }
86
+ });
87
+ // return searchFields
88
+ // .filter((searchField: string) => fieldMap.has(searchField))
89
+ // .map((searchField: string) => {
90
+ // const columnConfig: ColumnConfig | undefined = fieldMap.get(searchField)
91
+ // if (!columnConfig) throw new Error('No matched column config')
92
+ // let fieldProps: OXBasicFieldProps = {
93
+ // name: columnConfig.name,
94
+ // hidden: Boolean(columnConfig.hidden),
95
+ // label: typeof columnConfig.label === 'string' ? columnConfig.label : undefined
96
+ // }
97
+ // switch (columnConfig.type) {
98
+ // case 'string':
99
+ // return {
100
+ // ...fieldProps,
101
+ // type: 'text'
102
+ // } as OXTextFieldProps
103
+ // case 'integer':
104
+ // return {
105
+ // ...fieldProps,
106
+ // type: 'number',
107
+ // min: columnConfig.record?.options?.min || undefined,
108
+ // max: columnConfig.record?.options?.max || undefined
109
+ // } as OXNumberFieldProps
110
+ // case 'number':
111
+ // return {
112
+ // ...fieldProps,
113
+ // type: 'number',
114
+ // min: columnConfig.record?.options?.min || undefined,
115
+ // max: columnConfig.record?.options?.max || undefined
116
+ // } as OXNumberFieldProps
117
+ // case 'float':
118
+ // return {
119
+ // ...fieldProps,
120
+ // type: 'number',
121
+ // min: columnConfig.record?.options?.min || undefined,
122
+ // max: columnConfig.record?.options?.max || undefined
123
+ // } as OXNumberFieldProps
124
+ // case 'select':
125
+ // return {
126
+ // ...fieldProps,
127
+ // type: 'select',
128
+ // searchEnable: true,
129
+ // options: columnConfig.record?.options.map((option: Record<string, any>) => ({
130
+ // name: option.display,
131
+ // value: option.value
132
+ // }))
133
+ // } as OXSelectFieldProps
134
+ // case 'boolean':
135
+ // return {
136
+ // ...fieldProps,
137
+ // type: 'checkbox',
138
+ // indeterminate: true
139
+ // } as OXCheckboxFieldProps
140
+ // case 'checkbox':
141
+ // return {
142
+ // ...fieldProps,
143
+ // type: 'checkbox',
144
+ // indeterminate: true
145
+ // } as OXCheckboxFieldProps
146
+ // default:
147
+ // throw new Error('Non-supported type of column config')
148
+ // }
149
+ // })
150
+ }
151
+ get queryFilters() {
152
+ const searchForm = this.renderRoot.querySelector('ox-search-form');
153
+ if (!searchForm)
154
+ throw new Error('Failed to find search form');
155
+ const searchFields = searchForm.searchFields;
156
+ return searchFields
157
+ .filter(({ value }) => value !== null && value !== undefined && value !== '')
158
+ .map((searchField) => {
159
+ return {
160
+ name: searchField.field.name,
161
+ operator: searchField.field.operator || this.defaultOperator,
162
+ value: searchField.value
163
+ };
164
+ });
165
+ }
166
+ };
167
+ __decorate([
168
+ property({ type: Object })
169
+ ], OXGristSearchForm.prototype, "config", void 0);
170
+ __decorate([
171
+ property({ type: String })
172
+ ], OXGristSearchForm.prototype, "defaultOperator", void 0);
173
+ OXGristSearchForm = __decorate([
174
+ customElement('ox-grist-search-form')
175
+ ], OXGristSearchForm);
176
+ export { OXGristSearchForm };
177
+ //# sourceMappingURL=ox-grist-search-form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ox-grist-search-form.js","sourceRoot":"","sources":["../../../src/search-form/ox-grist-search-form.ts"],"names":[],"mappings":"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","sourcesContent":["import { ColumnConfig, GristConfig } from '../types'\nimport { LitElement, TemplateResult, html } from 'lit'\nimport {\n OXBasicFieldProps,\n OXCheckboxFieldProps,\n OXNumberFieldProps,\n OXSearchFieldProps,\n OXSearchFieldTypes,\n OXSearchForm,\n OXSelectFieldProps,\n OXTextFieldProps,\n QueryFilter\n} from '..'\nimport { customElement, property } from 'lit/decorators.js'\n\n@customElement('ox-grist-search-form')\nexport class OXGristSearchForm extends LitElement {\n @property({ type: Object }) config!: GristConfig\n @property({ type: String }) defaultOperator: string = 'eq'\n\n private timeout?: NodeJS.Timeout\n\n render(): TemplateResult {\n const fields: OXSearchFieldProps[] = this.convertToSearchFields(this.config)\n\n return html` <ox-search-form .fields=${fields}></ox-search-form> `\n }\n\n private convertToSearchFields(config: GristConfig): OXSearchFieldProps[] {\n const supportingTypes: string[] = ['string', 'integer', 'number', 'float', 'select', 'boolean', 'checkbox']\n\n return config.columns\n .filter((columnConfig: ColumnConfig) => supportingTypes.indexOf(columnConfig.type) >= 0)\n .map((columnConfig: ColumnConfig) => {\n let fieldProps: OXBasicFieldProps = {\n name: columnConfig.name,\n hidden: Boolean(columnConfig.hidden),\n placeholder: typeof columnConfig.label === 'string' ? columnConfig.label : columnConfig.name\n }\n\n switch (columnConfig.type) {\n case 'string':\n return {\n ...fieldProps,\n type: 'text'\n } as OXTextFieldProps\n\n case 'integer':\n return {\n ...fieldProps,\n type: 'number',\n min: columnConfig.record?.options?.min || undefined,\n max: columnConfig.record?.options?.max || undefined\n } as OXNumberFieldProps\n\n case 'number':\n return {\n ...fieldProps,\n type: 'number',\n min: columnConfig.record?.options?.min || undefined,\n max: columnConfig.record?.options?.max || undefined\n } as OXNumberFieldProps\n\n case 'float':\n return {\n ...fieldProps,\n type: 'number',\n min: columnConfig.record?.options?.min || undefined,\n max: columnConfig.record?.options?.max || undefined\n } as OXNumberFieldProps\n\n case 'select':\n return {\n ...fieldProps,\n type: 'select',\n searchEnable: true,\n options: columnConfig.record?.options.map((option: string | Record<string, any>) => {\n if (typeof option === 'string') {\n return { value: option }\n } else if (option.display && option.value) {\n return {\n name: option.display,\n value: option.value\n }\n } else {\n throw new Error('Unexpected option property')\n }\n })\n } as OXSelectFieldProps\n\n case 'boolean':\n return {\n ...fieldProps,\n type: 'checkbox',\n indeterminate: true\n } as OXCheckboxFieldProps\n\n case 'checkbox':\n return {\n ...fieldProps,\n type: 'checkbox',\n indeterminate: true\n } as OXCheckboxFieldProps\n\n default:\n throw new Error('Non-supported type of column config')\n }\n })\n\n // return searchFields\n // .filter((searchField: string) => fieldMap.has(searchField))\n // .map((searchField: string) => {\n // const columnConfig: ColumnConfig | undefined = fieldMap.get(searchField)\n // if (!columnConfig) throw new Error('No matched column config')\n\n // let fieldProps: OXBasicFieldProps = {\n // name: columnConfig.name,\n // hidden: Boolean(columnConfig.hidden),\n // label: typeof columnConfig.label === 'string' ? columnConfig.label : undefined\n // }\n\n // switch (columnConfig.type) {\n // case 'string':\n // return {\n // ...fieldProps,\n // type: 'text'\n // } as OXTextFieldProps\n\n // case 'integer':\n // return {\n // ...fieldProps,\n // type: 'number',\n // min: columnConfig.record?.options?.min || undefined,\n // max: columnConfig.record?.options?.max || undefined\n // } as OXNumberFieldProps\n\n // case 'number':\n // return {\n // ...fieldProps,\n // type: 'number',\n // min: columnConfig.record?.options?.min || undefined,\n // max: columnConfig.record?.options?.max || undefined\n // } as OXNumberFieldProps\n\n // case 'float':\n // return {\n // ...fieldProps,\n // type: 'number',\n // min: columnConfig.record?.options?.min || undefined,\n // max: columnConfig.record?.options?.max || undefined\n // } as OXNumberFieldProps\n\n // case 'select':\n // return {\n // ...fieldProps,\n // type: 'select',\n // searchEnable: true,\n // options: columnConfig.record?.options.map((option: Record<string, any>) => ({\n // name: option.display,\n // value: option.value\n // }))\n // } as OXSelectFieldProps\n\n // case 'boolean':\n // return {\n // ...fieldProps,\n // type: 'checkbox',\n // indeterminate: true\n // } as OXCheckboxFieldProps\n\n // case 'checkbox':\n // return {\n // ...fieldProps,\n // type: 'checkbox',\n // indeterminate: true\n // } as OXCheckboxFieldProps\n\n // default:\n // throw new Error('Non-supported type of column config')\n // }\n // })\n }\n\n get queryFilters(): QueryFilter[] {\n const searchForm: OXSearchForm | null = this.renderRoot.querySelector<OXSearchForm>('ox-search-form')\n if (!searchForm) throw new Error('Failed to find search form')\n\n const searchFields: OXSearchFieldTypes[] = searchForm.searchFields\n\n return searchFields\n .filter(({ value }: OXSearchFieldTypes) => value !== null && value !== undefined && value !== '')\n .map((searchField: OXSearchFieldTypes) => {\n return {\n name: searchField.field.name,\n operator: searchField.field.operator || this.defaultOperator,\n value: searchField.value\n }\n })\n }\n}\n"]}
@@ -0,0 +1,14 @@
1
+ import '@material/mwc-icon';
2
+ import { CSSResult, TemplateResult } from 'lit';
3
+ import { OXNumberFieldProps } from '..';
4
+ import { OXBasicField } from './ox-basic-field';
5
+ export declare class OXNumberField extends OXBasicField {
6
+ field: OXNumberFieldProps;
7
+ value?: number;
8
+ setDefaultValue(defaultValue: number): void;
9
+ static styles: CSSResult[];
10
+ render(): TemplateResult;
11
+ decrease(): void;
12
+ increase(): void;
13
+ private onChangeHandler;
14
+ }