@operato/data-grist 0.3.14 → 0.3.15

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 (54) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/assets/images/no-image.png +0 -0
  3. package/demo/index.html +12 -4
  4. package/dist/src/data-card/event-handlers/data-card-click-handler.d.ts +6 -0
  5. package/dist/src/data-card/event-handlers/data-card-click-handler.js +16 -0
  6. package/dist/src/data-card/event-handlers/data-card-click-handler.js.map +1 -0
  7. package/dist/src/data-card/event-handlers/data-card-dblclick-handler.d.ts +6 -0
  8. package/dist/src/data-card/event-handlers/data-card-dblclick-handler.js +16 -0
  9. package/dist/src/data-card/event-handlers/data-card-dblclick-handler.js.map +1 -0
  10. package/dist/src/data-list/event-handlers/data-list-click-handler.d.ts +6 -0
  11. package/dist/src/data-list/event-handlers/data-list-click-handler.js +16 -0
  12. package/dist/src/data-list/event-handlers/data-list-click-handler.js.map +1 -0
  13. package/dist/src/data-list/event-handlers/data-list-dblclick-handler.d.ts +6 -0
  14. package/dist/src/data-list/event-handlers/data-list-dblclick-handler.js +16 -0
  15. package/dist/src/data-list/event-handlers/data-list-dblclick-handler.js.map +1 -0
  16. package/dist/src/interfaces/index.d.ts +2 -0
  17. package/dist/src/interfaces/index.js +3 -0
  18. package/dist/src/interfaces/index.js.map +1 -0
  19. package/dist/src/interfaces/ox-grist-search-form.d.ts +6 -0
  20. package/dist/src/interfaces/ox-grist-search-form.js +2 -0
  21. package/dist/src/interfaces/ox-grist-search-form.js.map +1 -0
  22. package/dist/src/interfaces/ox-search-field.d.ts +39 -0
  23. package/dist/src/interfaces/ox-search-field.js +2 -0
  24. package/dist/src/interfaces/ox-search-field.js.map +1 -0
  25. package/dist/src/renderers/image-renderer.js +12 -4
  26. package/dist/src/renderers/image-renderer.js.map +1 -1
  27. package/dist/src/search-form/index.d.ts +7 -0
  28. package/dist/src/search-form/index.js +8 -0
  29. package/dist/src/search-form/index.js.map +1 -0
  30. package/dist/src/search-form/ox-basic-field.d.ts +18 -0
  31. package/dist/src/search-form/ox-basic-field.js +75 -0
  32. package/dist/src/search-form/ox-basic-field.js.map +1 -0
  33. package/dist/src/search-form/ox-checkbox-field.d.ts +11 -0
  34. package/dist/src/search-form/ox-checkbox-field.js +60 -0
  35. package/dist/src/search-form/ox-checkbox-field.js.map +1 -0
  36. package/dist/src/search-form/ox-grist-search-form.d.ts +11 -0
  37. package/dist/src/search-form/ox-grist-search-form.js +177 -0
  38. package/dist/src/search-form/ox-grist-search-form.js.map +1 -0
  39. package/dist/src/search-form/ox-number-field.d.ts +14 -0
  40. package/dist/src/search-form/ox-number-field.js +112 -0
  41. package/dist/src/search-form/ox-number-field.js.map +1 -0
  42. package/dist/src/search-form/ox-search-form.d.ts +15 -0
  43. package/dist/src/search-form/ox-search-form.js +53 -0
  44. package/dist/src/search-form/ox-search-form.js.map +1 -0
  45. package/dist/src/search-form/ox-select-field.d.ts +21 -0
  46. package/dist/src/search-form/ox-select-field.js +181 -0
  47. package/dist/src/search-form/ox-select-field.js.map +1 -0
  48. package/dist/src/search-form/ox-text-field.d.ts +11 -0
  49. package/dist/src/search-form/ox-text-field.js +60 -0
  50. package/dist/src/search-form/ox-text-field.js.map +1 -0
  51. package/dist/tsconfig.tsbuildinfo +1 -1
  52. package/package.json +7 -7
  53. package/src/renderers/image-renderer.ts +14 -5
  54. package/yarn-error.log +16718 -0
package/CHANGELOG.md CHANGED
@@ -3,6 +3,16 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ### [0.3.15](https://github.com/hatiolab/operato/compare/v0.3.14...v0.3.15) (2022-01-17)
7
+
8
+
9
+ ### :bug: Bug Fix
10
+
11
+ * applied no-image.png to data-grist image-renderer ([18612a6](https://github.com/hatiolab/operato/commit/18612a6ce8bca7dda7edda1168a79c689cae84cc))
12
+ * data-grist image-renderer width limit ([4eda4ed](https://github.com/hatiolab/operato/commit/4eda4edc35863a4803c15f4efd65416bcc33cc8d))
13
+
14
+
15
+
6
16
  ### [0.3.14](https://github.com/hatiolab/operato/compare/v0.3.13...v0.3.14) (2022-01-16)
7
17
 
8
18
 
Binary file
package/demo/index.html CHANGED
@@ -85,9 +85,13 @@
85
85
  description: `말레이시아 세티아알람-${start + idx + 1}`
86
86
  },
87
87
  thumbnail:
88
- idx % 2
88
+ idx % 4 === 0
89
+ ? '' /* no source */
90
+ : idx % 4 === 1
89
91
  ? `http://www.hatiolab.com/assets/img/operato-biz3.png`
90
- : `http://www.hatiolab.com/assets/img/thingsboard-30.png`,
92
+ : idx % 4 === 2
93
+ ? `http://www.hatiolab.com/assets/img/thingsboard-30.png`
94
+ : `http://www.hatiolab.com/wrong-url.png` /* wrong source */,
91
95
  role: ['admin', 'worker', 'tester'][idx % 3],
92
96
  color: idx % 2 ? `#87f018` : `#180f87`,
93
97
  rate: Math.round(Math.random() * 100),
@@ -187,7 +191,9 @@
187
191
  record: {
188
192
  editable: true
189
193
  },
190
- filter: true,
194
+ filter: {
195
+ operator: 'i_like'
196
+ },
191
197
  sortable: true,
192
198
  width: 130,
193
199
  validation: function (after, before, record, column) {
@@ -232,7 +238,8 @@
232
238
  editable: true
233
239
  },
234
240
  filter: {
235
- options: ['admin', 'worker', 'tester', 'xyz', 'VERY']
241
+ options: ['admin', 'worker', 'tester', 'xyz', 'VERY'],
242
+ multiple: true /* this case, operator should be 'in' */
236
243
  },
237
244
  sortable: true,
238
245
  width: 120
@@ -244,6 +251,7 @@
244
251
  record: {
245
252
  editable: true
246
253
  },
254
+ filter: true,
247
255
  sortable: true,
248
256
  width: 50
249
257
  },
@@ -0,0 +1,6 @@
1
+ /**
2
+ * ox-card 의 click handler
3
+ *
4
+ * - handler의 this 는 ox-card임.
5
+ */
6
+ export declare function dataCardClickHandler(e: MouseEvent): void;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * ox-card 의 click handler
3
+ *
4
+ * - handler의 this 는 ox-card임.
5
+ */
6
+ export function dataCardClickHandler(e) {
7
+ e.stopPropagation();
8
+ /* target should be 'ox-record-card' */
9
+ var target = e.target;
10
+ var { record, rowIndex } = target;
11
+ /* do rows click handler */
12
+ // var { click: rowsClick } = this.config.rows.handlers
13
+ // var columns = this.config.columns
14
+ // rowsClick && rowsClick(columns, this.data, null /* column */, record, rowIndex, target)
15
+ }
16
+ //# sourceMappingURL=data-card-click-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-card-click-handler.js","sourceRoot":"","sources":["../../../../src/data-card/event-handlers/data-card-click-handler.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,CAAa;IAChD,CAAC,CAAC,eAAe,EAAE,CAAA;IAEnB,uCAAuC;IACvC,IAAI,MAAM,GAAG,CAAC,CAAC,MAAuB,CAAA;IACtC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;IAEjC,2BAA2B;IAC3B,uDAAuD;IACvD,oCAAoC;IACpC,0FAA0F;AAC5F,CAAC","sourcesContent":["import { DataCardField } from '../data-card-field'\n\n/**\n * ox-card 의 click handler\n *\n * - handler의 this 는 ox-card임.\n */\nexport function dataCardClickHandler(e: MouseEvent): void {\n e.stopPropagation()\n\n /* target should be 'ox-record-card' */\n var target = e.target as DataCardField\n var { record, rowIndex } = target\n\n /* do rows click handler */\n // var { click: rowsClick } = this.config.rows.handlers\n // var columns = this.config.columns\n // rowsClick && rowsClick(columns, this.data, null /* column */, record, rowIndex, target)\n}\n"]}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * ox-card 의 dblclick handler
3
+ *
4
+ * - handler의 this 는 ox-card임.
5
+ */
6
+ export declare function dataCardDblclickHandler(e: MouseEvent): void;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * ox-card 의 dblclick handler
3
+ *
4
+ * - handler의 this 는 ox-card임.
5
+ */
6
+ export function dataCardDblclickHandler(e) {
7
+ e.stopPropagation();
8
+ /* target should be 'ox-record-card' */
9
+ var target = e.target;
10
+ var { record, rowIndex } = target;
11
+ /* do rows dblclick handler */
12
+ // var { click: rowsDblclick } = this.config.rows.handlers
13
+ // var columns = this.config.columns
14
+ // rowsDblclick && rowsDblclick(columns, this.data, null /* column */, record, rowIndex, target)
15
+ }
16
+ //# sourceMappingURL=data-card-dblclick-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-card-dblclick-handler.js","sourceRoot":"","sources":["../../../../src/data-card/event-handlers/data-card-dblclick-handler.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,CAAa;IACnD,CAAC,CAAC,eAAe,EAAE,CAAA;IAEnB,uCAAuC;IACvC,IAAI,MAAM,GAAG,CAAC,CAAC,MAAuB,CAAA;IACtC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;IAEjC,8BAA8B;IAC9B,0DAA0D;IAC1D,oCAAoC;IACpC,gGAAgG;AAClG,CAAC","sourcesContent":["import { DataCardField } from '../data-card-field'\n\n/**\n * ox-card 의 dblclick handler\n *\n * - handler의 this 는 ox-card임.\n */\nexport function dataCardDblclickHandler(e: MouseEvent): void {\n e.stopPropagation()\n\n /* target should be 'ox-record-card' */\n var target = e.target as DataCardField\n var { record, rowIndex } = target\n\n /* do rows dblclick handler */\n // var { click: rowsDblclick } = this.config.rows.handlers\n // var columns = this.config.columns\n // rowsDblclick && rowsDblclick(columns, this.data, null /* column */, record, rowIndex, target)\n}\n"]}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * ox-list 의 click handler
3
+ *
4
+ * - handler의 this 는 ox-list임.
5
+ */
6
+ export declare function dataListClickHandler(e: MouseEvent): void;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * ox-list 의 click handler
3
+ *
4
+ * - handler의 this 는 ox-list임.
5
+ */
6
+ export function dataListClickHandler(e) {
7
+ e.stopPropagation();
8
+ /* target should be 'record-partial' */
9
+ var target = e.target;
10
+ var { record, rowIndex } = target;
11
+ /* do rows click handler */
12
+ // var { click: rowsClick } = this.config.rows.handlers
13
+ // var columns = this.config.columns
14
+ // rowsClick && rowsClick(columns, this.data, null /* column */, record, rowIndex, target)
15
+ }
16
+ //# sourceMappingURL=data-list-click-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-list-click-handler.js","sourceRoot":"","sources":["../../../../src/data-list/event-handlers/data-list-click-handler.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,CAAa;IAChD,CAAC,CAAC,eAAe,EAAE,CAAA;IAEnB,uCAAuC;IACvC,IAAI,MAAM,GAAG,CAAC,CAAC,MAAuB,CAAA;IACtC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;IAEjC,2BAA2B;IAC3B,uDAAuD;IACvD,oCAAoC;IACpC,0FAA0F;AAC5F,CAAC","sourcesContent":["import { DataListField } from '../data-list-field'\n\n/**\n * ox-list 의 click handler\n *\n * - handler의 this 는 ox-list임.\n */\nexport function dataListClickHandler(e: MouseEvent): void {\n e.stopPropagation()\n\n /* target should be 'record-partial' */\n var target = e.target as DataListField\n var { record, rowIndex } = target\n\n /* do rows click handler */\n // var { click: rowsClick } = this.config.rows.handlers\n // var columns = this.config.columns\n // rowsClick && rowsClick(columns, this.data, null /* column */, record, rowIndex, target)\n}\n"]}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * ox-list 의 dblclick handler
3
+ *
4
+ * - handler의 this 는 ox-list임.
5
+ */
6
+ export declare function dataListDblclickHandler(e: MouseEvent): void;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * ox-list 의 dblclick handler
3
+ *
4
+ * - handler의 this 는 ox-list임.
5
+ */
6
+ export function dataListDblclickHandler(e) {
7
+ e.stopPropagation();
8
+ /* target should be 'record-partial' */
9
+ var target = e.target;
10
+ var { record, rowIndex } = target;
11
+ /* do rows dblclick handler */
12
+ // var { click: rowsDblclick } = this.config.rows.handlers
13
+ // var columns = this.config.columns
14
+ // rowsDblclick && rowsDblclick(columns, this.data, null /* column */, record, rowIndex, target)
15
+ }
16
+ //# sourceMappingURL=data-list-dblclick-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-list-dblclick-handler.js","sourceRoot":"","sources":["../../../../src/data-list/event-handlers/data-list-dblclick-handler.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,CAAa;IACnD,CAAC,CAAC,eAAe,EAAE,CAAA;IAEnB,uCAAuC;IACvC,IAAI,MAAM,GAAG,CAAC,CAAC,MAAuB,CAAA;IACtC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;IAEjC,8BAA8B;IAC9B,0DAA0D;IAC1D,oCAAoC;IACpC,gGAAgG;AAClG,CAAC","sourcesContent":["import { DataListField } from '../data-list-field'\n\n/**\n * ox-list 의 dblclick handler\n *\n * - handler의 this 는 ox-list임.\n */\nexport function dataListDblclickHandler(e: MouseEvent): void {\n e.stopPropagation()\n\n /* target should be 'record-partial' */\n var target = e.target as DataListField\n var { record, rowIndex } = target\n\n /* do rows dblclick handler */\n // var { click: rowsDblclick } = this.config.rows.handlers\n // var columns = this.config.columns\n // rowsDblclick && rowsDblclick(columns, this.data, null /* column */, record, rowIndex, target)\n}\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"]}
@@ -1,9 +1,11 @@
1
1
  import { html } from 'lit';
2
+ const IMAGE_FALLBACK = new URL('../../../assets/images/no-image.png', import.meta.url).href;
2
3
  export const ImageRenderer = (value, column, record, rowIndex, field) => {
3
- if (!value)
4
- return html ``;
5
4
  let src;
6
- if (typeof value === 'string') {
5
+ if (!value) {
6
+ src = IMAGE_FALLBACK;
7
+ }
8
+ else if (typeof value === 'string') {
7
9
  src = value;
8
10
  }
9
11
  else {
@@ -11,6 +13,12 @@ export const ImageRenderer = (value, column, record, rowIndex, field) => {
11
13
  requestAnimationFrame(() => URL.revokeObjectURL(src));
12
14
  }
13
15
  const { width, height } = column.record.options || {};
14
- return html ` <img src=${src} alt="upload image" width=${width} height=${height} />`;
16
+ return html ` <img
17
+ src=${src}
18
+ width=${width}
19
+ height=${height}
20
+ style="max-width: 100%;"
21
+ onerror="this.src !== '${IMAGE_FALLBACK}' && (this.src = '${IMAGE_FALLBACK}')"
22
+ />`;
15
23
  };
16
24
  //# sourceMappingURL=image-renderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"image-renderer.js","sourceRoot":"","sources":["../../../src/renderers/image-renderer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAE1B,MAAM,CAAC,MAAM,aAAa,GAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;IACrF,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA,EAAE,CAAA;IAEzB,IAAI,GAAW,CAAA;IAEf,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,GAAG,GAAG,KAAK,CAAA;KACZ;SAAM;QACL,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;QAChC,qBAAqB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAA;KACtD;IAED,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAA;IAErD,OAAO,IAAI,CAAA,aAAa,GAAG,6BAA6B,KAAK,WAAW,MAAM,KAAK,CAAA;AACrF,CAAC,CAAA","sourcesContent":["import { FieldRenderer } from '../types'\nimport { html } from 'lit'\n\nexport const ImageRenderer: FieldRenderer = (value, column, record, rowIndex, field) => {\n if (!value) return html``\n\n let src: string\n\n if (typeof value === 'string') {\n src = value\n } else {\n src = URL.createObjectURL(value)\n requestAnimationFrame(() => URL.revokeObjectURL(src))\n }\n\n const { width, height } = column.record.options || {}\n\n return html` <img src=${src} alt=\"upload image\" width=${width} height=${height} />`\n}\n"]}
1
+ {"version":3,"file":"image-renderer.js","sourceRoot":"","sources":["../../../src/renderers/image-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAI1B,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,qCAAqC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA;AAE3F,MAAM,CAAC,MAAM,aAAa,GAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;IACrF,IAAI,GAAW,CAAA;IAEf,IAAI,CAAC,KAAK,EAAE;QACV,GAAG,GAAG,cAAc,CAAA;KACrB;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QACpC,GAAG,GAAG,KAAK,CAAA;KACZ;SAAM;QACL,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;QAChC,qBAAqB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAA;KACtD;IAED,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAA;IAErD,OAAO,IAAI,CAAA;UACH,GAAG;YACD,KAAK;aACJ,MAAM;;6BAEU,cAAc,qBAAqB,cAAc;KACzE,CAAA;AACL,CAAC,CAAA","sourcesContent":["import { html } from 'lit'\n\nimport { FieldRenderer } from '../types'\n\nconst IMAGE_FALLBACK = new URL('../../../assets/images/no-image.png', import.meta.url).href\n\nexport const ImageRenderer: FieldRenderer = (value, column, record, rowIndex, field) => {\n let src: string\n\n if (!value) {\n src = IMAGE_FALLBACK\n } else if (typeof value === 'string') {\n src = value\n } else {\n src = URL.createObjectURL(value)\n requestAnimationFrame(() => URL.revokeObjectURL(src))\n }\n\n const { width, height } = column.record.options || {}\n\n return html` <img\n src=${src}\n width=${width}\n height=${height}\n style=\"max-width: 100%;\"\n onerror=\"this.src !== '${IMAGE_FALLBACK}' && (this.src = '${IMAGE_FALLBACK}')\"\n />`\n}\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
+ }