glide-data-grid-cells-fork 6.0.4-alpha8

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 (120) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +65 -0
  3. package/dist/cjs/cells/article-cell-editor.css +1 -0
  4. package/dist/cjs/cells/article-cell-editor.js +98 -0
  5. package/dist/cjs/cells/article-cell-editor.js.map +1 -0
  6. package/dist/cjs/cells/article-cell-types.js +3 -0
  7. package/dist/cjs/cells/article-cell-types.js.map +1 -0
  8. package/dist/cjs/cells/article-cell.js +71 -0
  9. package/dist/cjs/cells/article-cell.js.map +1 -0
  10. package/dist/cjs/cells/button-cell.js +94 -0
  11. package/dist/cjs/cells/button-cell.js.map +1 -0
  12. package/dist/cjs/cells/date-picker-cell.css +1 -0
  13. package/dist/cjs/cells/date-picker-cell.js +138 -0
  14. package/dist/cjs/cells/date-picker-cell.js.map +1 -0
  15. package/dist/cjs/cells/dropdown-cell.css +3 -0
  16. package/dist/cjs/cells/dropdown-cell.js +235 -0
  17. package/dist/cjs/cells/dropdown-cell.js.map +1 -0
  18. package/dist/cjs/cells/links-cell.css +1 -0
  19. package/dist/cjs/cells/links-cell.js +281 -0
  20. package/dist/cjs/cells/links-cell.js.map +1 -0
  21. package/dist/cjs/cells/multi-select-cell.css +2 -0
  22. package/dist/cjs/cells/multi-select-cell.js +485 -0
  23. package/dist/cjs/cells/multi-select-cell.js.map +1 -0
  24. package/dist/cjs/cells/range-cell.js +113 -0
  25. package/dist/cjs/cells/range-cell.js.map +1 -0
  26. package/dist/cjs/cells/sparkline-cell.js +116 -0
  27. package/dist/cjs/cells/sparkline-cell.js.map +1 -0
  28. package/dist/cjs/cells/spinner-cell.js +24 -0
  29. package/dist/cjs/cells/spinner-cell.js.map +1 -0
  30. package/dist/cjs/cells/star-cell.css +1 -0
  31. package/dist/cjs/cells/star-cell.js +124 -0
  32. package/dist/cjs/cells/star-cell.js.map +1 -0
  33. package/dist/cjs/cells/tags-cell.css +1 -0
  34. package/dist/cjs/cells/tags-cell.js +152 -0
  35. package/dist/cjs/cells/tags-cell.js.map +1 -0
  36. package/dist/cjs/cells/tree-view-cell.js +57 -0
  37. package/dist/cjs/cells/tree-view-cell.js.map +1 -0
  38. package/dist/cjs/cells/user-profile-cell.js +81 -0
  39. package/dist/cjs/cells/user-profile-cell.js.map +1 -0
  40. package/dist/cjs/draw-fns.js +32 -0
  41. package/dist/cjs/draw-fns.js.map +1 -0
  42. package/dist/cjs/index.js +49 -0
  43. package/dist/cjs/index.js.map +1 -0
  44. package/dist/dts/cells/article-cell-editor.d.ts +4 -0
  45. package/dist/dts/cells/article-cell-editor.d.ts.map +1 -0
  46. package/dist/dts/cells/article-cell-types.d.ts +7 -0
  47. package/dist/dts/cells/article-cell-types.d.ts.map +1 -0
  48. package/dist/dts/cells/article-cell.d.ts +4 -0
  49. package/dist/dts/cells/article-cell.d.ts.map +1 -0
  50. package/dist/dts/cells/button-cell.d.ts +16 -0
  51. package/dist/dts/cells/button-cell.d.ts.map +1 -0
  52. package/dist/dts/cells/date-picker-cell.d.ts +18 -0
  53. package/dist/dts/cells/date-picker-cell.d.ts.map +1 -0
  54. package/dist/dts/cells/dropdown-cell.d.ts +14 -0
  55. package/dist/dts/cells/dropdown-cell.d.ts.map +1 -0
  56. package/dist/dts/cells/links-cell.d.ts +19 -0
  57. package/dist/dts/cells/links-cell.d.ts.map +1 -0
  58. package/dist/dts/cells/multi-select-cell.d.ts +43 -0
  59. package/dist/dts/cells/multi-select-cell.d.ts.map +1 -0
  60. package/dist/dts/cells/range-cell.d.ts +13 -0
  61. package/dist/dts/cells/range-cell.d.ts.map +1 -0
  62. package/dist/dts/cells/sparkline-cell.d.ts +13 -0
  63. package/dist/dts/cells/sparkline-cell.d.ts.map +1 -0
  64. package/dist/dts/cells/spinner-cell.d.ts +7 -0
  65. package/dist/dts/cells/spinner-cell.d.ts.map +1 -0
  66. package/dist/dts/cells/star-cell.d.ts +8 -0
  67. package/dist/dts/cells/star-cell.d.ts.map +1 -0
  68. package/dist/dts/cells/tags-cell.d.ts +12 -0
  69. package/dist/dts/cells/tags-cell.d.ts.map +1 -0
  70. package/dist/dts/cells/tree-view-cell.d.ts +15 -0
  71. package/dist/dts/cells/tree-view-cell.d.ts.map +1 -0
  72. package/dist/dts/cells/user-profile-cell.d.ts +11 -0
  73. package/dist/dts/cells/user-profile-cell.d.ts.map +1 -0
  74. package/dist/dts/draw-fns.d.ts +8 -0
  75. package/dist/dts/draw-fns.d.ts.map +1 -0
  76. package/dist/dts/index.d.ts +17 -0
  77. package/dist/dts/index.d.ts.map +1 -0
  78. package/dist/esm/cells/article-cell-editor.css +1 -0
  79. package/dist/esm/cells/article-cell-editor.js +62 -0
  80. package/dist/esm/cells/article-cell-editor.js.map +1 -0
  81. package/dist/esm/cells/article-cell-types.js +2 -0
  82. package/dist/esm/cells/article-cell-types.js.map +1 -0
  83. package/dist/esm/cells/article-cell.js +46 -0
  84. package/dist/esm/cells/article-cell.js.map +1 -0
  85. package/dist/esm/cells/button-cell.js +92 -0
  86. package/dist/esm/cells/button-cell.js.map +1 -0
  87. package/dist/esm/cells/date-picker-cell.css +1 -0
  88. package/dist/esm/cells/date-picker-cell.js +126 -0
  89. package/dist/esm/cells/date-picker-cell.js.map +1 -0
  90. package/dist/esm/cells/dropdown-cell.css +3 -0
  91. package/dist/esm/cells/dropdown-cell.js +199 -0
  92. package/dist/esm/cells/dropdown-cell.js.map +1 -0
  93. package/dist/esm/cells/links-cell.css +1 -0
  94. package/dist/esm/cells/links-cell.js +245 -0
  95. package/dist/esm/cells/links-cell.js.map +1 -0
  96. package/dist/esm/cells/multi-select-cell.css +2 -0
  97. package/dist/esm/cells/multi-select-cell.js +441 -0
  98. package/dist/esm/cells/multi-select-cell.js.map +1 -0
  99. package/dist/esm/cells/range-cell.js +88 -0
  100. package/dist/esm/cells/range-cell.js.map +1 -0
  101. package/dist/esm/cells/sparkline-cell.js +114 -0
  102. package/dist/esm/cells/sparkline-cell.js.map +1 -0
  103. package/dist/esm/cells/spinner-cell.js +22 -0
  104. package/dist/esm/cells/spinner-cell.js.map +1 -0
  105. package/dist/esm/cells/star-cell.css +1 -0
  106. package/dist/esm/cells/star-cell.js +88 -0
  107. package/dist/esm/cells/star-cell.js.map +1 -0
  108. package/dist/esm/cells/tags-cell.css +1 -0
  109. package/dist/esm/cells/tags-cell.js +116 -0
  110. package/dist/esm/cells/tags-cell.js.map +1 -0
  111. package/dist/esm/cells/tree-view-cell.js +55 -0
  112. package/dist/esm/cells/tree-view-cell.js.map +1 -0
  113. package/dist/esm/cells/user-profile-cell.js +56 -0
  114. package/dist/esm/cells/user-profile-cell.js.map +1 -0
  115. package/dist/esm/draw-fns.js +28 -0
  116. package/dist/esm/draw-fns.js.map +1 -0
  117. package/dist/esm/index.js +30 -0
  118. package/dist/esm/index.js.map +1 -0
  119. package/dist/index.css +8 -0
  120. package/package.json +71 -0
@@ -0,0 +1,441 @@
1
+ import * as React from "react";
2
+ import { measureTextCached, getMiddleCenterBias, useTheme, GridCellKind, roundedRect, getLuminance } from "@glideapps/glide-data-grid";
3
+ import { styled } from "@linaria/react";
4
+ import Select, { components } from "react-select";
5
+ import CreatableSelect from "react-select/creatable";
6
+ const BUBBLE_HEIGHT = 20;
7
+ const BUBBLE_PADDING = 6;
8
+ const BUBBLE_MARGIN = 4;
9
+ /* This prefix is used when allowDuplicates is enabled to make sure that
10
+ all underlying values are unique. */
11
+ const VALUE_PREFIX = "__value";
12
+ const VALUE_PREFIX_REGEX = new RegExp(`^${VALUE_PREFIX}\\d+__`);
13
+ const Wrap = /*#__PURE__*/styled('div')({
14
+ name: "Wrap",
15
+ class: "gdg-w1i61rz",
16
+ propsAsIs: false
17
+ });
18
+ const PortalWrap = /*#__PURE__*/styled('div')({
19
+ name: "PortalWrap",
20
+ class: "gdg-phbadu4",
21
+ propsAsIs: false
22
+ });
23
+ /**
24
+ * Prepares the options for usage with the react-select component.
25
+ *
26
+ * @param options The options to prepare.
27
+ * @returns The prepared options in the format required by react-select.
28
+ */
29
+ export const prepareOptions = options => {
30
+ return options.map(option => {
31
+ if (typeof option === "string" || option === null || option === undefined) {
32
+ return {
33
+ value: option,
34
+ label: option ?? "",
35
+ color: undefined
36
+ };
37
+ }
38
+ return {
39
+ value: option.value,
40
+ label: option.label ?? option.value ?? "",
41
+ color: option.color ?? undefined
42
+ };
43
+ });
44
+ };
45
+ /**
46
+ * Resolve a list values to values compatible with react-select.
47
+ * If allowDuplicates is true, the values will be prefixed with a numbered prefix to
48
+ * make sure that all values are unique.
49
+ *
50
+ * @param values The values to resolve.
51
+ * @param options The options to use for the resolution.
52
+ * @param allowDuplicates If true, the values can contain duplicates.
53
+ * @returns The list of values compatible with react-select.
54
+ */
55
+ export const resolveValues = (values, options, allowDuplicates) => {
56
+ if (values === undefined || values === null) {
57
+ return [];
58
+ }
59
+ return values.map((value, index) => {
60
+ const valuePrefix = allowDuplicates ? `${VALUE_PREFIX}${index}__` : "";
61
+ const matchedOption = options.find(option => {
62
+ return option.value === value;
63
+ });
64
+ if (matchedOption) {
65
+ return {
66
+ ...matchedOption,
67
+ value: `${valuePrefix}${matchedOption.value}`
68
+ };
69
+ }
70
+ return {
71
+ value: `${valuePrefix}${value}`,
72
+ label: value
73
+ };
74
+ });
75
+ };
76
+ const CustomMenu = p => {
77
+ const {
78
+ Menu
79
+ } = components;
80
+ const {
81
+ children,
82
+ ...rest
83
+ } = p;
84
+ return React.createElement(Menu, {
85
+ ...rest
86
+ }, children);
87
+ };
88
+ const Editor = p => {
89
+ const {
90
+ value: cell,
91
+ initialValue,
92
+ onChange,
93
+ onFinishedEditing
94
+ } = p;
95
+ const {
96
+ options: optionsIn,
97
+ values: valuesIn,
98
+ allowCreation,
99
+ allowDuplicates
100
+ } = cell.data;
101
+ const theme = useTheme();
102
+ const [value, setValue] = React.useState(valuesIn);
103
+ const [menuOpen, setMenuOpen] = React.useState(true);
104
+ const [inputValue, setInputValue] = React.useState(initialValue ?? "");
105
+ const options = React.useMemo(() => {
106
+ return prepareOptions(optionsIn ?? []);
107
+ }, [optionsIn]);
108
+ const menuDisabled = allowCreation && allowDuplicates && options.length === 0;
109
+ // Prevent the grid from handling the keydown as long as the menu is open:
110
+ // This allows usage of enter without triggering the grid to finish editing.
111
+ const onKeyDown = React.useCallback(e => {
112
+ if (menuOpen) {
113
+ e.stopPropagation();
114
+ }
115
+ }, [menuOpen]);
116
+ // Apply styles to the react-select component.
117
+ // All components: https://react-select.com/components
118
+ const colorStyles = {
119
+ control: base => ({
120
+ ...base,
121
+ border: 0,
122
+ boxShadow: "none",
123
+ backgroundColor: theme.bgCell
124
+ }),
125
+ menu: styles => ({
126
+ ...styles,
127
+ backgroundColor: theme.bgCell
128
+ }),
129
+ option: (styles, state) => {
130
+ return {
131
+ ...styles,
132
+ fontSize: theme.editorFontSize,
133
+ fontFamily: theme.fontFamily,
134
+ color: theme.textDark,
135
+ ...(state.isFocused ? {
136
+ backgroundColor: theme.accentLight,
137
+ cursor: "pointer"
138
+ } : {}),
139
+ ":active": {
140
+ ...styles[":active"],
141
+ color: theme.accentFg,
142
+ backgroundColor: theme.accentColor
143
+ }
144
+ };
145
+ },
146
+ input: (styles, {
147
+ isDisabled
148
+ }) => {
149
+ if (isDisabled) {
150
+ return {
151
+ display: "none"
152
+ };
153
+ }
154
+ return {
155
+ ...styles,
156
+ fontSize: theme.editorFontSize,
157
+ fontFamily: theme.fontFamily,
158
+ color: theme.textDark
159
+ };
160
+ },
161
+ placeholder: styles => {
162
+ return {
163
+ ...styles,
164
+ fontSize: theme.editorFontSize,
165
+ fontFamily: theme.fontFamily,
166
+ color: theme.textLight
167
+ };
168
+ },
169
+ noOptionsMessage: styles => {
170
+ return {
171
+ ...styles,
172
+ fontSize: theme.editorFontSize,
173
+ fontFamily: theme.fontFamily,
174
+ color: theme.textLight
175
+ };
176
+ },
177
+ clearIndicator: styles => {
178
+ return {
179
+ ...styles,
180
+ color: theme.textLight,
181
+ ":hover": {
182
+ color: theme.textDark,
183
+ cursor: "pointer"
184
+ }
185
+ };
186
+ },
187
+ multiValue: (styles, {
188
+ data
189
+ }) => {
190
+ return {
191
+ ...styles,
192
+ backgroundColor: data.color ?? theme.bgBubble,
193
+ borderRadius: `${theme.roundingRadius ?? BUBBLE_HEIGHT / 2}px`
194
+ };
195
+ },
196
+ multiValueLabel: (styles, {
197
+ data,
198
+ isDisabled
199
+ }) => {
200
+ return {
201
+ ...styles,
202
+ paddingRight: isDisabled ? BUBBLE_PADDING : 0,
203
+ paddingLeft: BUBBLE_PADDING,
204
+ paddingTop: 0,
205
+ paddingBottom: 0,
206
+ color: data.color ?
207
+ // If a color is set for this option,
208
+ // we use it to determine the text color.
209
+ getLuminance(data.color) > 0.5 ? "black" : "white" : theme.textBubble,
210
+ fontSize: theme.editorFontSize,
211
+ fontFamily: theme.fontFamily,
212
+ justifyContent: "center",
213
+ alignItems: "center",
214
+ display: "flex",
215
+ height: BUBBLE_HEIGHT
216
+ };
217
+ },
218
+ multiValueRemove: (styles, {
219
+ data,
220
+ isDisabled,
221
+ isFocused
222
+ }) => {
223
+ if (isDisabled) {
224
+ return {
225
+ display: "none"
226
+ };
227
+ }
228
+ return {
229
+ ...styles,
230
+ color: data.color ?
231
+ // If a color is set for this option,
232
+ // we use it to determine the text color.
233
+ getLuminance(data.color) > 0.5 ? "black" : "white" : theme.textBubble,
234
+ backgroundColor: undefined,
235
+ borderRadius: isFocused ? `${theme.roundingRadius ?? BUBBLE_HEIGHT / 2}px` : undefined,
236
+ ":hover": {
237
+ cursor: "pointer"
238
+ }
239
+ };
240
+ }
241
+ };
242
+ // This is used to submit the values to the grid.
243
+ const submitValues = React.useCallback(values => {
244
+ // Change the list of values to the actual values by removing the prefix.
245
+ // This is only relevant in the case of allowDuplicates being true.
246
+ const mappedValues = values.map(v => {
247
+ return allowDuplicates && v.startsWith(VALUE_PREFIX) ? v.replace(new RegExp(VALUE_PREFIX_REGEX), "") : v;
248
+ });
249
+ setValue(mappedValues);
250
+ onChange({
251
+ ...cell,
252
+ data: {
253
+ ...cell.data,
254
+ values: mappedValues
255
+ }
256
+ });
257
+ }, [cell, onChange, allowDuplicates]);
258
+ const handleKeyDown = event => {
259
+ switch (event.key) {
260
+ case "Enter":
261
+ case "Tab":
262
+ if (!inputValue) {
263
+ // If the user pressed enter or tab without entering anything,
264
+ // we finish editing based on the current state.
265
+ onFinishedEditing(cell, [0, 1]);
266
+ return;
267
+ }
268
+ if (allowDuplicates && allowCreation) {
269
+ // This is a workaround to allow the user to enter new values
270
+ // multiple times.
271
+ setInputValue("");
272
+ submitValues([...(value ?? []), inputValue]);
273
+ setMenuOpen(false);
274
+ event.preventDefault();
275
+ }
276
+ }
277
+ };
278
+ const SelectComponent = allowCreation ? CreatableSelect : Select;
279
+ return React.createElement(Wrap, {
280
+ onKeyDown: onKeyDown,
281
+ "data-testid": "multi-select-cell"
282
+ }, React.createElement(SelectComponent, {
283
+ className: "gdg-multi-select",
284
+ isMulti: true,
285
+ isDisabled: cell.readonly,
286
+ isClearable: true,
287
+ isSearchable: true,
288
+ inputValue: inputValue,
289
+ onInputChange: setInputValue,
290
+ options: options,
291
+ placeholder: cell.readonly ? "" : allowCreation ? "Add..." : undefined,
292
+ noOptionsMessage: input => {
293
+ return allowCreation && allowDuplicates && input.inputValue ? `Create "${input.inputValue}"` : undefined;
294
+ },
295
+ menuIsOpen: cell.readonly ? false : menuOpen,
296
+ onMenuOpen: () => setMenuOpen(true),
297
+ onMenuClose: () => setMenuOpen(false),
298
+ value: resolveValues(value, options, allowDuplicates),
299
+ onKeyDown: cell.readonly ? undefined : handleKeyDown,
300
+ menuPlacement: "auto",
301
+ menuPortalTarget: document.getElementById("portal"),
302
+ autoFocus: true,
303
+ openMenuOnFocus: true,
304
+ openMenuOnClick: true,
305
+ closeMenuOnSelect: true,
306
+ backspaceRemovesValue: true,
307
+ escapeClearsValue: false,
308
+ styles: colorStyles,
309
+ components: {
310
+ DropdownIndicator: () => null,
311
+ IndicatorSeparator: () => null,
312
+ Menu: props => {
313
+ if (menuDisabled) {
314
+ return null;
315
+ }
316
+ return React.createElement(PortalWrap, null, React.createElement(CustomMenu, {
317
+ className: "click-outside-ignore",
318
+ ...props
319
+ }));
320
+ }
321
+ },
322
+ onChange: async e => {
323
+ if (e === null) {
324
+ return;
325
+ }
326
+ submitValues(e.map(x => x.value));
327
+ }
328
+ }));
329
+ };
330
+ const renderer = {
331
+ kind: GridCellKind.Custom,
332
+ isMatch: c => c.data.kind === "multi-select-cell",
333
+ draw: (args, cell) => {
334
+ const {
335
+ ctx,
336
+ theme,
337
+ rect,
338
+ highlighted
339
+ } = args;
340
+ const {
341
+ values,
342
+ options: optionsIn
343
+ } = cell.data;
344
+ if (values === undefined || values === null) {
345
+ return true;
346
+ }
347
+ const options = prepareOptions(optionsIn ?? []);
348
+ const drawArea = {
349
+ x: rect.x + theme.cellHorizontalPadding,
350
+ y: rect.y + theme.cellVerticalPadding,
351
+ width: rect.width - 2 * theme.cellHorizontalPadding,
352
+ height: rect.height - 2 * theme.cellVerticalPadding
353
+ };
354
+ const rows = Math.max(1, Math.floor(drawArea.height / (BUBBLE_HEIGHT + BUBBLE_PADDING)));
355
+ let {
356
+ x
357
+ } = drawArea;
358
+ let row = 1;
359
+ let y = rows === 1 ? drawArea.y + (drawArea.height - BUBBLE_HEIGHT) / 2 : drawArea.y + (drawArea.height - rows * BUBBLE_HEIGHT - (rows - 1) * BUBBLE_PADDING) / 2;
360
+ for (const value of values) {
361
+ const matchedOption = options.find(t => t.value === value);
362
+ const color = matchedOption?.color ?? (highlighted ? theme.bgBubbleSelected : theme.bgBubble);
363
+ const displayText = matchedOption?.label ?? value;
364
+ const metrics = measureTextCached(displayText, ctx);
365
+ const width = metrics.width + BUBBLE_PADDING * 2;
366
+ const textY = BUBBLE_HEIGHT / 2;
367
+ if (x !== drawArea.x && x + width > drawArea.x + drawArea.width && row < rows) {
368
+ row++;
369
+ y += BUBBLE_HEIGHT + BUBBLE_PADDING;
370
+ x = drawArea.x;
371
+ }
372
+ ctx.fillStyle = color;
373
+ ctx.beginPath();
374
+ roundedRect(ctx, x, y, width, BUBBLE_HEIGHT, theme.roundingRadius ?? BUBBLE_HEIGHT / 2);
375
+ ctx.fill();
376
+ // If a color is set for this option, we use either black or white as the text color depending on the background.
377
+ // Otherwise, use the configured textBubble color.
378
+ ctx.fillStyle = matchedOption?.color ? getLuminance(color) > 0.5 ? "#000000" : "#ffffff" : theme.textBubble;
379
+ ctx.fillText(displayText, x + BUBBLE_PADDING, y + textY + getMiddleCenterBias(ctx, theme));
380
+ x += width + BUBBLE_MARGIN;
381
+ if (x > drawArea.x + drawArea.width + theme.cellHorizontalPadding && row >= rows) {
382
+ break;
383
+ }
384
+ }
385
+ return true;
386
+ },
387
+ measure: (ctx, cell, t) => {
388
+ const {
389
+ values,
390
+ options
391
+ } = cell.data;
392
+ if (!values) {
393
+ return t.cellHorizontalPadding * 2;
394
+ }
395
+ // Resolve the values to the actual display labels:
396
+ const labels = resolveValues(values, prepareOptions(options ?? []), cell.data.allowDuplicates).map(x => x.label ?? x.value);
397
+ return labels.reduce((acc, data) => ctx.measureText(data).width + acc + BUBBLE_PADDING * 2 + BUBBLE_MARGIN, 0) + 2 * t.cellHorizontalPadding - 4;
398
+ },
399
+ provideEditor: () => ({
400
+ editor: Editor,
401
+ disablePadding: true,
402
+ deletedValue: v => ({
403
+ ...v,
404
+ copyData: "",
405
+ data: {
406
+ ...v.data,
407
+ values: []
408
+ }
409
+ })
410
+ }),
411
+ onPaste: (val, cell) => {
412
+ if (!val || !val.trim()) {
413
+ // Empty values should result in empty strings
414
+ return {
415
+ ...cell,
416
+ values: []
417
+ };
418
+ }
419
+ let values = val.split(",").map(s => s.trim());
420
+ if (!cell.allowDuplicates) {
421
+ // Remove all duplicates
422
+ values = values.filter((v, index) => values.indexOf(v) === index);
423
+ }
424
+ if (!cell.allowCreation) {
425
+ // Only allow values that are part of the options:
426
+ const options = prepareOptions(cell.options ?? []);
427
+ values = values.filter(v => options.find(o => o.value === v));
428
+ }
429
+ if (values.length === 0) {
430
+ // We were not able to parse any values, return undefined to
431
+ // not change the cell value.
432
+ return undefined;
433
+ }
434
+ return {
435
+ ...cell,
436
+ values
437
+ };
438
+ }
439
+ };
440
+ export default renderer;
441
+
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-select-cell.js","sourceRoot":"","sources":["../../../src/cells/multi-select-cell.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ import { measureTextCached, getMiddleCenterBias, GridCellKind, } from "@glideapps/glide-data-grid";
2
+ import * as React from "react";
3
+ import { roundedRect } from "../draw-fns.js";
4
+ const RANGE_HEIGHT = 6;
5
+ const inputStyle = {
6
+ marginRight: 8,
7
+ };
8
+ const wrapperStyle = {
9
+ display: "flex",
10
+ alignItems: "center",
11
+ flexGrow: 1,
12
+ };
13
+ const renderer = {
14
+ kind: GridCellKind.Custom,
15
+ isMatch: (c) => c.data.kind === "range-cell",
16
+ draw: (args, cell) => {
17
+ const { ctx, theme, rect } = args;
18
+ const { min, max, value, label, measureLabel } = cell.data;
19
+ const x = rect.x + theme.cellHorizontalPadding;
20
+ const yMid = rect.y + rect.height / 2;
21
+ const rangeSize = max - min;
22
+ const fillRatio = (value - min) / rangeSize;
23
+ ctx.save();
24
+ let labelWidth = 0;
25
+ if (label !== undefined) {
26
+ ctx.font = `12px ${theme.fontFamily}`; // fixme this is slow
27
+ labelWidth =
28
+ measureTextCached(measureLabel ?? label, ctx, `12px ${theme.fontFamily}`).width +
29
+ theme.cellHorizontalPadding;
30
+ }
31
+ const rangeWidth = rect.width - theme.cellHorizontalPadding * 2 - labelWidth;
32
+ if (rangeWidth >= RANGE_HEIGHT) {
33
+ const gradient = ctx.createLinearGradient(x, yMid, x + rangeWidth, yMid);
34
+ gradient.addColorStop(0, theme.accentColor);
35
+ gradient.addColorStop(fillRatio, theme.accentColor);
36
+ gradient.addColorStop(fillRatio, theme.bgBubble);
37
+ gradient.addColorStop(1, theme.bgBubble);
38
+ ctx.beginPath();
39
+ ctx.fillStyle = gradient;
40
+ roundedRect(ctx, x, yMid - RANGE_HEIGHT / 2, rangeWidth, RANGE_HEIGHT, RANGE_HEIGHT / 2);
41
+ ctx.fill();
42
+ ctx.beginPath();
43
+ roundedRect(ctx, x + 0.5, yMid - RANGE_HEIGHT / 2 + 0.5, rangeWidth - 1, RANGE_HEIGHT - 1, (RANGE_HEIGHT - 1) / 2);
44
+ ctx.strokeStyle = theme.accentLight;
45
+ ctx.lineWidth = 1;
46
+ ctx.stroke();
47
+ }
48
+ if (label !== undefined) {
49
+ ctx.textAlign = "right";
50
+ ctx.fillStyle = theme.textDark;
51
+ ctx.fillText(label, rect.x + rect.width - theme.cellHorizontalPadding, yMid + getMiddleCenterBias(ctx, `12px ${theme.fontFamily}`));
52
+ }
53
+ ctx.restore();
54
+ return true;
55
+ },
56
+ provideEditor: () => {
57
+ // eslint-disable-next-line react/display-name
58
+ return p => {
59
+ const { data, readonly } = p.value;
60
+ const strValue = data.value.toString();
61
+ const strMin = data.min.toString();
62
+ const strMax = data.max.toString();
63
+ const strStep = data.step.toString();
64
+ const onChange = (e) => {
65
+ p.onChange({
66
+ ...p.value,
67
+ data: {
68
+ ...data,
69
+ value: Number(e.target.value),
70
+ },
71
+ });
72
+ };
73
+ return (React.createElement("label", { style: wrapperStyle },
74
+ React.createElement("input", { style: inputStyle, type: "range", value: strValue, min: strMin, max: strMax, step: strStep, onChange: onChange, disabled: readonly }),
75
+ strValue));
76
+ };
77
+ },
78
+ onPaste: (v, d) => {
79
+ let num = Number.parseFloat(v);
80
+ num = Number.isNaN(num) ? d.value : Math.max(d.min, Math.min(d.max, num));
81
+ return {
82
+ ...d,
83
+ value: num,
84
+ };
85
+ },
86
+ };
87
+ export default renderer;
88
+ //# sourceMappingURL=range-cell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range-cell.js","sourceRoot":"","sources":["../../../src/cells/range-cell.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ import { parseToRgba, GridCellKind } from "@glideapps/glide-data-grid";
2
+ const renderer = {
3
+ kind: GridCellKind.Custom,
4
+ isMatch: (cell) => cell.data.kind === "sparkline-cell",
5
+ needsHover: true,
6
+ needsHoverPosition: true,
7
+ draw: (args, cell) => {
8
+ const { ctx, theme, rect, hoverAmount, hoverX } = args;
9
+ // eslint-disable-next-line prefer-const
10
+ let { values, yAxis, color, graphKind = "area", displayValues, hideAxis } = cell.data;
11
+ const [minY, maxY] = yAxis;
12
+ if (values.length === 0)
13
+ return true;
14
+ values = values.map(x => Math.min(1, Math.max(0, (x - minY) / (maxY - minY))));
15
+ const padX = theme.cellHorizontalPadding;
16
+ const drawX = padX + rect.x;
17
+ const y = rect.y + 3;
18
+ const height = rect.height - 6;
19
+ const width = rect.width - padX * 2;
20
+ const delta = maxY - minY;
21
+ const zeroY = maxY <= 0 ? y : minY >= 0 ? y + height : y + height * (maxY / delta);
22
+ // draw zero
23
+ if (!hideAxis && minY <= 0 && maxY >= 0) {
24
+ ctx.beginPath();
25
+ ctx.moveTo(drawX, zeroY);
26
+ ctx.lineTo(drawX + width, zeroY);
27
+ ctx.globalAlpha = 0.4;
28
+ ctx.lineWidth = 1;
29
+ ctx.strokeStyle = theme.textLight;
30
+ ctx.stroke();
31
+ ctx.globalAlpha = 1;
32
+ }
33
+ if (graphKind === "bar") {
34
+ ctx.beginPath();
35
+ const margin = 2;
36
+ const spacing = (values.length - 1) * margin;
37
+ const barWidth = (width - spacing) / values.length;
38
+ let x = drawX;
39
+ for (const val of values) {
40
+ const barY = y + height - val * height;
41
+ ctx.moveTo(x, zeroY);
42
+ ctx.lineTo(x + barWidth, zeroY);
43
+ ctx.lineTo(x + barWidth, barY);
44
+ ctx.lineTo(x, barY);
45
+ x += barWidth + margin;
46
+ }
47
+ ctx.fillStyle = cell.data.color ?? theme.accentColor;
48
+ ctx.fill();
49
+ }
50
+ else {
51
+ if (values.length === 1) {
52
+ values = [values[0], values[0]];
53
+ if (displayValues) {
54
+ displayValues = [displayValues[0], displayValues[0]];
55
+ }
56
+ }
57
+ // draw line
58
+ ctx.beginPath();
59
+ const xStep = (rect.width - 16) / (values.length - 1);
60
+ const points = values.map((val, ind) => {
61
+ return {
62
+ x: drawX + xStep * ind,
63
+ y: y + height - val * height,
64
+ };
65
+ });
66
+ ctx.moveTo(points[0].x, points[0].y);
67
+ let i = 0;
68
+ if (points.length > 2) {
69
+ for (i = 1; i < points.length - 2; i++) {
70
+ const xControl = (points[i].x + points[i + 1].x) / 2;
71
+ const yControl = (points[i].y + points[i + 1].y) / 2;
72
+ ctx.quadraticCurveTo(points[i].x, points[i].y, xControl, yControl);
73
+ }
74
+ }
75
+ ctx.quadraticCurveTo(points[i].x, points[i].y, points[i + 1].x, points[i + 1].y);
76
+ ctx.strokeStyle = color ?? theme.accentColor;
77
+ ctx.lineWidth = 1 + hoverAmount * 0.5;
78
+ ctx.stroke();
79
+ ctx.lineTo(rect.x + rect.width - padX, zeroY);
80
+ ctx.lineTo(rect.x + padX, zeroY);
81
+ ctx.closePath();
82
+ if (graphKind === "area") {
83
+ ctx.globalAlpha = 0.2 + 0.2 * hoverAmount;
84
+ const grad = ctx.createLinearGradient(0, y, 0, y + height * 1.4);
85
+ grad.addColorStop(0, color ?? theme.accentColor);
86
+ const [r, g, b] = parseToRgba(color ?? theme.accentColor);
87
+ grad.addColorStop(1, `rgba(${r}, ${g}, ${b}, 0)`);
88
+ ctx.fillStyle = grad;
89
+ ctx.fill();
90
+ ctx.globalAlpha = 1;
91
+ }
92
+ if (hoverX !== undefined && (graphKind === "line" || graphKind === "area") && displayValues !== undefined) {
93
+ ctx.beginPath();
94
+ const closest = Math.min(values.length - 1, Math.max(0, Math.round((hoverX - padX) / xStep)));
95
+ ctx.moveTo(drawX + closest * xStep, rect.y + 1);
96
+ ctx.lineTo(drawX + closest * xStep, rect.y + rect.height);
97
+ ctx.lineWidth = 1;
98
+ ctx.strokeStyle = theme.textLight;
99
+ ctx.stroke();
100
+ ctx.save();
101
+ ctx.font = `8px ${theme.fontFamily}`;
102
+ ctx.fillStyle = theme.textMedium;
103
+ ctx.textBaseline = "top";
104
+ ctx.fillText(displayValues[closest], drawX, rect.y + theme.cellVerticalPadding);
105
+ ctx.restore();
106
+ }
107
+ }
108
+ return true;
109
+ },
110
+ provideEditor: () => undefined,
111
+ onPaste: (_v, d) => d,
112
+ };
113
+ export default renderer;
114
+ //# sourceMappingURL=sparkline-cell.js.map