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