@operato/data-grist 1.13.16 → 1.14.3

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 (69) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/src/configure/rows-option-builder.js +2 -1
  3. package/dist/src/configure/rows-option-builder.js.map +1 -1
  4. package/dist/src/configure/zero-config.js +1 -0
  5. package/dist/src/configure/zero-config.js.map +1 -1
  6. package/dist/src/data-card/event-handlers/record-card-click-handler.js +1 -1
  7. package/dist/src/data-card/event-handlers/record-card-click-handler.js.map +1 -1
  8. package/dist/src/data-grist.d.ts +225 -3
  9. package/dist/src/data-grist.js +195 -3
  10. package/dist/src/data-grist.js.map +1 -1
  11. package/dist/src/data-list/event-handlers/record-partial-click-handler.js +1 -1
  12. package/dist/src/data-list/event-handlers/record-partial-click-handler.js.map +1 -1
  13. package/dist/src/data-manipulator.d.ts +6 -6
  14. package/dist/src/data-manipulator.js +44 -29
  15. package/dist/src/data-manipulator.js.map +1 -1
  16. package/dist/src/handlers/contextmenu-tree-mutation.js +1 -19
  17. package/dist/src/handlers/contextmenu-tree-mutation.js.map +1 -1
  18. package/dist/src/types.d.ts +1 -0
  19. package/dist/src/types.js.map +1 -1
  20. package/dist/tsconfig.tsbuildinfo +1 -1
  21. package/package.json +3 -3
  22. package/src/configure/rows-option-builder.ts +11 -1
  23. package/src/configure/zero-config.ts +1 -0
  24. package/src/data-card/event-handlers/record-card-click-handler.ts +1 -1
  25. package/src/data-grist.ts +250 -3
  26. package/src/data-list/event-handlers/record-partial-click-handler.ts +1 -1
  27. package/src/data-manipulator.ts +52 -31
  28. package/src/handlers/contextmenu-tree-mutation.ts +1 -19
  29. package/src/types.ts +1 -0
  30. package/themes/grist-theme.css +1 -1
  31. package/dist/src/editors/image-input.d.ts +0 -7
  32. package/dist/src/editors/image-input.js +0 -31
  33. package/dist/src/editors/image-input.js.map +0 -1
  34. package/dist/src/editors/input-editors.d.ts +0 -68
  35. package/dist/src/editors/input-editors.js +0 -329
  36. package/dist/src/editors/input-editors.js.map +0 -1
  37. package/dist/src/renderers/boolean-renderer.d.ts +0 -2
  38. package/dist/src/renderers/boolean-renderer.js +0 -30
  39. package/dist/src/renderers/boolean-renderer.js.map +0 -1
  40. package/dist/src/renderers/color-renderer.d.ts +0 -2
  41. package/dist/src/renderers/color-renderer.js +0 -6
  42. package/dist/src/renderers/color-renderer.js.map +0 -1
  43. package/dist/src/renderers/date-renderer.d.ts +0 -2
  44. package/dist/src/renderers/date-renderer.js +0 -52
  45. package/dist/src/renderers/date-renderer.js.map +0 -1
  46. package/dist/src/renderers/image-renderer.d.ts +0 -2
  47. package/dist/src/renderers/image-renderer.js +0 -24
  48. package/dist/src/renderers/image-renderer.js.map +0 -1
  49. package/dist/src/renderers/json5-renderer.d.ts +0 -2
  50. package/dist/src/renderers/json5-renderer.js +0 -7
  51. package/dist/src/renderers/json5-renderer.js.map +0 -1
  52. package/dist/src/renderers/link-renderer.d.ts +0 -2
  53. package/dist/src/renderers/link-renderer.js +0 -12
  54. package/dist/src/renderers/link-renderer.js.map +0 -1
  55. package/dist/src/renderers/password-renderer.d.ts +0 -2
  56. package/dist/src/renderers/password-renderer.js +0 -4
  57. package/dist/src/renderers/password-renderer.js.map +0 -1
  58. package/dist/src/renderers/progress-renderer.d.ts +0 -2
  59. package/dist/src/renderers/progress-renderer.js +0 -68
  60. package/dist/src/renderers/progress-renderer.js.map +0 -1
  61. package/dist/src/renderers/select-renderer.d.ts +0 -2
  62. package/dist/src/renderers/select-renderer.js +0 -15
  63. package/dist/src/renderers/select-renderer.js.map +0 -1
  64. package/dist/src/renderers/text-renderer.d.ts +0 -2
  65. package/dist/src/renderers/text-renderer.js +0 -6
  66. package/dist/src/renderers/text-renderer.js.map +0 -1
  67. package/dist/stories/index.stories.d.ts +0 -33
  68. package/dist/stories/index.stories.js +0 -33
  69. package/dist/stories/index.stories.js.map +0 -1
package/src/types.ts CHANGED
@@ -627,6 +627,7 @@ export type ImexConfig = {
627
627
  export type RowsConfig = {
628
628
  accumulator?: boolean
629
629
  appendable: boolean
630
+ editable: boolean
630
631
  insertable: boolean
631
632
  selectable?: RowSelectableConfig
632
633
  groups: GroupConfig[]
@@ -41,7 +41,7 @@ body {
41
41
 
42
42
  --grid-record-background-color: var(--theme-white-color);
43
43
  --grid-record-odd-background-color: #f9f7f5;
44
- --grid-record-padding: 0 0 0 var(--padding-default);
44
+ --grid-record-padding: 0 5px 0 5px;
45
45
  --grid-record-color: var(--secondary-color);
46
46
  --grid-record-color-hover: var(--primary-color);
47
47
  --grid-record-wide-fontsize: var(--fontsize-small);
@@ -1,7 +0,0 @@
1
- import '@operato/input/ox-input-image.js';
2
- import { InputEditor } from './input-editors';
3
- export declare class ImageInput extends InputEditor {
4
- get editorTemplate(): import("lit").TemplateResult<1>;
5
- _onchange(e: Event): void;
6
- formatFromEditor(e: Event): string | File;
7
- }
@@ -1,31 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import '@operato/input/ox-input-image.js';
3
- import { html } from 'lit';
4
- import { customElement } from 'lit/decorators.js';
5
- import { InputEditor } from './input-editors';
6
- let ImageInput = class ImageInput extends InputEditor {
7
- get editorTemplate() {
8
- return html ` <ox-input-image .value=${this.value}></ox-input-image> `;
9
- }
10
- _onchange(e) {
11
- e.stopPropagation();
12
- this._dirtyValue = this.formatFromEditor(e);
13
- this._onfocusout();
14
- }
15
- formatFromEditor(e) {
16
- var _a;
17
- // value가 image file object인지, image url인지 확인
18
- const input = e.target;
19
- if ((_a = input.files) === null || _a === void 0 ? void 0 : _a[0]) {
20
- return input.files[0];
21
- }
22
- else {
23
- return input.value;
24
- }
25
- }
26
- };
27
- ImageInput = __decorate([
28
- customElement('ox-image-input')
29
- ], ImageInput);
30
- export { ImageInput };
31
- //# sourceMappingURL=image-input.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"image-input.js","sourceRoot":"","sources":["../../../src/editors/image-input.ts"],"names":[],"mappings":";AAAA,OAAO,kCAAkC,CAAA;AAEzC,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAGtC,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,WAAW;IACzC,IAAI,cAAc;QAChB,OAAO,IAAI,CAAA,2BAA2B,IAAI,CAAC,KAAK,qBAAqB,CAAA;IACvE,CAAC;IAED,SAAS,CAAC,CAAQ;QAChB,CAAC,CAAC,eAAe,EAAE,CAAA;QACnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAA;QAC3C,IAAI,CAAC,WAAW,EAAE,CAAA;IACpB,CAAC;IAED,gBAAgB,CAAC,CAAQ;;QACvB,6CAA6C;QAC7C,MAAM,KAAK,GAAG,CAAC,CAAC,MAA0B,CAAA;QAC1C,IAAI,MAAA,KAAK,CAAC,KAAK,0CAAG,CAAC,CAAC,EAAE,CAAC;YACrB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACvB,CAAC;aAAM,CAAC;YACN,OAAO,KAAK,CAAC,KAAK,CAAA;QACpB,CAAC;IACH,CAAC;CACF,CAAA;AApBY,UAAU;IADtB,aAAa,CAAC,gBAAgB,CAAC;GACnB,UAAU,CAoBtB","sourcesContent":["import '@operato/input/ox-input-image.js'\n\nimport { html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\nimport { InputEditor } from './input-editors'\n\n@customElement('ox-image-input')\nexport class ImageInput extends InputEditor {\n get editorTemplate() {\n return html` <ox-input-image .value=${this.value}></ox-input-image> `\n }\n\n _onchange(e: Event) {\n e.stopPropagation()\n this._dirtyValue = this.formatFromEditor(e)\n this._onfocusout()\n }\n\n formatFromEditor(e: Event) {\n // value가 image file object인지, image url인지 확인\n const input = e.target as HTMLInputElement\n if (input.files?.[0]) {\n return input.files[0]\n } else {\n return input.value\n }\n }\n}\n"]}
@@ -1,68 +0,0 @@
1
- import { LitElement } from 'lit';
2
- import { DataGridField } from '../data-grid/data-grid-field';
3
- import { ColumnConfig, GristRecord } from '../types';
4
- export declare class InputEditor extends LitElement {
5
- static styles: import("lit").CSSResult;
6
- value?: any;
7
- column: ColumnConfig;
8
- record: GristRecord;
9
- rowIndex?: number;
10
- field?: DataGridField;
11
- row?: number;
12
- protected _dirtyValue?: any;
13
- render(): import("lit").TemplateResult<1>;
14
- get editor(): HTMLElement | null;
15
- firstUpdated(): Promise<void>;
16
- select(): void;
17
- focus(): void;
18
- formatForEditor(value: any): any;
19
- formatFromEditor(e: Event): any;
20
- _onfocusout(): void;
21
- _onchange(e: Event): void;
22
- _onclick(e: Event): void;
23
- _ondblclick(e: Event): void;
24
- get editorTemplate(): import("lit").TemplateResult<1>;
25
- }
26
- export declare class TextInput extends InputEditor {
27
- get editorTemplate(): import("lit").TemplateResult<1>;
28
- }
29
- export declare class EmailInput extends InputEditor {
30
- get editorTemplate(): import("lit").TemplateResult<1>;
31
- }
32
- export declare class TelInput extends InputEditor {
33
- get editorTemplate(): import("lit").TemplateResult<1>;
34
- }
35
- export declare class NumberInput extends InputEditor {
36
- formatFromEditor(e: Event): number;
37
- get editorTemplate(): import("lit").TemplateResult<1>;
38
- }
39
- export declare class PasswordInput extends InputEditor {
40
- get editorTemplate(): import("lit").TemplateResult<1>;
41
- }
42
- export declare class DateInput extends InputEditor {
43
- get editorTemplate(): import("lit").TemplateResult<1>;
44
- }
45
- export declare class MonthInput extends InputEditor {
46
- get editorTemplate(): import("lit").TemplateResult<1>;
47
- }
48
- export declare class WeekInput extends InputEditor {
49
- get editorTemplate(): import("lit").TemplateResult<1>;
50
- }
51
- export declare class TimeInput extends InputEditor {
52
- get editorTemplate(): import("lit").TemplateResult<1>;
53
- }
54
- export declare class DateTimeInput extends InputEditor {
55
- formatForEditor(timestamp: any): string;
56
- formatFromEditor(e: Event): number;
57
- get editorTemplate(): import("lit").TemplateResult<1>;
58
- }
59
- export declare class ColorInput extends InputEditor {
60
- get editorTemplate(): import("lit").TemplateResult<1>;
61
- }
62
- export declare class CheckboxInput extends InputEditor {
63
- formatFromEditor(e: Event): boolean;
64
- get editorTemplate(): import("lit").TemplateResult<1>;
65
- }
66
- export declare class Select extends InputEditor {
67
- get editorTemplate(): import("lit").TemplateResult<1>;
68
- }
@@ -1,329 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { css, html, LitElement } from 'lit';
3
- import { customElement, property } from 'lit/decorators.js';
4
- import { ZERO_COLUMN, ZERO_RECORD } from '../configure/zero-config';
5
- const STYLE = css `
6
- :host {
7
- display: block;
8
-
9
- width: 100%;
10
- height: 100%;
11
-
12
- border: 0;
13
- background-color: transparent;
14
- }
15
-
16
- :host > * {
17
- display: flex;
18
-
19
- width: 100%;
20
- height: 100%;
21
-
22
- border: 0;
23
- background-color: transparent;
24
-
25
- box-sizing: border-box;
26
-
27
- font-size: inherit;
28
- font-family: inherit;
29
- }
30
-
31
- :host > style {
32
- display: none;
33
- }
34
-
35
- :host > input[type='checkbox'] {
36
- width: initial;
37
- margin: auto;
38
- }
39
- input[type='checkbox'],
40
- input[type='radio'] {
41
- zoom: var(--grist-input-zoom);
42
- }
43
- *:focus {
44
- outline: none;
45
- }
46
-
47
- input[type='file'] {
48
- opacity: 0%;
49
- }
50
-
51
- @media screen and (max-width: 460px) {
52
- :host > * {
53
- border: initial;
54
- background-color: initial;
55
- }
56
- *:focus {
57
- outline: none;
58
- }
59
- }
60
- `;
61
- let InputEditor = class InputEditor extends LitElement {
62
- constructor() {
63
- super(...arguments);
64
- this.column = ZERO_COLUMN;
65
- this.record = ZERO_RECORD;
66
- }
67
- render() {
68
- return this.editorTemplate;
69
- }
70
- get editor() {
71
- return this.renderRoot.firstElementChild;
72
- }
73
- async firstUpdated() {
74
- this.renderRoot.addEventListener('change', this._onchange.bind(this));
75
- this.renderRoot.addEventListener('focusout', this._onfocusout.bind(this));
76
- this.renderRoot.addEventListener('click', this._onclick.bind(this));
77
- this.renderRoot.addEventListener('dblclick', this._ondblclick.bind(this));
78
- const align = this.column.record.align;
79
- if (align) {
80
- this.style.textAlign = align;
81
- this.style.textAlignLast = align; /* for select */
82
- }
83
- const name = this.column.name || '';
84
- this.value = this._dirtyValue = this.formatForEditor(this.record[name]);
85
- this.focus();
86
- await this.updateComplete;
87
- this.select();
88
- }
89
- select() {
90
- var _a;
91
- if ((_a = this.editor) === null || _a === void 0 ? void 0 : _a.select) {
92
- return this.editor.select();
93
- }
94
- }
95
- focus() {
96
- var _a;
97
- (_a = this.editor) === null || _a === void 0 ? void 0 : _a.focus();
98
- }
99
- formatForEditor(value) {
100
- return value === undefined ? '' : value;
101
- }
102
- formatFromEditor(e) {
103
- return e.target.value;
104
- }
105
- _onfocusout() {
106
- if (this._dirtyValue !== this.value) {
107
- this.dispatchEvent(new CustomEvent('field-change', {
108
- bubbles: true,
109
- composed: true,
110
- detail: {
111
- before: this.value,
112
- after: this._dirtyValue,
113
- column: this.column,
114
- record: this.record,
115
- row: this.row
116
- }
117
- }));
118
- }
119
- }
120
- _onchange(e) {
121
- e.stopPropagation();
122
- this._dirtyValue = this.formatFromEditor(e);
123
- }
124
- _onclick(e) {
125
- e.stopPropagation();
126
- }
127
- _ondblclick(e) {
128
- e.stopPropagation();
129
- }
130
- get editorTemplate() {
131
- return html ``;
132
- }
133
- };
134
- InputEditor.styles = STYLE;
135
- __decorate([
136
- property({ type: Object })
137
- ], InputEditor.prototype, "value", void 0);
138
- __decorate([
139
- property({ type: Object })
140
- ], InputEditor.prototype, "column", void 0);
141
- __decorate([
142
- property({ type: Object })
143
- ], InputEditor.prototype, "record", void 0);
144
- __decorate([
145
- property({ type: Number })
146
- ], InputEditor.prototype, "rowIndex", void 0);
147
- __decorate([
148
- property({ type: Object })
149
- ], InputEditor.prototype, "field", void 0);
150
- __decorate([
151
- property({ type: Number })
152
- ], InputEditor.prototype, "row", void 0);
153
- InputEditor = __decorate([
154
- customElement('ox-input-editor')
155
- ], InputEditor);
156
- export { InputEditor };
157
- let TextInput = class TextInput extends InputEditor {
158
- get editorTemplate() {
159
- return html ` <input type="text" .value=${this.value} /> `;
160
- }
161
- };
162
- TextInput = __decorate([
163
- customElement('ox-text-input')
164
- ], TextInput);
165
- export { TextInput };
166
- let EmailInput = class EmailInput extends InputEditor {
167
- get editorTemplate() {
168
- return html ` <input type="email" .value=${this.value} /> `;
169
- }
170
- };
171
- EmailInput = __decorate([
172
- customElement('ox-email-input')
173
- ], EmailInput);
174
- export { EmailInput };
175
- let TelInput = class TelInput extends InputEditor {
176
- get editorTemplate() {
177
- return html ` <input type="tel" .value=${this.value} /> `;
178
- }
179
- };
180
- TelInput = __decorate([
181
- customElement('ox-tel-input')
182
- ], TelInput);
183
- export { TelInput };
184
- let NumberInput = class NumberInput extends InputEditor {
185
- formatFromEditor(e) {
186
- let value = e.target.value;
187
- switch (this.column.type) {
188
- case 'float':
189
- return Number.parseFloat(value);
190
- case 'integer':
191
- return Number.parseInt(value);
192
- default:
193
- return Number(value);
194
- }
195
- }
196
- get editorTemplate() {
197
- var { min = -Infinity, max = Infinity } = this.column.record.options || {};
198
- return html ` <input type="number" .value=${this.value} .min=${Number(min)} .max=${Number(max)} /> `;
199
- }
200
- };
201
- NumberInput = __decorate([
202
- customElement('ox-number-input')
203
- ], NumberInput);
204
- export { NumberInput };
205
- let PasswordInput = class PasswordInput extends InputEditor {
206
- get editorTemplate() {
207
- return html ` <input type="password" .value=${this.value} /> `;
208
- }
209
- };
210
- PasswordInput = __decorate([
211
- customElement('ox-password-input')
212
- ], PasswordInput);
213
- export { PasswordInput };
214
- let DateInput = class DateInput extends InputEditor {
215
- get editorTemplate() {
216
- return html ` <input type="date" .value=${this.value} /> `;
217
- }
218
- };
219
- DateInput = __decorate([
220
- customElement('ox-date-input')
221
- ], DateInput);
222
- export { DateInput };
223
- let MonthInput = class MonthInput extends InputEditor {
224
- get editorTemplate() {
225
- return html ` <input type="month" .value=${this.value} /> `;
226
- }
227
- };
228
- MonthInput = __decorate([
229
- customElement('ox-month-input')
230
- ], MonthInput);
231
- export { MonthInput };
232
- let WeekInput = class WeekInput extends InputEditor {
233
- get editorTemplate() {
234
- return html ` <input type="week" .value=${this.value} /> `;
235
- }
236
- };
237
- WeekInput = __decorate([
238
- customElement('ox-week-input')
239
- ], WeekInput);
240
- export { WeekInput };
241
- let TimeInput = class TimeInput extends InputEditor {
242
- get editorTemplate() {
243
- return html ` <input type="time" .value=${this.value} /> `;
244
- }
245
- };
246
- TimeInput = __decorate([
247
- customElement('ox-time-input')
248
- ], TimeInput);
249
- export { TimeInput };
250
- let DateTimeInput = class DateTimeInput extends InputEditor {
251
- formatForEditor(timestamp) {
252
- if (!timestamp) {
253
- timestamp = Date.now();
254
- }
255
- var datetime = new Date(timestamp);
256
- var tzoffset = datetime.getTimezoneOffset() * 60000; //offset in milliseconds
257
- return new Date(timestamp - tzoffset).toISOString().slice(0, -1);
258
- }
259
- formatFromEditor(e) {
260
- var value = e.target.value;
261
- var datetime = new Date(value);
262
- return datetime.getTime();
263
- }
264
- get editorTemplate() {
265
- return html ` <input type="datetime-local" .value=${this.value} /> `;
266
- }
267
- };
268
- DateTimeInput = __decorate([
269
- customElement('ox-datetime-input')
270
- ], DateTimeInput);
271
- export { DateTimeInput };
272
- let ColorInput = class ColorInput extends InputEditor {
273
- get editorTemplate() {
274
- return html ` <input type="color" .value=${this.value} /> `;
275
- }
276
- };
277
- ColorInput = __decorate([
278
- customElement('ox-color-input')
279
- ], ColorInput);
280
- export { ColorInput };
281
- let CheckboxInput = class CheckboxInput extends InputEditor {
282
- formatFromEditor(e) {
283
- return e.target.checked;
284
- }
285
- get editorTemplate() {
286
- return html ` <input type="checkbox" .checked=${!!this.value} /> `;
287
- }
288
- };
289
- CheckboxInput = __decorate([
290
- customElement('ox-checkbox-input')
291
- ], CheckboxInput);
292
- export { CheckboxInput };
293
- let Select = class Select extends InputEditor {
294
- get editorTemplate() {
295
- var rowOptionField = this.record[this.column.record.rowOptionField || ''];
296
- var { options = [] } = rowOptionField ? rowOptionField : this.column.record;
297
- if (typeof options == 'function') {
298
- options = options.call(null, this.value, this.column, this.record, this.rowIndex, this.field);
299
- }
300
- options = options.map((option) => {
301
- switch (typeof option) {
302
- case 'string':
303
- return {
304
- display: option,
305
- value: option
306
- };
307
- case 'object':
308
- return {
309
- display: option.display,
310
- value: option.value
311
- };
312
- default:
313
- return option;
314
- }
315
- });
316
- return html `
317
- <select>
318
- ${options.map((option) => html `
319
- <option ?selected=${option.value == this.value} value=${option.value}>${option.display}</option>
320
- `)}
321
- </select>
322
- `;
323
- }
324
- };
325
- Select = __decorate([
326
- customElement('ox-select-input')
327
- ], Select);
328
- export { Select };
329
- //# sourceMappingURL=input-editors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"input-editors.js","sourceRoot":"","sources":["../../../src/editors/input-editors.ts"],"names":[],"mappings":"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","sourcesContent":["import { css, html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport { ZERO_COLUMN, ZERO_RECORD } from '../configure/zero-config'\nimport { DataGridField } from '../data-grid/data-grid-field'\nimport { ColumnConfig, GristRecord } from '../types'\n\nconst STYLE = css`\n :host {\n display: block;\n\n width: 100%;\n height: 100%;\n\n border: 0;\n background-color: transparent;\n }\n\n :host > * {\n display: flex;\n\n width: 100%;\n height: 100%;\n\n border: 0;\n background-color: transparent;\n\n box-sizing: border-box;\n\n font-size: inherit;\n font-family: inherit;\n }\n\n :host > style {\n display: none;\n }\n\n :host > input[type='checkbox'] {\n width: initial;\n margin: auto;\n }\n input[type='checkbox'],\n input[type='radio'] {\n zoom: var(--grist-input-zoom);\n }\n *:focus {\n outline: none;\n }\n\n input[type='file'] {\n opacity: 0%;\n }\n\n @media screen and (max-width: 460px) {\n :host > * {\n border: initial;\n background-color: initial;\n }\n *:focus {\n outline: none;\n }\n }\n`\n\n@customElement('ox-input-editor')\nexport class InputEditor extends LitElement {\n static styles = STYLE\n\n @property({ type: Object }) value?: any\n @property({ type: Object }) column: ColumnConfig = ZERO_COLUMN\n @property({ type: Object }) record: GristRecord = ZERO_RECORD\n @property({ type: Number }) rowIndex?: number\n @property({ type: Object }) field?: DataGridField\n @property({ type: Number }) row?: number\n\n protected _dirtyValue?: any\n\n render() {\n return this.editorTemplate\n }\n\n get editor(): HTMLElement | null {\n return this.renderRoot.firstElementChild as HTMLElement\n }\n\n async firstUpdated() {\n this.renderRoot.addEventListener('change', this._onchange.bind(this))\n this.renderRoot.addEventListener('focusout', this._onfocusout.bind(this))\n this.renderRoot.addEventListener('click', this._onclick.bind(this))\n this.renderRoot.addEventListener('dblclick', this._ondblclick.bind(this))\n\n const align = this.column.record.align\n if (align) {\n this.style.textAlign = align\n this.style.textAlignLast = align /* for select */\n }\n\n const name = this.column.name || ''\n this.value = this._dirtyValue = this.formatForEditor(this.record[name])\n\n this.focus()\n await this.updateComplete\n this.select()\n }\n\n select() {\n if ((this.editor as HTMLInputElement)?.select) {\n return (this.editor as HTMLInputElement).select()\n }\n }\n\n focus() {\n this.editor?.focus()\n }\n\n formatForEditor(value: any): any {\n return value === undefined ? '' : value\n }\n\n formatFromEditor(e: Event): any {\n return (e.target as HTMLInputElement).value\n }\n\n _onfocusout() {\n if (this._dirtyValue !== this.value) {\n this.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: this.value,\n after: this._dirtyValue,\n column: this.column,\n record: this.record,\n row: this.row\n }\n })\n )\n }\n }\n\n _onchange(e: Event): void {\n e.stopPropagation()\n\n this._dirtyValue = this.formatFromEditor(e)\n }\n\n _onclick(e: Event): void {\n e.stopPropagation()\n }\n\n _ondblclick(e: Event): void {\n e.stopPropagation()\n }\n\n get editorTemplate() {\n return html``\n }\n}\n\n@customElement('ox-text-input')\nexport class TextInput extends InputEditor {\n get editorTemplate() {\n return html` <input type=\"text\" .value=${this.value} /> `\n }\n}\n\n@customElement('ox-email-input')\nexport class EmailInput extends InputEditor {\n get editorTemplate() {\n return html` <input type=\"email\" .value=${this.value} /> `\n }\n}\n\n@customElement('ox-tel-input')\nexport class TelInput extends InputEditor {\n get editorTemplate() {\n return html` <input type=\"tel\" .value=${this.value} /> `\n }\n}\n\n@customElement('ox-number-input')\nexport class NumberInput extends InputEditor {\n formatFromEditor(e: Event) {\n let value = (e.target as HTMLInputElement).value\n\n switch (this.column.type) {\n case 'float':\n return Number.parseFloat(value)\n case 'integer':\n return Number.parseInt(value)\n default:\n return Number(value)\n }\n }\n\n get editorTemplate() {\n var { min = -Infinity, max = Infinity } = this.column.record.options || {}\n\n return html` <input type=\"number\" .value=${this.value} .min=${Number(min)} .max=${Number(max)} /> `\n }\n}\n\n@customElement('ox-password-input')\nexport class PasswordInput extends InputEditor {\n get editorTemplate() {\n return html` <input type=\"password\" .value=${this.value} /> `\n }\n}\n\n@customElement('ox-date-input')\nexport class DateInput extends InputEditor {\n get editorTemplate() {\n return html` <input type=\"date\" .value=${this.value} /> `\n }\n}\n\n@customElement('ox-month-input')\nexport class MonthInput extends InputEditor {\n get editorTemplate() {\n return html` <input type=\"month\" .value=${this.value} /> `\n }\n}\n\n@customElement('ox-week-input')\nexport class WeekInput extends InputEditor {\n get editorTemplate() {\n return html` <input type=\"week\" .value=${this.value} /> `\n }\n}\n\n@customElement('ox-time-input')\nexport class TimeInput extends InputEditor {\n get editorTemplate() {\n return html` <input type=\"time\" .value=${this.value} /> `\n }\n}\n\n@customElement('ox-datetime-input')\nexport class DateTimeInput extends InputEditor {\n formatForEditor(timestamp: any) {\n if (!timestamp) {\n timestamp = Date.now()\n }\n var datetime = new Date(timestamp)\n\n var tzoffset = datetime.getTimezoneOffset() * 60000 //offset in milliseconds\n\n return new Date(timestamp - tzoffset).toISOString().slice(0, -1)\n }\n\n formatFromEditor(e: Event) {\n var value = (e.target as HTMLInputElement).value\n var datetime = new Date(value)\n\n return datetime.getTime()\n }\n\n get editorTemplate() {\n return html` <input type=\"datetime-local\" .value=${this.value} /> `\n }\n}\n\n@customElement('ox-color-input')\nexport class ColorInput extends InputEditor {\n get editorTemplate() {\n return html` <input type=\"color\" .value=${this.value} /> `\n }\n}\n\n@customElement('ox-checkbox-input')\nexport class CheckboxInput extends InputEditor {\n formatFromEditor(e: Event) {\n return (e.target as HTMLInputElement).checked\n }\n\n get editorTemplate() {\n return html` <input type=\"checkbox\" .checked=${!!this.value} /> `\n }\n}\n\n@customElement('ox-select-input')\nexport class Select extends InputEditor {\n get editorTemplate() {\n var rowOptionField = this.record[this.column.record.rowOptionField || '']\n var { options = [] } = rowOptionField ? rowOptionField : this.column.record\n\n if (typeof options == 'function') {\n options = options.call(null, this.value, this.column, this.record, this.rowIndex, this.field)\n }\n\n options = options.map((option: any) => {\n switch (typeof option) {\n case 'string':\n return {\n display: option,\n value: option\n }\n case 'object':\n return {\n display: option.display,\n value: option.value\n }\n default:\n return option\n }\n })\n\n return html`\n <select>\n ${options.map(\n (option: any) => html`\n <option ?selected=${option.value == this.value} value=${option.value}>${option.display}</option>\n `\n )}\n </select>\n `\n }\n}\n"]}
@@ -1,2 +0,0 @@
1
- import { FieldRenderer } from '../types';
2
- export declare const BooleanRenderer: FieldRenderer;
@@ -1,30 +0,0 @@
1
- import { html } from 'lit';
2
- export const BooleanRenderer = (value, column, record, rowIndex, field) => {
3
- return html `
4
- <input
5
- type="checkbox"
6
- .checked=${!!value}
7
- ?disabled=${!column.record.editable}
8
- @click=${(e) => {
9
- /*
10
- * 특별하게, checkbox인 경우에, editor가 활성화되지 않아도, renderer에서 값을 변경할 수 있게 함.
11
- * checkbox가 클릭되면, 클릭에 의해 변경된 값을 레코드에 반영하기 위해서 value-changed 이벤트를 발생시킨다.
12
- *
13
- * 만일, readonly인 경우에는 click 이벤트가 발생하지 않으므로, 클릭으로 에디트할 수 없게 됨.
14
- */
15
- field.dispatchEvent(new CustomEvent('field-change', {
16
- bubbles: true,
17
- composed: true,
18
- detail: {
19
- before: value,
20
- after: e.target.checked,
21
- column: column,
22
- record: record,
23
- row: rowIndex
24
- }
25
- }));
26
- }}
27
- />
28
- `;
29
- };
30
- //# sourceMappingURL=boolean-renderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"boolean-renderer.js","sourceRoot":"","sources":["../../../src/renderers/boolean-renderer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAE1B,MAAM,CAAC,MAAM,eAAe,GAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;IACvF,OAAO,IAAI,CAAA;;;iBAGI,CAAC,CAAC,KAAK;kBACN,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ;eAC1B,CAAC,CAAQ,EAAE,EAAE;QACpB;;;;;WAKG;QACH,KAAK,CAAC,aAAa,CACjB,IAAI,WAAW,CAAC,cAAc,EAAE;YAC9B,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE;gBACN,MAAM,EAAE,KAAK;gBACb,KAAK,EAAG,CAAC,CAAC,MAA2B,CAAC,OAAO;gBAC7C,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,MAAM;gBACd,GAAG,EAAE,QAAQ;aACd;SACF,CAAC,CACH,CAAA;IACH,CAAC;;GAEJ,CAAA;AACH,CAAC,CAAA","sourcesContent":["import { FieldRenderer } from '../types'\nimport { html } from 'lit'\n\nexport const BooleanRenderer: FieldRenderer = (value, column, record, rowIndex, field) => {\n return html`\n <input\n type=\"checkbox\"\n .checked=${!!value}\n ?disabled=${!column.record.editable}\n @click=${(e: Event) => {\n /*\n * 특별하게, checkbox인 경우에, editor가 활성화되지 않아도, renderer에서 값을 변경할 수 있게 함.\n * checkbox가 클릭되면, 클릭에 의해 변경된 값을 레코드에 반영하기 위해서 value-changed 이벤트를 발생시킨다.\n *\n * 만일, readonly인 경우에는 click 이벤트가 발생하지 않으므로, 클릭으로 에디트할 수 없게 됨.\n */\n field.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: value,\n after: (e.target as HTMLInputElement).checked,\n column: column,\n record: record,\n row: rowIndex\n }\n })\n )\n }}\n />\n `\n}\n"]}
@@ -1,2 +0,0 @@
1
- import { FieldRenderer } from '../types';
2
- export declare const ColorRenderer: FieldRenderer;
@@ -1,6 +0,0 @@
1
- import { html } from 'lit';
2
- export const ColorRenderer = (value, column, record, rowIndex, field) => {
3
- value = value === undefined ? '#000' : value;
4
- return html ` <div style="display:block;background-color:${value}">${value}</div> `;
5
- };
6
- //# sourceMappingURL=color-renderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"color-renderer.js","sourceRoot":"","sources":["../../../src/renderers/color-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,KAAK,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAA;IAE5C,OAAO,IAAI,CAAA,+CAA+C,KAAK,KAAK,KAAK,SAAS,CAAA;AACpF,CAAC,CAAA","sourcesContent":["import { FieldRenderer } from '../types'\nimport { html } from 'lit'\n\nexport const ColorRenderer: FieldRenderer = (value, column, record, rowIndex, field) => {\n value = value === undefined ? '#000' : value\n\n return html` <div style=\"display:block;background-color:${value}\">${value}</div> `\n}\n"]}
@@ -1,2 +0,0 @@
1
- import { FieldRenderer } from '../types';
2
- export declare const DateRenderer: FieldRenderer;
@@ -1,52 +0,0 @@
1
- // TODO 로케일 설정에 따라서 포맷이 바뀌도록 해야한다.
2
- const DATETIME_OPTIONS = {
3
- year: 'numeric',
4
- month: 'numeric',
5
- day: 'numeric',
6
- hour: 'numeric',
7
- minute: 'numeric',
8
- second: 'numeric',
9
- hour12: false
10
- };
11
- const DATE_OPTIONS = {
12
- year: 'numeric',
13
- month: 'numeric',
14
- day: 'numeric'
15
- };
16
- const TIME_OPTIONS = {
17
- hour: 'numeric',
18
- minute: 'numeric',
19
- second: 'numeric'
20
- };
21
- const OPTIONS = {
22
- datetime: DATETIME_OPTIONS,
23
- time: TIME_OPTIONS,
24
- date: DATE_OPTIONS
25
- };
26
- function getsec(time) {
27
- var arr = time.split(':');
28
- return Number(arr[0]) * 3600 + Number(arr[1]) * 60 + (Number(arr[2]) || 0);
29
- }
30
- /*
31
- TODO date, time, month, week 등 datetime 이 외의 타입인 경우에는 문자열로 처리하도록 한다.
32
- 따라서, 이 경우는 타임존에 대한 처리가 불필요하다.
33
- */
34
- export const DateRenderer = (value, column, record, rowIndex, field) => {
35
- if (!value) {
36
- return '';
37
- }
38
- if (!isNaN(Number(value)))
39
- value = Number(value);
40
- var options = column.record.options || OPTIONS[column.type];
41
- var formatter = new Intl.DateTimeFormat(navigator.language, options);
42
- switch (column.type) {
43
- case 'datetime':
44
- return formatter.format(new Date(value));
45
- case 'date':
46
- return formatter.format(new Date(value));
47
- case 'time':
48
- default:
49
- return value;
50
- }
51
- };
52
- //# sourceMappingURL=date-renderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"date-renderer.js","sourceRoot":"","sources":["../../../src/renderers/date-renderer.ts"],"names":[],"mappings":"AAEA,kCAAkC;AAClC,MAAM,gBAAgB,GAAG;IACvB,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,GAAG,EAAE,SAAS;IACd,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,KAAK;CACd,CAAA;AAED,MAAM,YAAY,GAAG;IACnB,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,GAAG,EAAE,SAAS;CACf,CAAA;AAED,MAAM,YAAY,GAAG;IACnB,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;CAClB,CAAA;AAED,MAAM,OAAO,GAAG;IACd,QAAQ,EAAE,gBAAgB;IAC1B,IAAI,EAAE,YAAY;IAClB,IAAI,EAAE,YAAY;CACnB,CAAA;AAED,SAAS,MAAM,CAAC,IAAY;IAC1B,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACzB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;AAC5E,CAAC;AAED;;;EAGE;AACF,MAAM,CAAC,MAAM,YAAY,GAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;IACpF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAAE,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAEhD,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,IAAoC,CAAC,CAAA;IAC3F,IAAI,SAAS,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAEpE,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,UAAU;YACb,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;QAC1C,KAAK,MAAM;YACT,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;QAC1C,KAAK,MAAM,CAAC;QACZ;YACE,OAAO,KAAK,CAAA;IAChB,CAAC;AACH,CAAC,CAAA","sourcesContent":["import { FieldRenderer } from '../types'\n\n// TODO 로케일 설정에 따라서 포맷이 바뀌도록 해야한다.\nconst DATETIME_OPTIONS = {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n hour12: false\n}\n\nconst DATE_OPTIONS = {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric'\n}\n\nconst TIME_OPTIONS = {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n}\n\nconst OPTIONS = {\n datetime: DATETIME_OPTIONS,\n time: TIME_OPTIONS,\n date: DATE_OPTIONS\n}\n\nfunction getsec(time: string): number {\n var arr = time.split(':')\n return Number(arr[0]) * 3600 + Number(arr[1]) * 60 + (Number(arr[2]) || 0)\n}\n\n/* \n TODO date, time, month, week 등 datetime 이 외의 타입인 경우에는 문자열로 처리하도록 한다. \n 따라서, 이 경우는 타임존에 대한 처리가 불필요하다.\n*/\nexport const DateRenderer: FieldRenderer = (value, column, record, rowIndex, field) => {\n if (!value) {\n return ''\n }\n\n if (!isNaN(Number(value))) value = Number(value)\n\n var options = column.record.options || OPTIONS[column.type as 'datetime' | 'date' | 'time']\n var formatter = new Intl.DateTimeFormat(navigator.language, options)\n\n switch (column.type) {\n case 'datetime':\n return formatter.format(new Date(value))\n case 'date':\n return formatter.format(new Date(value))\n case 'time':\n default:\n return value\n }\n}\n"]}
@@ -1,2 +0,0 @@
1
- import { FieldRenderer } from '../types';
2
- export declare const ImageRenderer: FieldRenderer;
@@ -1,24 +0,0 @@
1
- import { html } from 'lit';
2
- const IMAGE_FALLBACK = new URL('../../../assets/images/no-image.png', import.meta.url).href;
3
- export const ImageRenderer = (value, column, record, rowIndex, field) => {
4
- let src;
5
- if (!value) {
6
- src = IMAGE_FALLBACK;
7
- }
8
- else if (typeof value === 'string') {
9
- src = value;
10
- }
11
- else {
12
- src = URL.createObjectURL(value);
13
- requestAnimationFrame(() => URL.revokeObjectURL(src));
14
- }
15
- const { width, height } = column.record.options || {};
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
- />`;
23
- };
24
- //# sourceMappingURL=image-renderer.js.map
@@ -1 +0,0 @@
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,CAAC;QACX,GAAG,GAAG,cAAc,CAAA;IACtB,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrC,GAAG,GAAG,KAAK,CAAA;IACb,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;QAChC,qBAAqB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAA;IACvD,CAAC;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"]}
@@ -1,2 +0,0 @@
1
- import { FieldRenderer } from '../types';
2
- export declare const Json5Renderer: FieldRenderer;